diff --git a/CHANGELOG.md b/CHANGELOG.md index fdd488ba3..346ba00b7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -19,6 +19,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). - **core** add process emissions from chemicals subsector and from plastics incineration - **37_industry** add process-based steel model as alternative to CES-tree branch - **47_regipol** add support for delaying quantity targets and improving regional emission tax convergence +- **core** change of preference parameters and associated computation of interest rates/mark ups ### fixed - fixed weights of energy carriers in `pm_IndstCO2Captured` diff --git a/CITATION.cff b/CITATION.cff index aada8f1e5..e0ea58e8c 100644 --- a/CITATION.cff +++ b/CITATION.cff @@ -251,8 +251,8 @@ authors: affiliation: "Potsdam Institute for Climate Impact Research" title: REMIND - REgional Model of INvestments and Development -version: "3.2.1.dev1128" -date-released: 2024-02-28 +version: "3.2.1.dev1226" +date-released: 2024-03-01 repository-code: https://github.com/remindmodel/remind keywords: - energy diff --git a/DESCRIPTION b/DESCRIPTION index 9d8dd29c3..9af8641c3 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -54,12 +54,12 @@ Imports: piamInterfaces (>= 0.12.18), plotly, purrr, - quitte (>= 0.3123.0), + quitte (>= 0.3128.4), R.utils, raster, readr, readxl, - remind2 (>= 1.125.0), + remind2 (>= 1.135.6), renv, reshape2, reticulate, diff --git a/Makefile b/Makefile index da1cc2fe4..5c941a393 100644 --- a/Makefile +++ b/Makefile @@ -91,6 +91,10 @@ test-full: ## Run all tests, including coupling tests and a default $(info Full tests take more than an hour to run, please be patient) @TESTTHAT_RUN_SLOW=TRUE Rscript -e 'testthat::test_dir("tests/testthat")' +test-full-slurm: ##test-full, but on slurm + $(info Full tests take more than an hour to run, please be patient) + @sbatch --qos=priority --wrap="make test-full" --job-name=test-full --mail-type=END --output=test-full.log --comment="test-full.log" + test-validation: ## Run validation tests, requires a full set of runs in the output folder $(info Run validation tests, requires a full set of runs in the output folder) @TESTTHAT_RUN_SLOW=TRUE Rscript -e 'testthat::test_dir("tests/testthat/validation")' diff --git a/config/default.cfg b/config/default.cfg index 39957fd61..20f401172 100644 --- a/config/default.cfg +++ b/config/default.cfg @@ -49,6 +49,12 @@ cfg$runstatistics <- "/p/projects/rd3mod/models/statistics/remind" # copied into remind when starting a run and required to calculate climate responses (e.g. temperature). cfg$magicc_template <- "/p/projects/rd3mod/magicc/" +#### Folder containing files for climate-assessment that cannot be published with REMIND +# These files currently all have permissive licenses and can be easily found online +cfg$climate_assessment_root <- "/p/projects/rd3mod/python/climate-assessment/src/" +cfg$climate_assessment_files_dir <- "/p/projects/rd3mod/climate-assessment-files/" +cfg$climate_assessment_magicc_bin <- "/p/projects/rd3mod/climate-assessment-files/magicc-v7.5.3/bin/magicc" + #### Output folder of the modeltests generated by running config/scenario_config_AMT.csv # start.R searches in this folder for finished runs to be used as path_gdx... cfg$modeltests_folder <- "/p/projects/remind/modeltests/remind/output" @@ -63,7 +69,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.2.1.dev1128" +cfg$model_version <- "3.2.1.dev1226" #### settings #### cfg$gms <- list() @@ -110,7 +116,7 @@ cfg$logoption <- 2 # Just list the name of the output scripts that should be used by output.R # At the moment there are several R-scripts located in scripts/output/ -cfg$output <- c("reporting","reportCEScalib","rds_report","fixOnRef") #,"validation","emulator","reportCEScalib","validationSummary","dashboard") +cfg$output <- c("reporting","reportCEScalib","rds_report","fixOnRef") #"ar6Climate","emulator" # Set the format for the results folder, type string :date: in order to use the current time stamp in the folder name (e.g. "results:date:") use :title: to use the current title in the folder name cfg$results_folder <- "output/:title::date:" diff --git a/config/scenario_config_21_EU11_ECEMF.csv b/config/scenario_config_21_EU11_ECEMF.csv index fa6505513..74f1fea3e 100644 --- a/config/scenario_config_21_EU11_ECEMF.csv +++ b/config/scenario_config_21_EU11_ECEMF.csv @@ -8,47 +8,47 @@ xx_DIAG-C400-lin;0,DIAG;;;;./config/regionmapping_21_EU11.csv;./config/extramapp # _____NZero_DIAG_scenario_____;0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; xx_DIAG-NZero;0,DIAG;;;;./config/regionmapping_21_EU11.csv;./config/extramapping_EU27.csv;rcp20;9;globallyOptimal;650;diffCurvPhaseIn2Lin;100;2080;;9;;;;;;;;;;;;NDC;regiCarbonPrice;(2035,2040,2045,2050).EU27_regi.tax.t.PE.biomass 0.237825;2020.2030.EU27_regi.all.year.netGHG_LULUCFGrassi_intraRegBunker 2.122, 2035.2050.EU27_regi.all.year.netGHG_LULUCFGrassi 0.01;on;on;EUR_regi, NEU_regi;;;;;;;;;;;;;;;;heat;Mix4;2025;xx_DIAG-NPI;xx_DIAG-NPI;xx_DIAG-NPI;;;on;;;;;;;;;;;; # _____C400-lin_tech_constraint_scenarios_____;0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -xx_DIAG-C400-lin-LimBio;0,DIAG;;;;./config/regionmapping_21_EU11.csv;./config/extramapping_EU27.csv;rcp26;;globallyOptimal;0;NPi;;;;9;;;;;;;;;;;;NDC;regiCarbonPrice;(2035,2040,2045,2050).GLO.tax.t.PE.biomass 3.17, (2035,2040,2045,2050).EUR_regi.tax.t.PE.biomass 0.22;;on;on;EUR_regi, NEU_regi;;;;;;;;;;;;;;;;heat;Mix4;2025;xx_DIAG-C400-lin;xx_DIAG-C400-lin;xx_DIAG-NPI;;;on;;;;;;;GLO.(2025 116,2030 196,2035 277,2040 357,2045 438,2050 518,2055 598,2060 679,2070 839,2080 1000,2090 1161,2100 1321,2110 1321,2130 1321,2150 1321);;;;; -xx_DIAG-C400-lin-LimCCS;0,DIAG;;;;./config/regionmapping_21_EU11.csv;./config/extramapping_EU27.csv;rcp26;;globallyOptimal;0;NPi;;;;9;;;;;;;;;;;;NDC;regiCarbonPrice;(2035,2040,2045,2050).EU27_regi.tax.t.PE.biomass 0.237825, (2035,2040,2045,2050).GLO.tax.t.CCS.all 2000, (2035,2040,2045,2050).EUR_regi.tax.t.CCS.all 250;;on;on;EUR_regi, NEU_regi;;;;;;;;;;;;;;;;heat;Mix4;2025;xx_DIAG-C400-lin;xx_DIAG-C400-lin;xx_DIAG-NPI;;;on;;;;;;;GLO.(2025 116,2030 196,2035 277,2040 357,2045 438,2050 518,2055 598,2060 679,2070 839,2080 1000,2090 1161,2100 1321,2110 1321,2130 1321,2150 1321);;;;; -xx_DIAG-C400-lin-LimNuclear;0,DIAG;;;;./config/regionmapping_21_EU11.csv;./config/extramapping_EU27.csv;rcp26;;globallyOptimal;0;NPi;;;;9;;;;;;;;;;;;NDC;regiCarbonPrice;(2035,2040,2045,2050).EU27_regi.tax.t.PE.biomass 0.237825;;on;on;EUR_regi, NEU_regi;;;;;;;;5;;;;;;;;heat;Mix4;2025;xx_DIAG-C400-lin;xx_DIAG-C400-lin;xx_DIAG-NPI;;;on;;;;ENC,EWN,ECS,ESC,ECE,FRA,DEU,UKI,ESW;;;GLO.(2025 116,2030 196,2035 277,2040 357,2045 438,2050 518,2055 598,2060 679,2070 839,2080 1000,2090 1161,2100 1321,2110 1321,2130 1321,2150 1321);;;;; +xx_DIAG-C400-lin-LimBio;0,DIAG;;;;./config/regionmapping_21_EU11.csv;./config/extramapping_EU27.csv;rcp26;;globallyOptimal;0;NPi;;;;9;;;;;;;;;;;;NDC;regiCarbonPrice;(2035,2040,2045,2050).GLO.tax.t.PE.biomass 3.17, (2035,2040,2045,2050).EUR_regi.tax.t.PE.biomass 0.22;;on;on;EUR_regi, NEU_regi;;;;;;;;;;;;;;;;heat;Mix4;2025;xx_DIAG-C400-lin;xx_DIAG-NPI;xx_DIAG-NPI;;;on;;;;;;;GLO.(2025 116,2030 196,2035 277,2040 357,2045 438,2050 518,2055 598,2060 679,2070 839,2080 1000,2090 1161,2100 1321,2110 1321,2130 1321,2150 1321);;;;; +xx_DIAG-C400-lin-LimCCS;0,DIAG;;;;./config/regionmapping_21_EU11.csv;./config/extramapping_EU27.csv;rcp26;;globallyOptimal;0;NPi;;;;9;;;;;;;;;;;;NDC;regiCarbonPrice;(2035,2040,2045,2050).EU27_regi.tax.t.PE.biomass 0.237825, (2035,2040,2045,2050).GLO.tax.t.CCS.all 2000, (2035,2040,2045,2050).EUR_regi.tax.t.CCS.all 250;;on;on;EUR_regi, NEU_regi;;;;;;;;;;;;;;;;heat;Mix4;2025;xx_DIAG-C400-lin;xx_DIAG-NPI;xx_DIAG-NPI;;;on;;;;;;;GLO.(2025 116,2030 196,2035 277,2040 357,2045 438,2050 518,2055 598,2060 679,2070 839,2080 1000,2090 1161,2100 1321,2110 1321,2130 1321,2150 1321);;;;; +xx_DIAG-C400-lin-LimNuclear;0,DIAG;;;;./config/regionmapping_21_EU11.csv;./config/extramapping_EU27.csv;rcp26;;globallyOptimal;0;NPi;;;;9;;;;;;;;;;;;NDC;regiCarbonPrice;(2035,2040,2045,2050).EU27_regi.tax.t.PE.biomass 0.237825;;on;on;EUR_regi, NEU_regi;;;;;;;;5;;;;;;;;heat;Mix4;2025;xx_DIAG-C400-lin;xx_DIAG-NPI;xx_DIAG-NPI;;;on;;;;ENC,EWN,ECS,ESC,ECE,FRA,DEU,UKI,ESW;;;GLO.(2025 116,2030 196,2035 277,2040 357,2045 438,2050 518,2055 598,2060 679,2070 839,2080 1000,2090 1161,2100 1321,2110 1321,2130 1321,2150 1321);;;;; # _____C400-lin_DIAG_paradigm_shift_scenarios_____;0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -xx_DIAG-C400-lin-HighVRE;0,DIAG;;;;./config/regionmapping_21_EU11.csv;./config/extramapping_EU27.csv;rcp26;;globallyOptimal;0;NPi;;;;9;;;;;;;;;;;;NDC;regiCarbonPrice;(2035,2040,2045,2050).EU27_regi.tax.t.PE.biomass 0.237825;;on;on;EUR_regi, NEU_regi;;;;;;;;;;;;;;;;heat;Mix4;2025;xx_DIAG-C400-lin;xx_DIAG-C400-lin;xx_DIAG-NPI;;;on;;;2050.EUR_regi 0.7;;wind 2300, windoff 4700, spv 5060;wind 0.9, windoff 0.9, spv 0.9;GLO.(2025 116,2030 196,2035 277,2040 357,2045 438,2050 518,2055 598,2060 679,2070 839,2080 1000,2090 1161,2100 1321,2110 1321,2130 1321,2150 1321);;;;; -xx_DIAG-C400-lin-HighElectrification;0,DIAG;;;;./config/regionmapping_21_EU11.csv;./config/extramapping_EU27.csv;rcp26;;globallyOptimal;0;NPi;;;;9;;;;;;;;;;;;NDC;regiCarbonPrice;(2035,2040,2045,2050).EU27_regi.tax.t.PE.biomass 0.237825;;on;on;EUR_regi, NEU_regi;;;;;;;;;;;;;;;;heat;Mix4;2025;xx_DIAG-C400-lin;xx_DIAG-C400-lin;xx_DIAG-NPI;;;on;elecPrice;;;;;wind 0.820125, windoff 0.91125, spv 0.95;GLO.(2025 116,2030 196,2035 277,2040 357,2045 438,2050 518,2055 598,2060 679,2070 839,2080 1000,2090 1161,2100 1321,2110 1321,2130 1321,2150 1321);;;;; -xx_DIAG-C400-lin-HighElec-Supply;0,DIAG;;;;./config/regionmapping_21_EU11.csv;./config/extramapping_EU27.csv;rcp26;;globallyOptimal;0;NPi;;;;9;;;;;;;;;;;;NDC;regiCarbonPrice;(2035,2040,2045,2050).EU27_regi.tax.t.PE.biomass 0.237825, 2050.EUR_regi.sub.t.SE.electricity 0.913;;on;on;EUR_regi, NEU_regi;;;;;;;;;;;;;;;;heat;Mix4;2025;xx_DIAG-C400-lin;xx_DIAG-C400-lin;xx_DIAG-NPI;;;on;;;;;;;GLO.(2025 116,2030 196,2035 277,2040 357,2045 438,2050 518,2055 598,2060 679,2070 839,2080 1000,2090 1161,2100 1321,2110 1321,2130 1321,2150 1321);;;;; -xx_DIAG-C400-lin-HighH2;0,DIAG;;;;./config/regionmapping_21_EU11.csv;./config/extramapping_EU27.csv;rcp26;;globallyOptimal;0;NPi;;;;9;;;;;;;;;;;;NDC;regiCarbonPrice;(2035,2040,2045,2050).EU27_regi.tax.t.PE.biomass 0.237825;;on;on;EUR_regi, NEU_regi;;;;;;;;;;;;;;;;heat;Mix4;2025;xx_DIAG-C400-lin;xx_DIAG-C400-lin;xx_DIAG-NPI;;;on;H2Price;;;;;;GLO.(2025 116,2030 196,2035 277,2040 357,2045 438,2050 518,2055 598,2060 679,2070 839,2080 1000,2090 1161,2100 1321,2110 1321,2130 1321,2150 1321);;;;; -xx_DIAG-C400-lin-ResidualFossil;0,DIAG;;;;./config/regionmapping_21_EU11.csv;./config/extramapping_EU27.csv;rcp26;;globallyOptimal;0;NPi;;;;9;;;;;;;;;;;;NDC;regiCarbonPrice;(2035,2040,2045,2050).EU27_regi.tax.t.PE.biomass 0.237825;;on;on;EUR_regi, NEU_regi;;;;;;;;;;;;;;;;heat;Mix4;2025;xx_DIAG-C400-lin;xx_DIAG-C400-lin;xx_DIAG-NPI;;;on;;highFossilPrice;;;;;GLO.(2025 116,2030 196,2035 277,2040 357,2045 438,2050 518,2055 598,2060 679,2070 839,2080 1000,2090 1161,2100 1321,2110 1321,2130 1321,2150 1321);;;;; -xx_DIAG-C400-lin-HighEff;0,DIAG;;;;./config/regionmapping_21_EU11.csv;./config/extramapping_EU27.csv;rcp26;;globallyOptimal;0;NPi;;;;9;;;;;;;;;;;;NDC;regiCarbonPrice;(2035,2040,2045,2050).EU27_regi.tax.t.PE.biomass 0.237825;;on;on;EUR_regi, NEU_regi;;;;;;;;;;;;;;;;heat;Mix4;2025;xx_DIAG-C400-lin;xx_DIAG-C400-lin;xx_DIAG-NPI;;;on;;;;;;;GLO.(2025 116,2030 196,2035 277,2040 357,2045 438,2050 518,2055 598,2060 679,2070 839,2080 1000,2090 1161,2100 1321,2110 1321,2130 1321,2150 1321);;;;; +xx_DIAG-C400-lin-HighVRE;0,DIAG;;;;./config/regionmapping_21_EU11.csv;./config/extramapping_EU27.csv;rcp26;;globallyOptimal;0;NPi;;;;9;;;;;;;;;;;;NDC;regiCarbonPrice;(2035,2040,2045,2050).EU27_regi.tax.t.PE.biomass 0.237825;;on;on;EUR_regi, NEU_regi;;;;;;;;;;;;;;;;heat;Mix4;2025;xx_DIAG-C400-lin;xx_DIAG-NPI;xx_DIAG-NPI;;;on;;;2050.EUR_regi 0.7;;wind 2300, windoff 4700, spv 5060;wind 0.9, windoff 0.9, spv 0.9;GLO.(2025 116,2030 196,2035 277,2040 357,2045 438,2050 518,2055 598,2060 679,2070 839,2080 1000,2090 1161,2100 1321,2110 1321,2130 1321,2150 1321);;;;; +xx_DIAG-C400-lin-HighElectrification;0,DIAG;;;;./config/regionmapping_21_EU11.csv;./config/extramapping_EU27.csv;rcp26;;globallyOptimal;0;NPi;;;;9;;;;;;;;;;;;NDC;regiCarbonPrice;(2035,2040,2045,2050).EU27_regi.tax.t.PE.biomass 0.237825;;on;on;EUR_regi, NEU_regi;;;;;;;;;;;;;;;;heat;Mix4;2025;xx_DIAG-C400-lin;xx_DIAG-NPI;xx_DIAG-NPI;;;on;elecPrice;;;;;wind 0.820125, windoff 0.91125, spv 0.95;GLO.(2025 116,2030 196,2035 277,2040 357,2045 438,2050 518,2055 598,2060 679,2070 839,2080 1000,2090 1161,2100 1321,2110 1321,2130 1321,2150 1321);;;;; +xx_DIAG-C400-lin-HighElec-Supply;0,DIAG;;;;./config/regionmapping_21_EU11.csv;./config/extramapping_EU27.csv;rcp26;;globallyOptimal;0;NPi;;;;9;;;;;;;;;;;;NDC;regiCarbonPrice;(2035,2040,2045,2050).EU27_regi.tax.t.PE.biomass 0.237825, 2050.EUR_regi.sub.t.SE.electricity 0.913;;on;on;EUR_regi, NEU_regi;;;;;;;;;;;;;;;;heat;Mix4;2025;xx_DIAG-C400-lin;xx_DIAG-NPI;xx_DIAG-NPI;;;on;;;;;;;GLO.(2025 116,2030 196,2035 277,2040 357,2045 438,2050 518,2055 598,2060 679,2070 839,2080 1000,2090 1161,2100 1321,2110 1321,2130 1321,2150 1321);;;;; +xx_DIAG-C400-lin-HighH2;0,DIAG;;;;./config/regionmapping_21_EU11.csv;./config/extramapping_EU27.csv;rcp26;;globallyOptimal;0;NPi;;;;9;;;;;;;;;;;;NDC;regiCarbonPrice;(2035,2040,2045,2050).EU27_regi.tax.t.PE.biomass 0.237825;;on;on;EUR_regi, NEU_regi;;;;;;;;;;;;;;;;heat;Mix4;2025;xx_DIAG-C400-lin;xx_DIAG-NPI;xx_DIAG-NPI;;;on;H2Price;;;;;;GLO.(2025 116,2030 196,2035 277,2040 357,2045 438,2050 518,2055 598,2060 679,2070 839,2080 1000,2090 1161,2100 1321,2110 1321,2130 1321,2150 1321);;;;; +xx_DIAG-C400-lin-ResidualFossil;0,DIAG;;;;./config/regionmapping_21_EU11.csv;./config/extramapping_EU27.csv;rcp26;;globallyOptimal;0;NPi;;;;9;;;;;;;;;;;;NDC;regiCarbonPrice;(2035,2040,2045,2050).EU27_regi.tax.t.PE.biomass 0.237825;;on;on;EUR_regi, NEU_regi;;;;;;;;;;;;;;;;heat;Mix4;2025;xx_DIAG-C400-lin;xx_DIAG-NPI;xx_DIAG-NPI;;;on;;highFossilPrice;;;;;GLO.(2025 116,2030 196,2035 277,2040 357,2045 438,2050 518,2055 598,2060 679,2070 839,2080 1000,2090 1161,2100 1321,2110 1321,2130 1321,2150 1321);;;;; +xx_DIAG-C400-lin-HighEff;0,DIAG;;;;./config/regionmapping_21_EU11.csv;./config/extramapping_EU27.csv;rcp26;;globallyOptimal;0;NPi;;;;9;;;;;;;;;;;;NDC;regiCarbonPrice;(2035,2040,2045,2050).EU27_regi.tax.t.PE.biomass 0.237825;;on;on;EUR_regi, NEU_regi;;;;;;;;;;;;;;;;heat;Mix4;2025;xx_DIAG-C400-lin;xx_DIAG-NPI;xx_DIAG-NPI;;;on;;;;;;;GLO.(2025 116,2030 196,2035 277,2040 357,2045 438,2050 518,2055 598,2060 679,2070 839,2080 1000,2090 1161,2100 1321,2110 1321,2130 1321,2150 1321);;;;; # _____NZero_scenario_____;0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; xx_WP1_Nzero;0,WP1;;;;./config/regionmapping_21_EU11.csv;./config/extramapping_EU27.csv;rcp20;9;globallyOptimal;650;diffCurvPhaseIn2Lin;100;2080;;9;;;;;;;;;;;;NDC;regiCarbonPrice;(2035,2040,2045,2050).EU27_regi.tax.t.PE.biomass 0.237825;2020.2030.EU27_regi.all.year.netGHG_LULUCFGrassi_intraRegBunker 2.122, 2035.2050.EU27_regi.all.year.netGHG_LULUCFGrassi 0.01;on;on;EUR_regi, NEU_regi;;;;;;;;;;;;;;;;heat;Mix4;2025;xx_DIAG-NPI;xx_DIAG-NPI;xx_DIAG-NPI;;same as xx_DIAG-Nzero;;;;;;;;;;;;; # _____NZero_tech_constraint_scenarios_____;0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -xx_WP1_NZero-LimBio;0,WP1;;;;./config/regionmapping_21_EU11.csv;./config/extramapping_EU27.csv;rcp20;9;globallyOptimal;650;diffCurvPhaseIn2Lin;100;2080;;9;;;;;;;;;;;;NDC;regiCarbonPrice;(2035,2040,2045,2050).GLO.tax.t.PE.biomass 3.17, (2035,2040,2045,2050).EUR_regi.tax.t.PE.biomass 0.22;2020.2030.EU27_regi.all.year.netGHG_LULUCFGrassi_intraRegBunker 2.122, 2035.2050.EU27_regi.all.year.netGHG_LULUCFGrassi 0.01;on;on;EUR_regi, NEU_regi;;;;;;;;;;;;;;;;heat;Mix4;2025;xx_WP1_Nzero;xx_WP1_Nzero;xx_DIAG-NPI;;;on;;;;;;;;;;;; -xx_WP1_NZero-LimCCS;0,WP1;;;;./config/regionmapping_21_EU11.csv;./config/extramapping_EU27.csv;rcp20;9;globallyOptimal;650;diffCurvPhaseIn2Lin;100;2080;;9;;;;;;;;;;;;NDC;regiCarbonPrice;(2035,2040,2045,2050).EU27_regi.tax.t.PE.biomass 0.237825, (2035,2040,2045,2050).GLO.tax.t.CCS.all 2000, (2035,2040,2045,2050).EUR_regi.tax.t.CCS.all 250;2020.2030.EU27_regi.all.year.netGHG_LULUCFGrassi_intraRegBunker 2.122, 2035.2050.EU27_regi.all.year.netGHG_LULUCFGrassi 0.01;on;on;EUR_regi, NEU_regi;;;;;;;;;;;;;;;;heat;Mix4;2025;xx_WP1_Nzero;xx_WP1_Nzero;xx_DIAG-NPI;;;on;;;;;;;;;;;; -xx_WP1_NZero-LimNuclear;0,WP1;;;;./config/regionmapping_21_EU11.csv;./config/extramapping_EU27.csv;rcp20;9;globallyOptimal;650;diffCurvPhaseIn2Lin;100;2080;;9;;;;;;;;;;;;NDC;regiCarbonPrice;(2035,2040,2045,2050).EU27_regi.tax.t.PE.biomass 0.237825;2020.2030.EU27_regi.all.year.netGHG_LULUCFGrassi_intraRegBunker 2.122, 2035.2050.EU27_regi.all.year.netGHG_LULUCFGrassi 0.01;on;on;EUR_regi, NEU_regi;;;;;;;;5;;;;;;;;heat;Mix4;2025;xx_WP1_Nzero;xx_WP1_Nzero;xx_DIAG-NPI;;;on;;;;ENC,EWN,ECS,ESC,ECE,FRA,DEU,UKI,ESW;;;;;;;; +xx_WP1_NZero-LimBio;0,WP1;;;;./config/regionmapping_21_EU11.csv;./config/extramapping_EU27.csv;rcp20;9;globallyOptimal;650;diffCurvPhaseIn2Lin;100;2080;;9;;;;;;;;;;;;NDC;regiCarbonPrice;(2035,2040,2045,2050).GLO.tax.t.PE.biomass 3.17, (2035,2040,2045,2050).EUR_regi.tax.t.PE.biomass 0.22;2020.2030.EU27_regi.all.year.netGHG_LULUCFGrassi_intraRegBunker 2.122, 2035.2050.EU27_regi.all.year.netGHG_LULUCFGrassi 0.01;on;on;EUR_regi, NEU_regi;;;;;;;;;;;;;;;;heat;Mix4;2025;xx_WP1_Nzero;xx_DIAG-NPI;xx_DIAG-NPI;;;on;;;;;;;;;;;; +xx_WP1_NZero-LimCCS;0,WP1;;;;./config/regionmapping_21_EU11.csv;./config/extramapping_EU27.csv;rcp20;9;globallyOptimal;650;diffCurvPhaseIn2Lin;100;2080;;9;;;;;;;;;;;;NDC;regiCarbonPrice;(2035,2040,2045,2050).EU27_regi.tax.t.PE.biomass 0.237825, (2035,2040,2045,2050).GLO.tax.t.CCS.all 2000, (2035,2040,2045,2050).EUR_regi.tax.t.CCS.all 250;2020.2030.EU27_regi.all.year.netGHG_LULUCFGrassi_intraRegBunker 2.122, 2035.2050.EU27_regi.all.year.netGHG_LULUCFGrassi 0.01;on;on;EUR_regi, NEU_regi;;;;;;;;;;;;;;;;heat;Mix4;2025;xx_WP1_Nzero;xx_DIAG-NPI;xx_DIAG-NPI;;;on;;;;;;;;;;;; +xx_WP1_NZero-LimNuclear;0,WP1;;;;./config/regionmapping_21_EU11.csv;./config/extramapping_EU27.csv;rcp20;9;globallyOptimal;650;diffCurvPhaseIn2Lin;100;2080;;9;;;;;;;;;;;;NDC;regiCarbonPrice;(2035,2040,2045,2050).EU27_regi.tax.t.PE.biomass 0.237825;2020.2030.EU27_regi.all.year.netGHG_LULUCFGrassi_intraRegBunker 2.122, 2035.2050.EU27_regi.all.year.netGHG_LULUCFGrassi 0.01;on;on;EUR_regi, NEU_regi;;;;;;;;5;;;;;;;;heat;Mix4;2025;xx_WP1_Nzero;xx_DIAG-NPI;xx_DIAG-NPI;;;on;;;;ENC,EWN,ECS,ESC,ECE,FRA,DEU,UKI,ESW;;;;;;;; # _____WP5p3_____;0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; xx_WP5_Base;0,WP5p3;;;;./config/regionmapping_21_EU11.csv;./config/extramapping_EU27.csv;rcp45;3;;0;NPi;;;;9;;;;;;;;;;;;NPi2018;regiCarbonPrice;;;on;on;EUR_regi, NEU_regi;;;;;;;;;;3;;;;;;heat;Mix1;2005;;;;;same as xx_DIAG-NPI;;;;;;;;;;;1;; -xx_WP5_OPT-CP;0,WP5p3;;;;./config/regionmapping_21_EU11.csv;./config/extramapping_EU27.csv;rcp20;9;globallyOptimal;650;diffCurvPhaseIn2Lin;100;2080;;9;;;;;;;;;;;;NPi2018;regiCarbonPrice;(2035,2040,2045,2050).EU27_regi.tax.t.PE.biomass 0.237825;2020.2030.EU27_regi.all.year.netGHG_LULUCFGrassi_intraRegBunker 2.122, 2035.2040.EU27_regi.all.year.netGHG_LULUCFGrassi_intraRegBunker 0.691, 2045.2050.EU27_regi.all.year.netGHG_LULUCFGrassi 0.01;on;on;EUR_regi, NEU_regi;;;;;;;;;;;;;;;;heat;Mix3;2025;xx_WP1_Nzero;xx_WP1_Nzero;xx_DIAG-NPI;;;;;;;;;;;;;;; -xx_WP5_OPT-CP-LimBio;0,WP5p3;;;;./config/regionmapping_21_EU11.csv;./config/extramapping_EU27.csv;rcp20;9;globallyOptimal;650;diffCurvPhaseIn2Lin;100;2080;;9;;;;;;;;;;;;NPi2018;regiCarbonPrice;(2035,2040,2045,2050).GLO.tax.t.PE.biomass 3.17, (2035,2040,2045,2050).EUR_regi.tax.t.PE.biomass 0.22;2020.2030.EU27_regi.all.year.netGHG_LULUCFGrassi_intraRegBunker 2.122, 2035.2040.EU27_regi.all.year.netGHG_LULUCFGrassi_intraRegBunker 0.691, 2045.2050.EU27_regi.all.year.netGHG_LULUCFGrassi 0.01;on;on;EUR_regi, NEU_regi;;;;;;;;;;;;;;;;heat;Mix3;2025;xx_WP5_OPT-CP;xx_WP5_OPT-CP;xx_DIAG-NPI;;;on;;;;;;;;;;;; -xx_WP5_OPT-CP-LimCCS;0,WP5p3;;;;./config/regionmapping_21_EU11.csv;./config/extramapping_EU27.csv;rcp20;9;globallyOptimal;650;diffCurvPhaseIn2Lin;100;2080;;9;;;;;;;;;;;;NPi2018;regiCarbonPrice;(2035,2040,2045,2050).EU27_regi.tax.t.PE.biomass 0.237825, (2035,2040,2045,2050).GLO.tax.t.CCS.all 3000, (2035,2040,2045,2050).EUR_regi.tax.t.CCS.all 250;2020.2030.EU27_regi.all.year.netGHG_LULUCFGrassi_intraRegBunker 2.122, 2035.2040.EU27_regi.all.year.netGHG_LULUCFGrassi_intraRegBunker 0.691, 2045.2050.EU27_regi.all.year.netGHG_LULUCFGrassi 0.01;on;on;EUR_regi, NEU_regi;;;;;;;;;;;;;;;;heat;Mix3;2025;xx_WP5_OPT-CP;xx_WP5_OPT-CP;xx_DIAG-NPI;;;on;;;;;;;;;;;; -xx_WP5_OPT-CP-LimNuclear;0,WP5p3;;;;./config/regionmapping_21_EU11.csv;./config/extramapping_EU27.csv;rcp20;9;globallyOptimal;650;diffCurvPhaseIn2Lin;100;2080;;9;;;;;;;;;;;;NPi2018;regiCarbonPrice;(2035,2040,2045,2050).EU27_regi.tax.t.PE.biomass 0.237825;2020.2030.EU27_regi.all.year.netGHG_LULUCFGrassi_intraRegBunker 2.122, 2035.2040.EU27_regi.all.year.netGHG_LULUCFGrassi_intraRegBunker 0.691, 2045.2050.EU27_regi.all.year.netGHG_LULUCFGrassi 0.01;on;on;EUR_regi, NEU_regi;;;;;;;;5;;;;;;;;heat;Mix3;2025;xx_WP5_OPT-CP;xx_WP5_OPT-CP;xx_DIAG-NPI;;;on;;;;ENC,EWN,ECS,ESC,ECE,FRA,DEU,UKI,ESW;;;;;;;; +xx_WP5_OPT-CP;0,WP5p3;;;;./config/regionmapping_21_EU11.csv;./config/extramapping_EU27.csv;rcp20;9;globallyOptimal;650;diffCurvPhaseIn2Lin;100;2080;;9;;;;;;;;;;;;NPi2018;regiCarbonPrice;(2035,2040,2045,2050).EU27_regi.tax.t.PE.biomass 0.237825;2020.2030.EU27_regi.all.year.netGHG_LULUCFGrassi_intraRegBunker 2.122, 2035.2040.EU27_regi.all.year.netGHG_LULUCFGrassi_intraRegBunker 0.691, 2045.2050.EU27_regi.all.year.netGHG_LULUCFGrassi 0.01;on;on;EUR_regi, NEU_regi;;;;;;;;;;;;;;;;heat;Mix3;2025;xx_WP1_Nzero;xx_DIAG-NPI;xx_DIAG-NPI;;;;;;;;;;;;;;; +xx_WP5_OPT-CP-LimBio;0,WP5p3;;;;./config/regionmapping_21_EU11.csv;./config/extramapping_EU27.csv;rcp20;9;globallyOptimal;650;diffCurvPhaseIn2Lin;100;2080;;9;;;;;;;;;;;;NPi2018;regiCarbonPrice;(2035,2040,2045,2050).GLO.tax.t.PE.biomass 3.17, (2035,2040,2045,2050).EUR_regi.tax.t.PE.biomass 0.22;2020.2030.EU27_regi.all.year.netGHG_LULUCFGrassi_intraRegBunker 2.122, 2035.2040.EU27_regi.all.year.netGHG_LULUCFGrassi_intraRegBunker 0.691, 2045.2050.EU27_regi.all.year.netGHG_LULUCFGrassi 0.01;on;on;EUR_regi, NEU_regi;;;;;;;;;;;;;;;;heat;Mix3;2025;xx_WP5_OPT-CP;xx_DIAG-NPI;xx_DIAG-NPI;;;on;;;;;;;;;;;; +xx_WP5_OPT-CP-LimCCS;0,WP5p3;;;;./config/regionmapping_21_EU11.csv;./config/extramapping_EU27.csv;rcp20;9;globallyOptimal;650;diffCurvPhaseIn2Lin;100;2080;;9;;;;;;;;;;;;NPi2018;regiCarbonPrice;(2035,2040,2045,2050).EU27_regi.tax.t.PE.biomass 0.237825, (2035,2040,2045,2050).GLO.tax.t.CCS.all 3000, (2035,2040,2045,2050).EUR_regi.tax.t.CCS.all 250;2020.2030.EU27_regi.all.year.netGHG_LULUCFGrassi_intraRegBunker 2.122, 2035.2040.EU27_regi.all.year.netGHG_LULUCFGrassi_intraRegBunker 0.691, 2045.2050.EU27_regi.all.year.netGHG_LULUCFGrassi 0.01;on;on;EUR_regi, NEU_regi;;;;;;;;;;;;;;;;heat;Mix3;2025;xx_WP5_OPT-CP;xx_DIAG-NPI;xx_DIAG-NPI;;;on;;;;;;;;;;;; +xx_WP5_OPT-CP-LimNuclear;0,WP5p3;;;;./config/regionmapping_21_EU11.csv;./config/extramapping_EU27.csv;rcp20;9;globallyOptimal;650;diffCurvPhaseIn2Lin;100;2080;;9;;;;;;;;;;;;NPi2018;regiCarbonPrice;(2035,2040,2045,2050).EU27_regi.tax.t.PE.biomass 0.237825;2020.2030.EU27_regi.all.year.netGHG_LULUCFGrassi_intraRegBunker 2.122, 2035.2040.EU27_regi.all.year.netGHG_LULUCFGrassi_intraRegBunker 0.691, 2045.2050.EU27_regi.all.year.netGHG_LULUCFGrassi 0.01;on;on;EUR_regi, NEU_regi;;;;;;;;5;;;;;;;;heat;Mix3;2025;xx_WP5_OPT-CP;xx_DIAG-NPI;xx_DIAG-NPI;;;on;;;;ENC,EWN,ECS,ESC,ECE,FRA,DEU,UKI,ESW;;;;;;;; # xx_WP5_OPT-CP-LimRES;0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -xx_WP5_OPT-REG;0,WP5p3;;;;./config/regionmapping_21_EU11.csv;./config/extramapping_EU27.csv;rcp20;9;globallyOptimal;650;diffCurvPhaseIn2Lin;100;2080;;9;;;;;;;;;;;;NDC;regiCarbonPrice;2030.EU27_regi.tax.t.FE_wo_n_e.all 1.1235, (2035,2040,2045,2050).EU27_regi.tax.t.PE.biomass 0.237825;2020.2030.EU27_regi.all.year.netGHG_LULUCFGrassi_intraRegBunker 2.122, 2035.2040.EU27_regi.all.year.netGHG_LULUCFGrassi_intraRegBunker 0.691, 2045.2050.EU27_regi.all.year.netGHG_LULUCFGrassi 0.01;on;on;EUR_regi, NEU_regi;;;;;;;;;;;;;;;;heat;Mix4;2025;xx_WP1_Nzero;xx_WP1_Nzero;xx_DIAG-NPI;;;;;;;;;;;;;;; -xx_WP5_OPT-REG-LimBio;0,WP5p3;;;;./config/regionmapping_21_EU11.csv;./config/extramapping_EU27.csv;rcp20;9;globallyOptimal;650;diffCurvPhaseIn2Lin;100;2080;;9;;;;;;;;;;;;NDC;regiCarbonPrice;2030.EU27_regi.tax.t.FE_wo_n_e.all 1.1235, (2035,2040,2045,2050).GLO.tax.t.PE.biomass 3.17, (2035,2040,2045,2050).EUR_regi.tax.t.PE.biomass 0.22;2020.2030.EU27_regi.all.year.netGHG_LULUCFGrassi_intraRegBunker 2.122, 2035.2040.EU27_regi.all.year.netGHG_LULUCFGrassi_intraRegBunker 0.691, 2045.2050.EU27_regi.all.year.netGHG_LULUCFGrassi 0.01;on;on;EUR_regi, NEU_regi;;;;;;;;;;;;;;;;heat;Mix4;2025;xx_WP5_OPT-REG;xx_WP5_OPT-REG;xx_DIAG-NPI;;;on;;;;;;;;;;;; -xx_WP5_OPT-REG-LimCCS;0,WP5p3;;;;./config/regionmapping_21_EU11.csv;./config/extramapping_EU27.csv;rcp20;9;globallyOptimal;650;diffCurvPhaseIn2Lin;100;2080;;9;;;;;;;;;;;;NDC;regiCarbonPrice;2030.EU27_regi.tax.t.FE_wo_n_e.all 1.1235, (2035,2040,2045,2050).EU27_regi.tax.t.PE.biomass 0.237825, (2035,2040,2045,2050).GLO.tax.t.CCS.all 3000, (2035,2040,2045,2050).EUR_regi.tax.t.CCS.all 250;2020.2030.EU27_regi.all.year.netGHG_LULUCFGrassi_intraRegBunker 2.122, 2035.2040.EU27_regi.all.year.netGHG_LULUCFGrassi_intraRegBunker 0.691, 2045.2050.EU27_regi.all.year.netGHG_LULUCFGrassi 0.01;on;on;EUR_regi, NEU_regi;;;;;;;;;;;;;;;;heat;Mix4;2025;xx_WP5_OPT-REG;xx_WP5_OPT-REG;xx_DIAG-NPI;;;on;;;;;;;;;;;; -xx_WP5_OPT-REG-LimNuclear;0,WP5p3;;;;./config/regionmapping_21_EU11.csv;./config/extramapping_EU27.csv;rcp20;9;globallyOptimal;650;diffCurvPhaseIn2Lin;100;2080;;9;;;;;;;;;;;;NDC;regiCarbonPrice;2030.EU27_regi.tax.t.FE_wo_n_e.all 1.1235, (2035,2040,2045,2050).EU27_regi.tax.t.PE.biomass 0.237825;2020.2030.EU27_regi.all.year.netGHG_LULUCFGrassi_intraRegBunker 2.122, 2035.2040.EU27_regi.all.year.netGHG_LULUCFGrassi_intraRegBunker 0.691, 2045.2050.EU27_regi.all.year.netGHG_LULUCFGrassi 0.01;on;on;EUR_regi, NEU_regi;;;;;;;;5;;;;;;;;heat;Mix4;2025;xx_WP5_OPT-REG;xx_WP5_OPT-REG;xx_DIAG-NPI;;;on;;;;ENC,EWN,ECS,ESC,ECE,FRA,DEU,UKI,ESW;;;;;;;; +xx_WP5_OPT-REG;0,WP5p3;;;;./config/regionmapping_21_EU11.csv;./config/extramapping_EU27.csv;rcp20;9;globallyOptimal;650;diffCurvPhaseIn2Lin;100;2080;;9;;;;;;;;;;;;NDC;regiCarbonPrice;2030.EU27_regi.tax.t.FE_wo_n_e.all 1.1235, (2035,2040,2045,2050).EU27_regi.tax.t.PE.biomass 0.237825;2020.2030.EU27_regi.all.year.netGHG_LULUCFGrassi_intraRegBunker 2.122, 2035.2040.EU27_regi.all.year.netGHG_LULUCFGrassi_intraRegBunker 0.691, 2045.2050.EU27_regi.all.year.netGHG_LULUCFGrassi 0.01;on;on;EUR_regi, NEU_regi;;;;;;;;;;;;;;;;heat;Mix4;2025;xx_WP1_Nzero;xx_DIAG-NPI;xx_DIAG-NPI;;;;;;;;;;;;;;; +xx_WP5_OPT-REG-LimBio;0,WP5p3;;;;./config/regionmapping_21_EU11.csv;./config/extramapping_EU27.csv;rcp20;9;globallyOptimal;650;diffCurvPhaseIn2Lin;100;2080;;9;;;;;;;;;;;;NDC;regiCarbonPrice;2030.EU27_regi.tax.t.FE_wo_n_e.all 1.1235, (2035,2040,2045,2050).GLO.tax.t.PE.biomass 3.17, (2035,2040,2045,2050).EUR_regi.tax.t.PE.biomass 0.22;2020.2030.EU27_regi.all.year.netGHG_LULUCFGrassi_intraRegBunker 2.122, 2035.2040.EU27_regi.all.year.netGHG_LULUCFGrassi_intraRegBunker 0.691, 2045.2050.EU27_regi.all.year.netGHG_LULUCFGrassi 0.01;on;on;EUR_regi, NEU_regi;;;;;;;;;;;;;;;;heat;Mix4;2025;xx_WP5_OPT-REG;xx_DIAG-NPI;xx_DIAG-NPI;;;on;;;;;;;;;;;; +xx_WP5_OPT-REG-LimCCS;0,WP5p3;;;;./config/regionmapping_21_EU11.csv;./config/extramapping_EU27.csv;rcp20;9;globallyOptimal;650;diffCurvPhaseIn2Lin;100;2080;;9;;;;;;;;;;;;NDC;regiCarbonPrice;2030.EU27_regi.tax.t.FE_wo_n_e.all 1.1235, (2035,2040,2045,2050).EU27_regi.tax.t.PE.biomass 0.237825, (2035,2040,2045,2050).GLO.tax.t.CCS.all 3000, (2035,2040,2045,2050).EUR_regi.tax.t.CCS.all 250;2020.2030.EU27_regi.all.year.netGHG_LULUCFGrassi_intraRegBunker 2.122, 2035.2040.EU27_regi.all.year.netGHG_LULUCFGrassi_intraRegBunker 0.691, 2045.2050.EU27_regi.all.year.netGHG_LULUCFGrassi 0.01;on;on;EUR_regi, NEU_regi;;;;;;;;;;;;;;;;heat;Mix4;2025;xx_WP5_OPT-REG;xx_DIAG-NPI;xx_DIAG-NPI;;;on;;;;;;;;;;;; +xx_WP5_OPT-REG-LimNuclear;0,WP5p3;;;;./config/regionmapping_21_EU11.csv;./config/extramapping_EU27.csv;rcp20;9;globallyOptimal;650;diffCurvPhaseIn2Lin;100;2080;;9;;;;;;;;;;;;NDC;regiCarbonPrice;2030.EU27_regi.tax.t.FE_wo_n_e.all 1.1235, (2035,2040,2045,2050).EU27_regi.tax.t.PE.biomass 0.237825;2020.2030.EU27_regi.all.year.netGHG_LULUCFGrassi_intraRegBunker 2.122, 2035.2040.EU27_regi.all.year.netGHG_LULUCFGrassi_intraRegBunker 0.691, 2045.2050.EU27_regi.all.year.netGHG_LULUCFGrassi 0.01;on;on;EUR_regi, NEU_regi;;;;;;;;5;;;;;;;;heat;Mix4;2025;xx_WP5_OPT-REG;xx_DIAG-NPI;xx_DIAG-NPI;;;on;;;;ENC,EWN,ECS,ESC,ECE,FRA,DEU,UKI,ESW;;;;;;;; # xx_WP5_OPT-REG-LimRES;0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -xx_WP5_RAP-CP;0,WP5p3;;;;./config/regionmapping_21_EU11.csv;./config/extramapping_EU27.csv;rcp20;9;globallyOptimal;650;diffCurvPhaseIn2Lin;100;2080;;9;;;;;;;;;;;;NPi2018;regiCarbonPrice;(2035,2040,2045,2050).EU27_regi.tax.t.PE.biomass 0.237825;2020.2030.EU27_regi.all.year.netGHG_LULUCFGrassi_intraRegBunker 2.122, 2035.2040.EU27_regi.all.year.netGHG_LULUCFGrassi_intraRegBunker 0.321, 2045.2050.EU27_regi.all.year.netGHG_LULUCFGrassi 0.01;on;on;EUR_regi, NEU_regi;;;;;;;;;;;;;;;;heat;Mix3;2025;xx_WP1_Nzero;xx_WP1_Nzero;xx_DIAG-NPI;;;;;;;;;;;;;;; -xx_WP5_RAP-CP-LimBio;0,WP5p3;;;;./config/regionmapping_21_EU11.csv;./config/extramapping_EU27.csv;rcp20;9;globallyOptimal;650;diffCurvPhaseIn2Lin;100;2080;;9;;;;;;;;;;;;NPi2018;regiCarbonPrice;(2035,2040,2045,2050).GLO.tax.t.PE.biomass 3.17, (2035,2040,2045,2050).EUR_regi.tax.t.PE.biomass 0.22;2020.2030.EU27_regi.all.year.netGHG_LULUCFGrassi_intraRegBunker 2.122, 2035.2040.EU27_regi.all.year.netGHG_LULUCFGrassi_intraRegBunker 0.321, 2045.2050.EU27_regi.all.year.netGHG_LULUCFGrassi 0.01;on;on;EUR_regi, NEU_regi;;;;;;;;;;;;;;;;heat;Mix3;2025;xx_WP5_RAP-CP;xx_WP5_RAP-CP;xx_DIAG-NPI;;;on;;;;;;;;;;;; -xx_WP5_RAP-CP-LimCCS;0,WP5p3;;;;./config/regionmapping_21_EU11.csv;./config/extramapping_EU27.csv;rcp20;9;globallyOptimal;650;diffCurvPhaseIn2Lin;100;2080;;9;;;;;;;;;;;;NPi2018;regiCarbonPrice;(2035,2040,2045,2050).EU27_regi.tax.t.PE.biomass 0.237825, (2035,2040,2045,2050).GLO.tax.t.CCS.all 3000, (2035,2040,2045,2050).EUR_regi.tax.t.CCS.all 250;2020.2030.EU27_regi.all.year.netGHG_LULUCFGrassi_intraRegBunker 2.122, 2035.2040.EU27_regi.all.year.netGHG_LULUCFGrassi_intraRegBunker 0.321, 2045.2050.EU27_regi.all.year.netGHG_LULUCFGrassi 0.01;on;on;EUR_regi, NEU_regi;;;;;;;;;;;;;;;;heat;Mix3;2025;xx_WP5_RAP-CP;xx_WP5_RAP-CP;xx_DIAG-NPI;;;on;;;;;;;;;;;; -xx_WP5_RAP-CP-LimNuclear;0,WP5p3;;;;./config/regionmapping_21_EU11.csv;./config/extramapping_EU27.csv;rcp20;9;globallyOptimal;650;diffCurvPhaseIn2Lin;100;2080;;9;;;;;;;;;;;;NPi2018;regiCarbonPrice;(2035,2040,2045,2050).EU27_regi.tax.t.PE.biomass 0.237825;2020.2030.EU27_regi.all.year.netGHG_LULUCFGrassi_intraRegBunker 2.122, 2035.2040.EU27_regi.all.year.netGHG_LULUCFGrassi_intraRegBunker 0.321, 2045.2050.EU27_regi.all.year.netGHG_LULUCFGrassi 0.01;on;on;EUR_regi, NEU_regi;;;;;;;;5;;;;;;;;heat;Mix3;2025;xx_WP5_RAP-CP;xx_WP5_RAP-CP;xx_DIAG-NPI;;;on;;;;ENC,EWN,ECS,ESC,ECE,FRA,DEU,UKI,ESW;;;;;;;; +xx_WP5_RAP-CP;0,WP5p3;;;;./config/regionmapping_21_EU11.csv;./config/extramapping_EU27.csv;rcp20;9;globallyOptimal;650;diffCurvPhaseIn2Lin;100;2080;;9;;;;;;;;;;;;NPi2018;regiCarbonPrice;(2035,2040,2045,2050).EU27_regi.tax.t.PE.biomass 0.237825;2020.2030.EU27_regi.all.year.netGHG_LULUCFGrassi_intraRegBunker 2.122, 2035.2040.EU27_regi.all.year.netGHG_LULUCFGrassi_intraRegBunker 0.321, 2045.2050.EU27_regi.all.year.netGHG_LULUCFGrassi 0.01;on;on;EUR_regi, NEU_regi;;;;;;;;;;;;;;;;heat;Mix3;2025;xx_WP1_Nzero;xx_DIAG-NPI;xx_DIAG-NPI;;;;;;;;;;;;;;; +xx_WP5_RAP-CP-LimBio;0,WP5p3;;;;./config/regionmapping_21_EU11.csv;./config/extramapping_EU27.csv;rcp20;9;globallyOptimal;650;diffCurvPhaseIn2Lin;100;2080;;9;;;;;;;;;;;;NPi2018;regiCarbonPrice;(2035,2040,2045,2050).GLO.tax.t.PE.biomass 3.17, (2035,2040,2045,2050).EUR_regi.tax.t.PE.biomass 0.22;2020.2030.EU27_regi.all.year.netGHG_LULUCFGrassi_intraRegBunker 2.122, 2035.2040.EU27_regi.all.year.netGHG_LULUCFGrassi_intraRegBunker 0.321, 2045.2050.EU27_regi.all.year.netGHG_LULUCFGrassi 0.01;on;on;EUR_regi, NEU_regi;;;;;;;;;;;;;;;;heat;Mix3;2025;xx_WP5_RAP-CP;xx_DIAG-NPI;xx_DIAG-NPI;;;on;;;;;;;;;;;; +xx_WP5_RAP-CP-LimCCS;0,WP5p3;;;;./config/regionmapping_21_EU11.csv;./config/extramapping_EU27.csv;rcp20;9;globallyOptimal;650;diffCurvPhaseIn2Lin;100;2080;;9;;;;;;;;;;;;NPi2018;regiCarbonPrice;(2035,2040,2045,2050).EU27_regi.tax.t.PE.biomass 0.237825, (2035,2040,2045,2050).GLO.tax.t.CCS.all 3000, (2035,2040,2045,2050).EUR_regi.tax.t.CCS.all 250;2020.2030.EU27_regi.all.year.netGHG_LULUCFGrassi_intraRegBunker 2.122, 2035.2040.EU27_regi.all.year.netGHG_LULUCFGrassi_intraRegBunker 0.321, 2045.2050.EU27_regi.all.year.netGHG_LULUCFGrassi 0.01;on;on;EUR_regi, NEU_regi;;;;;;;;;;;;;;;;heat;Mix3;2025;xx_WP5_RAP-CP;xx_DIAG-NPI;xx_DIAG-NPI;;;on;;;;;;;;;;;; +xx_WP5_RAP-CP-LimNuclear;0,WP5p3;;;;./config/regionmapping_21_EU11.csv;./config/extramapping_EU27.csv;rcp20;9;globallyOptimal;650;diffCurvPhaseIn2Lin;100;2080;;9;;;;;;;;;;;;NPi2018;regiCarbonPrice;(2035,2040,2045,2050).EU27_regi.tax.t.PE.biomass 0.237825;2020.2030.EU27_regi.all.year.netGHG_LULUCFGrassi_intraRegBunker 2.122, 2035.2040.EU27_regi.all.year.netGHG_LULUCFGrassi_intraRegBunker 0.321, 2045.2050.EU27_regi.all.year.netGHG_LULUCFGrassi 0.01;on;on;EUR_regi, NEU_regi;;;;;;;;5;;;;;;;;heat;Mix3;2025;xx_WP5_RAP-CP;xx_DIAG-NPI;xx_DIAG-NPI;;;on;;;;ENC,EWN,ECS,ESC,ECE,FRA,DEU,UKI,ESW;;;;;;;; # xx_WP5_RAP-CP-LimRES;0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -xx_WP5_RAP-REG;0,WP5p3;;;;./config/regionmapping_21_EU11.csv;./config/extramapping_EU27.csv;rcp20;9;globallyOptimal;650;diffCurvPhaseIn2Lin;100;2080;;9;;;;;;;;;;;;NDC;regiCarbonPrice;2030.EU27_regi.tax.t.FE_wo_n_e.all 1.1235, (2035,2040,2045,2050).EU27_regi.tax.t.PE.biomass 0.237825;2020.2030.EU27_regi.all.year.netGHG_LULUCFGrassi_intraRegBunker 2.122, 2035.2040.EU27_regi.all.year.netGHG_LULUCFGrassi_intraRegBunker 0.321, 2045.2050.EU27_regi.all.year.netGHG_LULUCFGrassi 0.01;on;on;EUR_regi, NEU_regi;;;;;;;;;;;;;;;;heat;Mix4;2025;xx_WP1_Nzero;xx_WP1_Nzero;xx_DIAG-NPI;;;;;;;;;;;;;;; -xx_WP5_RAP-REG-LimBio;0,WP5p3;;;;./config/regionmapping_21_EU11.csv;./config/extramapping_EU27.csv;rcp20;9;globallyOptimal;650;diffCurvPhaseIn2Lin;100;2080;;9;;;;;;;;;;;;NDC;regiCarbonPrice;2030.EU27_regi.tax.t.FE_wo_n_e.all 1.1235, (2035,2040,2045,2050).GLO.tax.t.PE.biomass 3.17, (2035,2040,2045,2050).EUR_regi.tax.t.PE.biomass 0.22;2020.2030.EU27_regi.all.year.netGHG_LULUCFGrassi_intraRegBunker 2.122, 2035.2040.EU27_regi.all.year.netGHG_LULUCFGrassi_intraRegBunker 0.321, 2045.2050.EU27_regi.all.year.netGHG_LULUCFGrassi 0.01;on;on;EUR_regi, NEU_regi;;;;;;;;;;;;;;;;heat;Mix4;2025;xx_WP5_RAP-REG;xx_WP5_RAP-REG;xx_DIAG-NPI;;;on;;;;;;;;;;;; -xx_WP5_RAP-REG-LimCCS;0,WP5p3;;;;./config/regionmapping_21_EU11.csv;./config/extramapping_EU27.csv;rcp20;9;globallyOptimal;650;diffCurvPhaseIn2Lin;100;2080;;9;;;;;;;;;;;;NDC;regiCarbonPrice;2030.EU27_regi.tax.t.FE_wo_n_e.all 1.1235, (2035,2040,2045,2050).EU27_regi.tax.t.PE.biomass 0.237825, (2035,2040,2045,2050).GLO.tax.t.CCS.all 3000, (2035,2040,2045,2050).EUR_regi.tax.t.CCS.all 250;2020.2030.EU27_regi.all.year.netGHG_LULUCFGrassi_intraRegBunker 2.122, 2035.2040.EU27_regi.all.year.netGHG_LULUCFGrassi_intraRegBunker 0.321, 2045.2050.EU27_regi.all.year.netGHG_LULUCFGrassi 0.01;on;on;EUR_regi, NEU_regi;;;;;;;;;;;;;;;;heat;Mix4;2025;xx_WP5_RAP-REG;xx_WP5_RAP-REG;xx_DIAG-NPI;;;on;;;;;;;;;;;; -xx_WP5_RAP-REG-LimNuclear;0,WP5p3;;;;./config/regionmapping_21_EU11.csv;./config/extramapping_EU27.csv;rcp20;9;globallyOptimal;650;diffCurvPhaseIn2Lin;100;2080;;9;;;;;;;;;;;;NDC;regiCarbonPrice;2030.EU27_regi.tax.t.FE_wo_n_e.all 1.1235, (2035,2040,2045,2050).EU27_regi.tax.t.PE.biomass 0.237825;2020.2030.EU27_regi.all.year.netGHG_LULUCFGrassi_intraRegBunker 2.122, 2035.2040.EU27_regi.all.year.netGHG_LULUCFGrassi_intraRegBunker 0.321, 2045.2050.EU27_regi.all.year.netGHG_LULUCFGrassi 0.01;on;on;EUR_regi, NEU_regi;;;;;;;;5;;;;;;;;heat;Mix4;2025;xx_WP5_RAP-REG;xx_WP5_RAP-REG;xx_DIAG-NPI;;;on;;;;ENC,EWN,ECS,ESC,ECE,FRA,DEU,UKI,ESW;;;;;;;; +xx_WP5_RAP-REG;0,WP5p3;;;;./config/regionmapping_21_EU11.csv;./config/extramapping_EU27.csv;rcp20;9;globallyOptimal;650;diffCurvPhaseIn2Lin;100;2080;;9;;;;;;;;;;;;NDC;regiCarbonPrice;2030.EU27_regi.tax.t.FE_wo_n_e.all 1.1235, (2035,2040,2045,2050).EU27_regi.tax.t.PE.biomass 0.237825;2020.2030.EU27_regi.all.year.netGHG_LULUCFGrassi_intraRegBunker 2.122, 2035.2040.EU27_regi.all.year.netGHG_LULUCFGrassi_intraRegBunker 0.321, 2045.2050.EU27_regi.all.year.netGHG_LULUCFGrassi 0.01;on;on;EUR_regi, NEU_regi;;;;;;;;;;;;;;;;heat;Mix4;2025;xx_WP1_Nzero;xx_DIAG-NPI;xx_DIAG-NPI;;;;;;;;;;;;;;; +xx_WP5_RAP-REG-LimBio;0,WP5p3;;;;./config/regionmapping_21_EU11.csv;./config/extramapping_EU27.csv;rcp20;9;globallyOptimal;650;diffCurvPhaseIn2Lin;100;2080;;9;;;;;;;;;;;;NDC;regiCarbonPrice;2030.EU27_regi.tax.t.FE_wo_n_e.all 1.1235, (2035,2040,2045,2050).GLO.tax.t.PE.biomass 3.17, (2035,2040,2045,2050).EUR_regi.tax.t.PE.biomass 0.22;2020.2030.EU27_regi.all.year.netGHG_LULUCFGrassi_intraRegBunker 2.122, 2035.2040.EU27_regi.all.year.netGHG_LULUCFGrassi_intraRegBunker 0.321, 2045.2050.EU27_regi.all.year.netGHG_LULUCFGrassi 0.01;on;on;EUR_regi, NEU_regi;;;;;;;;;;;;;;;;heat;Mix4;2025;xx_WP5_RAP-REG;xx_DIAG-NPI;xx_DIAG-NPI;;;on;;;;;;;;;;;; +xx_WP5_RAP-REG-LimCCS;0,WP5p3;;;;./config/regionmapping_21_EU11.csv;./config/extramapping_EU27.csv;rcp20;9;globallyOptimal;650;diffCurvPhaseIn2Lin;100;2080;;9;;;;;;;;;;;;NDC;regiCarbonPrice;2030.EU27_regi.tax.t.FE_wo_n_e.all 1.1235, (2035,2040,2045,2050).EU27_regi.tax.t.PE.biomass 0.237825, (2035,2040,2045,2050).GLO.tax.t.CCS.all 3000, (2035,2040,2045,2050).EUR_regi.tax.t.CCS.all 250;2020.2030.EU27_regi.all.year.netGHG_LULUCFGrassi_intraRegBunker 2.122, 2035.2040.EU27_regi.all.year.netGHG_LULUCFGrassi_intraRegBunker 0.321, 2045.2050.EU27_regi.all.year.netGHG_LULUCFGrassi 0.01;on;on;EUR_regi, NEU_regi;;;;;;;;;;;;;;;;heat;Mix4;2025;xx_WP5_RAP-REG;xx_DIAG-NPI;xx_DIAG-NPI;;;on;;;;;;;;;;;; +xx_WP5_RAP-REG-LimNuclear;0,WP5p3;;;;./config/regionmapping_21_EU11.csv;./config/extramapping_EU27.csv;rcp20;9;globallyOptimal;650;diffCurvPhaseIn2Lin;100;2080;;9;;;;;;;;;;;;NDC;regiCarbonPrice;2030.EU27_regi.tax.t.FE_wo_n_e.all 1.1235, (2035,2040,2045,2050).EU27_regi.tax.t.PE.biomass 0.237825;2020.2030.EU27_regi.all.year.netGHG_LULUCFGrassi_intraRegBunker 2.122, 2035.2040.EU27_regi.all.year.netGHG_LULUCFGrassi_intraRegBunker 0.321, 2045.2050.EU27_regi.all.year.netGHG_LULUCFGrassi 0.01;on;on;EUR_regi, NEU_regi;;;;;;;;5;;;;;;;;heat;Mix4;2025;xx_WP5_RAP-REG;xx_DIAG-NPI;xx_DIAG-NPI;;;on;;;;ENC,EWN,ECS,ESC,ECE,FRA,DEU,UKI,ESW;;;;;;;; # xx_WP5_RAP-REG-LimRES;0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; # _____tests_____;0;;;;;;;;;;;;;;;;;;;;;;;;;;;;35.43046358;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; test_WP1_Nzero_DEU;0,WP1;;testOneRegi;;./config/regionmapping_21_EU11.csv;./config/extramapping_EU27.csv;rcp20;9;globallyOptimal;650;diffCurvPhaseIn2Lin;100;2080;;9;;;;;;;;;;;;NDC;regiCarbonPrice;(2035,2040,2045,2050).EU27_regi.tax.t.PE.biomass 0.237825;2020.2030.EU27_regi.all.year.netGHG_LULUCFGrassi_intraRegBunker 2.122, 2035.2050.EU27_regi.all.year.netGHG_LULUCFGrassi 0.01;on;on;EUR_regi, NEU_regi;;;;;;;;;;;;;;;;heat;Mix4;2025;xx_DIAG-NPI;xx_DIAG-NPI;xx_DIAG-NPI;;same as xx_DIAG-Nzero;;;;;;;;;DEU;debug;1;1; -xx_WP1_Nzero_highPrecision_10tCO2eq;0,test;;;;./config/regionmapping_21_EU11.csv;./config/extramapping_EU27.csv;rcp20;9;globallyOptimal;650;diffCurvPhaseIn2Lin;100;2080;;9;;;;;;;;;;;;NDC;regiCarbonPrice;(2035,2040,2045,2050).EU27_regi.tax.t.PE.biomass 0.237825;2020.2030.EU27_regi.all.year.netGHG_LULUCFGrassi_intraRegBunker 2.122, 2035.2050.EU27_regi.all.year.netGHG_LULUCFGrassi 0.01;on;on;EUR_regi, NEU_regi;;;;;;;;;;;;;;;;heat;Mix4;2025;xx_WP1_Nzero;xx_WP1_Nzero;xx_DIAG-NPI;;same as xx_DIAG-Nzero;;;;;;;;;;;;;0.002 -xx_WP1_Nzero_highPrecision_5tCO2eq;0,test;;;;./config/regionmapping_21_EU11.csv;./config/extramapping_EU27.csv;rcp20;9;globallyOptimal;650;diffCurvPhaseIn2Lin;100;2080;;9;;;;;;;;;;;;NDC;regiCarbonPrice;(2035,2040,2045,2050).EU27_regi.tax.t.PE.biomass 0.237825;2020.2030.EU27_regi.all.year.netGHG_LULUCFGrassi_intraRegBunker 2.122, 2035.2050.EU27_regi.all.year.netGHG_LULUCFGrassi 0.01;on;on;EUR_regi, NEU_regi;;;;;;;;;;;;;;;;heat;Mix4;2025;xx_WP1_Nzero;xx_WP1_Nzero;xx_DIAG-NPI;;same as xx_DIAG-Nzero;;;;;;;;;;;;;0.001 -xx_WP1_Nzero_highPrecision_1tCO2eq;0,test;;;;./config/regionmapping_21_EU11.csv;./config/extramapping_EU27.csv;rcp20;9;globallyOptimal;650;diffCurvPhaseIn2Lin;100;2080;;9;;;;;;;;;;;;NDC;regiCarbonPrice;(2035,2040,2045,2050).EU27_regi.tax.t.PE.biomass 0.237825;2020.2030.EU27_regi.all.year.netGHG_LULUCFGrassi_intraRegBunker 2.122, 2035.2050.EU27_regi.all.year.netGHG_LULUCFGrassi 0.01;on;on;EUR_regi, NEU_regi;;;;;;;;;;;;;;;;heat;Mix4;2025;xx_WP1_Nzero;xx_WP1_Nzero;xx_DIAG-NPI;;same as xx_DIAG-Nzero;;;;;;;;;;;;;0.0002 -xx_WP1_Nzero_highPrecision_0p4tCO2eq;0,test;;;;./config/regionmapping_21_EU11.csv;./config/extramapping_EU27.csv;rcp20;9;globallyOptimal;650;diffCurvPhaseIn2Lin;100;2080;;9;;;;;;;;;;;;NDC;regiCarbonPrice;(2035,2040,2045,2050).EU27_regi.tax.t.PE.biomass 0.237825;2020.2030.EU27_regi.all.year.netGHG_LULUCFGrassi_intraRegBunker 2.122, 2035.2050.EU27_regi.all.year.netGHG_LULUCFGrassi 0.01;on;on;EUR_regi, NEU_regi;;;;;;;;;;;;;;;;heat;Mix4;2025;xx_WP1_Nzero;xx_WP1_Nzero;xx_DIAG-NPI;;same as xx_DIAG-Nzero;;;;;;;;;;;;;0.00008 +xx_WP1_Nzero_highPrecision_10tCO2eq;0,test;;;;./config/regionmapping_21_EU11.csv;./config/extramapping_EU27.csv;rcp20;9;globallyOptimal;650;diffCurvPhaseIn2Lin;100;2080;;9;;;;;;;;;;;;NDC;regiCarbonPrice;(2035,2040,2045,2050).EU27_regi.tax.t.PE.biomass 0.237825;2020.2030.EU27_regi.all.year.netGHG_LULUCFGrassi_intraRegBunker 2.122, 2035.2050.EU27_regi.all.year.netGHG_LULUCFGrassi 0.01;on;on;EUR_regi, NEU_regi;;;;;;;;;;;;;;;;heat;Mix4;2025;xx_WP1_Nzero;xx_DIAG-NPI;xx_DIAG-NPI;;same as xx_DIAG-Nzero;;;;;;;;;;;;;0.002 +xx_WP1_Nzero_highPrecision_5tCO2eq;0,test;;;;./config/regionmapping_21_EU11.csv;./config/extramapping_EU27.csv;rcp20;9;globallyOptimal;650;diffCurvPhaseIn2Lin;100;2080;;9;;;;;;;;;;;;NDC;regiCarbonPrice;(2035,2040,2045,2050).EU27_regi.tax.t.PE.biomass 0.237825;2020.2030.EU27_regi.all.year.netGHG_LULUCFGrassi_intraRegBunker 2.122, 2035.2050.EU27_regi.all.year.netGHG_LULUCFGrassi 0.01;on;on;EUR_regi, NEU_regi;;;;;;;;;;;;;;;;heat;Mix4;2025;xx_WP1_Nzero;xx_DIAG-NPI;xx_DIAG-NPI;;same as xx_DIAG-Nzero;;;;;;;;;;;;;0.001 +xx_WP1_Nzero_highPrecision_1tCO2eq;0,test;;;;./config/regionmapping_21_EU11.csv;./config/extramapping_EU27.csv;rcp20;9;globallyOptimal;650;diffCurvPhaseIn2Lin;100;2080;;9;;;;;;;;;;;;NDC;regiCarbonPrice;(2035,2040,2045,2050).EU27_regi.tax.t.PE.biomass 0.237825;2020.2030.EU27_regi.all.year.netGHG_LULUCFGrassi_intraRegBunker 2.122, 2035.2050.EU27_regi.all.year.netGHG_LULUCFGrassi 0.01;on;on;EUR_regi, NEU_regi;;;;;;;;;;;;;;;;heat;Mix4;2025;xx_WP1_Nzero;xx_DIAG-NPI;xx_DIAG-NPI;;same as xx_DIAG-Nzero;;;;;;;;;;;;;0.0002 +xx_WP1_Nzero_highPrecision_0p4tCO2eq;0,test;;;;./config/regionmapping_21_EU11.csv;./config/extramapping_EU27.csv;rcp20;9;globallyOptimal;650;diffCurvPhaseIn2Lin;100;2080;;9;;;;;;;;;;;;NDC;regiCarbonPrice;(2035,2040,2045,2050).EU27_regi.tax.t.PE.biomass 0.237825;2020.2030.EU27_regi.all.year.netGHG_LULUCFGrassi_intraRegBunker 2.122, 2035.2050.EU27_regi.all.year.netGHG_LULUCFGrassi 0.01;on;on;EUR_regi, NEU_regi;;;;;;;;;;;;;;;;heat;Mix4;2025;xx_WP1_Nzero;xx_DIAG-NPI;xx_DIAG-NPI;;same as xx_DIAG-Nzero;;;;;;;;;;;;;0.00008 diff --git a/config/scenario_config_GCS.csv b/config/scenario_config_GCS.csv deleted file mode 100644 index e3e2724cd..000000000 --- a/config/scenario_config_GCS.csv +++ /dev/null @@ -1,48 +0,0 @@ -title;start;CES_parameters;cm_rcp_scen;climate;cm_magicc_config;cm_magicc_calibrateTemperature2000;downscaleTemperature;damages;cm_TCpers;cm_TCspec;cm_bioenergy_SustTax;cm_iterative_target_adj;subsidizeLearning;c_budgetCO2from2020;carbonprice;cm_co2_tax_2020;c_peakBudgYr;c_taxCO2inc_after_peakBudgYr;cm_emiscen;cm_flex_tax;cm_EDGEtr_scen;cm_build_H2costAddH2Inv;cm_CESMkup_build;cm_CESMkup_ind;cm_CESMkup_ind_data;cm_PriceDurSlope_elh2;techpol;cm_POPscen;cm_GDPscen;cm_demScen;cm_LU_emi_scen;c_techAssumptScen;cm_nucscen;cm_so2tax_scen;cm_multigasscen;cm_ccapturescen;c_ccsinjecratescen;CCU;cm_INCONV_PENALTY_FESwitch;cm_APscen;cm_startyear;path_gdx;path_gdx_ref;path_gdx_bau;path_gdx_carbonprice -SSP2-Base;1;load;none;magicc;RCP26_50;HADCRUT4;CMIP5;off;9;mean;0;0;off;0;none;-1;2100;3;1;0;Mix1;0.2;standard;standard;;10;none;pop_SSP2EU;gdp_SSP2EU;gdp_SSP2EU;SSP2;1;2;1;2;2;0;off;off;SSP2;2005;;;; -SSP2-Tall-PkBudg750;0;load;rcp20;magicc;RCP26_50;HADCRUT4;CMIP5;KWTCint;9;mean;0;9;globallyOptimal;750;diffCurvPhaseIn2Lin;200;2045;3;9;0;Mix4;0.15;feelhpb 0.87;standard;;10;NDC;pop_SSP2EU;gdp_SSP2EU;gdp_SSP2_lowEn;SSP2;1;2;1;2;1;1;on;off;SSP2;2025;;SSP2-NPi;SSP2-Base; -SSP2-NDC;0;load;rcp45;magicc;RCP26_50;HADCRUT4;CMIP5;KWTCint;9;mean;0;3;globallyOptimal;0;NDC;1;2100;3;9;0;Mix1;0.2;standard;standard;;10;NDC;pop_SSP2EU;gdp_SSP2EU;gdp_SSP2EU;SSP2;1;2;1;3;2;0;off;off;SSP2;2025;;SSP2-NPi;SSP2-Base; -SSP2-NPi;1;load;rcp45;magicc;RCP26_50;HADCRUT4;CMIP5;KWTCint;9;mean;0;3;globallyOptimal;0;NPi;1;2100;3;9;0;Mix1;0.2;standard;standard;;10;NPi2018;pop_SSP2EU;gdp_SSP2EU;gdp_SSP2EU;SSP2;1;2;1;3;2;0;off;off;SSP2;2005;;;; -SSP2-ENEndc;0;load;rcp26;magicc;RCP26_50;HADCRUT4;CMIP5;KWTCint;9;mean;0;0;globallyOptimal;0;exogenous;1;2100;3;9;0;Mix1;0.2;standard;standard;;10;NDC;pop_SSP2EU;gdp_SSP2EU;gdp_SSP2EU;SSP2;1;2;1;3;2;0;off;off;SSP2;2025;;SSP2-NPi;SSP2-Base;SSP2-NDC -SSP2-ENEcp;0;load;rcp26;magicc;RCP26_50;HADCRUT4;CMIP5;KWTCint;9;mean;0;0;globallyOptimal;0;exogenous;1;2100;3;9;0;Mix1;0.2;standard;standard;;10;NPi2018;pop_SSP2EU;gdp_SSP2EU;gdp_SSP2EU;SSP2;1;2;1;3;2;0;off;off;SSP2;2025;;SSP2-NPi;SSP2-Base;SSP2-Tall-PkBudg750 -SSP2-ENEelec;0;load;rcp26;magicc;RCP26_50;HADCRUT4;CMIP5;KWTCint;9;mean;0;0;globallyOptimal;0;exogenous;1;2100;3;9;0;Mix4;0.15;feelhpb 0.87;manual;feel_steel_secondary 1.00, feel_steel_primary 1.00 , feelhth_chemicals 1.00, feelhth_otherInd 1.00, feh2_chemicals 0.87, feh2_steel 0.87, feh2_otherInd 0.87, feh2_cement 0.87;10;NPi2018;pop_SSP2EU;gdp_SSP2EU;gdp_SSP2EU;SSP2;1;2;1;3;2;0;off;off;SSP2;2025;;SSP2-NPi;SSP2-Base;SSP2-NPi -SSP2-ENEcp-ENEcc;0;load;rcp26;magicc;RCP26_50;HADCRUT4;CMIP5;KWTCint;9;mean;0;0;globallyOptimal;0;exogenous;1;2100;3;9;0;Mix1;0.2;standard;standard;;10;NPi2018;pop_SSP2EU;gdp_SSP2EU;gdp_SSP2EU;SSP2;1;2;1;3;1;1;on;off;SSP2;2025;;SSP2-NPi;SSP2-Base;SSP2-Tall-PkBudg750 -SSP2-Tene;0;load;rcp26;magicc;RCP26_50;HADCRUT4;CMIP5;KWTCint;9;mean;0;0;globallyOptimal;0;exogenous;1;2100;3;9;0;Mix4;0.15;feelhpb 0.87;manual;feel_steel_secondary 1.00, feel_steel_primary 1.00 , feelhth_chemicals 1.00, feelhth_otherInd 1.00, feh2_chemicals 0.87, feh2_steel 0.87, feh2_otherInd 0.87, feh2_cement 0.87;10;NDC;pop_SSP2EU;gdp_SSP2EU;gdp_SSP2EU;SSP2;1;2;1;3;1;1;on;off;SSP2;2025;;SSP2-NPi;SSP2-Base;SSP2-Tall-PkBudg750 -SSP2-Tpc;0;load;rcp26;magicc;RCP26_50;HADCRUT4;CMIP5;KWTCint;9;mean;0;0;globallyOptimal;0;exogenous;1;2100;3;9;0;Mix1;0.2;standard;standard;;10;NPi2018;pop_SSP2EU;gdp_SSP2EU;gdp_SSP2_lowEn;SSP2;1;2;1;3;2;0;off;off;SSP2;2025;;SSP2-NPi;SSP2-Base;SSP2-NPi -SSP2-LNDcp;0;load;rcp26;magicc;RCP26_50;HADCRUT4;CMIP5;KWTCint;9;mean;0;0;globallyOptimal;0;exogenous;1;2100;3;9;0;Mix4;0.2;standard;standard;;10;NPi2018;pop_SSP2EU;gdp_SSP2EU;gdp_SSP2EU;SSP2;1;2;1;2;2;0;off;off;SSP2;2025;;SSP2-NPi;SSP2-Base;SSP2-NPi -SSP2-LNDndc;0;load;rcp26;magicc;RCP26_50;HADCRUT4;CMIP5;KWTCint;9;mean;0;0;globallyOptimal;0;exogenous;1;2100;3;9;0;Mix4;0.2;standard;standard;;10;NPi2018;pop_SSP2EU;gdp_SSP2EU;gdp_SSP2EU;SSP2;1;2;1;2;2;0;off;off;SSP2;2025;;SSP2-NPi;SSP2-Base;SSP2-NPi -SSP2-LNDlbs;0;load;rcp26;magicc;RCP26_50;HADCRUT4;CMIP5;KWTCint;9;mean;0;0;globallyOptimal;0;exogenous;1;2100;3;9;0;Mix4;0.2;standard;standard;;10;NPi2018;pop_SSP2EU;gdp_SSP2EU;gdp_SSP2EU;SSP2;1;2;1;2;2;0;off;off;SSP2;2025;;SSP2-NPi;SSP2-Base;SSP2-NPi -SSP2-LNDreseff;0;load;rcp26;magicc;RCP26_50;HADCRUT4;CMIP5;KWTCint;9;mean;0;0;globallyOptimal;0;exogenous;1;2100;3;9;0;Mix4;0.2;standard;standard;;10;NPi2018;pop_SSP2EU;gdp_SSP2EU;gdp_SSP2EU;SSP2;1;2;1;2;2;0;off;off;SSP2;2025;;SSP2-NPi;SSP2-Base;SSP2-NPi -SSP2-LNDfood;0;load;rcp26;magicc;RCP26_50;HADCRUT4;CMIP5;KWTCint;9;mean;0;0;globallyOptimal;0;exogenous;1;2100;3;9;0;Mix4;0.2;standard;standard;;10;NPi2018;pop_SSP2EU;gdp_SSP2EU;gdp_SSP2EU;SSP2;1;2;1;2;2;0;off;off;SSP2;2025;;SSP2-NPi;SSP2-Base;SSP2-NPi -SSP2-Tland;0;load;rcp26;magicc;RCP26_50;HADCRUT4;CMIP5;KWTCint;9;mean;0;0;globallyOptimal;0;exogenous;1;2100;3;9;0;Mix4;0.2;standard;standard;;10;NPi2018;pop_SSP2EU;gdp_SSP2EU;gdp_SSP2EU;SSP2;1;2;1;2;2;0;off;off;SSP2;2025;;SSP2-NPi;SSP2-Base;SSP2-NPi -SSP2-nofood-Tland;0;load;rcp26;magicc;RCP26_50;HADCRUT4;CMIP5;KWTCint;9;mean;0;0;globallyOptimal;0;exogenous;1;2100;3;9;0;Mix4;0.2;standard;standard;;10;NPi2018;pop_SSP2EU;gdp_SSP2EU;gdp_SSP2EU;SSP2;1;2;1;2;2;0;off;off;SSP2;2025;;SSP2-NPi;SSP2-Base;SSP2-NPi -SSP2-Tene-LNDndc;0;load;rcp26;magicc;RCP26_50;HADCRUT4;CMIP5;KWTCint;9;mean;0;0;globallyOptimal;0;exogenous;1;2100;3;9;0;Mix4;0.15;feelhpb 0.87;manual;feel_steel_secondary 1.00, feel_steel_primary 1.00 , feelhth_chemicals 1.00, feelhth_otherInd 1.00, feh2_chemicals 0.87, feh2_steel 0.87, feh2_otherInd 0.87, feh2_cement 0.87;10;NDC;pop_SSP2EU;gdp_SSP2EU;gdp_SSP2EU;SSP2;1;2;1;3;1;1;on;off;SSP2;2025;;SSP2-NPi;SSP2-Base;SSP2-Tall-PkBudg750 -SSP2-Tene-LNDlbs;0;load;rcp26;magicc;RCP26_50;HADCRUT4;CMIP5;KWTCint;9;mean;0;0;globallyOptimal;0;exogenous;1;2100;3;9;0;Mix4;0.15;feelhpb 0.87;manual;feel_steel_secondary 1.00, feel_steel_primary 1.00 , feelhth_chemicals 1.00, feelhth_otherInd 1.00, feh2_chemicals 0.87, feh2_steel 0.87, feh2_otherInd 0.87, feh2_cement 0.87;10;NDC;pop_SSP2EU;gdp_SSP2EU;gdp_SSP2EU;SSP2;1;2;1;2;1;1;on;off;SSP2;2025;;SSP2-NPi;SSP2-Base;SSP2-Tall-PkBudg750 -SSP2-Tene-LNDreseff;0;load;rcp26;magicc;RCP26_50;HADCRUT4;CMIP5;KWTCint;9;mean;0;0;globallyOptimal;0;exogenous;1;2100;3;9;0;Mix4;0.15;feelhpb 0.87;manual;feel_steel_secondary 1.00, feel_steel_primary 1.00 , feelhth_chemicals 1.00, feelhth_otherInd 1.00, feh2_chemicals 0.87, feh2_steel 0.87, feh2_otherInd 0.87, feh2_cement 0.87;10;NDC;pop_SSP2EU;gdp_SSP2EU;gdp_SSP2EU;SSP2;1;2;1;2;1;1;on;off;SSP2;2025;;SSP2-NPi;SSP2-Base;SSP2-Tall-PkBudg750 -SSP2-Tene-LNDfood;0;load;rcp26;magicc;RCP26_50;HADCRUT4;CMIP5;KWTCint;9;mean;0;0;globallyOptimal;0;exogenous;1;2100;3;9;0;Mix4;0.15;feelhpb 0.87;manual;feel_steel_secondary 1.00, feel_steel_primary 1.00 , feelhth_chemicals 1.00, feelhth_otherInd 1.00, feh2_chemicals 0.87, feh2_steel 0.87, feh2_otherInd 0.87, feh2_cement 0.87;10;NDC;pop_SSP2EU;gdp_SSP2EU;gdp_SSP2EU;SSP2;1;2;1;2;1;1;on;off;SSP2;2025;;SSP2-NPi;SSP2-Base;SSP2-Tall-PkBudg750 -SSP2-nofood-Tene-Tland;0;load;rcp26;magicc;RCP26_50;HADCRUT4;CMIP5;KWTCint;9;mean;0;0;globallyOptimal;0;exogenous;1;2100;3;9;0;Mix4;0.15;feelhpb 0.87;manual;feel_steel_secondary 1.00, feel_steel_primary 1.00 , feelhth_chemicals 1.00, feelhth_otherInd 1.00, feh2_chemicals 0.87, feh2_steel 0.87, feh2_otherInd 0.87, feh2_cement 0.87;10;NDC;pop_SSP2EU;gdp_SSP2EU;gdp_SSP2EU;SSP2;1;2;1;2;1;1;on;off;SSP2;2025;;SSP2-NPi;SSP2-Base;SSP2-Tall-PkBudg750 -SSP2-Tene-Tland;0;load;rcp26;magicc;RCP26_50;HADCRUT4;CMIP5;KWTCint;9;mean;0;0;globallyOptimal;0;exogenous;1;2100;3;9;0;Mix4;0.15;feelhpb 0.87;manual;feel_steel_secondary 1.00, feel_steel_primary 1.00 , feelhth_chemicals 1.00, feelhth_otherInd 1.00, feh2_chemicals 0.87, feh2_steel 0.87, feh2_otherInd 0.87, feh2_cement 0.87;10;NDC;pop_SSP2EU;gdp_SSP2EU;gdp_SSP2EU;SSP2;1;2;1;3;1;1;on;off;SSP2;2025;;SSP2-NPi;SSP2-Base;SSP2-Tall-PkBudg750 -SDP-Tall-PkBudg750;0;load;rcp20;magicc;RCP26_50;HADCRUT4;CMIP5;KWTCint;9;mean;0;9;globallyOptimal;750;diffCurvPhaseIn2Lin;200;2045;3;9;0;Mix4;0.15;feelhpb 0.87;standard;;10;NDC;pop_SDP;gdp_SDP;gdp_SDP;SDP;2;2;4;2;1;1;on;off;SSP2;2025;;SSP2-NPi;SSP2-Base; -SDP-Tall-exoCP;0;load;rcp20;magicc;RCP26_50;HADCRUT4;CMIP5;KWTCint;9;mean;0;0;globallyOptimal;0;exogenous;1;2100;3;9;0;Mix4;0.15;feelhpb 0.87;standard;;10;NDC;pop_SDP;gdp_SDP;gdp_SDP;SDP;2;2;4;2;1;1;on;off;SSP2;2025;;SSP2-NPi;SSP2-Base;SSP2-Tall-PkBudg750 -SSP1-Tall-exoCP;0;load;rcp20;magicc;RCP26_50;HADCRUT4;CMIP5;KWTCint;9;mean;0;0;globallyOptimal;0;exogenous;1;2100;3;9;0;Mix4;0.15;feelhpb 0.87;standard;;10;NDC;pop_SSP1;gdp_SSP1;gdp_SSP1;SSP1;2;2;4;2;1;1;on;off;SSP1;2025;;SSP2-NPi;SSP2-Base;SSP2-Tall-PkBudg750 -SSP2-Tene-rcp45;0;load;rcp45;magicc;RCP26_50;HADCRUT4;CMIP5;KWTCint;9;mean;0;0;globallyOptimal;0;exogenous;1;2100;3;9;0;Mix4;0.15;feelhpb 0.87;manual;feel_steel_secondary 1.00, feel_steel_primary 1.00 , feelhth_chemicals 1.00, feelhth_otherInd 1.00, feh2_chemicals 0.87, feh2_steel 0.87, feh2_otherInd 0.87, feh2_cement 0.87;10;NDC;pop_SSP2EU;gdp_SSP2EU;gdp_SSP2EU;SSP2;1;2;1;3;1;1;on;off;SSP2;2025;;SSP2-NPi;SSP2-Base;SSP2-Tall-PkBudg750 -SSP2-Tpc-rcp45;0;load;rcp45;magicc;RCP26_50;HADCRUT4;CMIP5;KWTCint;9;mean;0;0;globallyOptimal;0;exogenous;1;2100;3;9;0;Mix1;0.2;standard;standard;;10;NPi2018;pop_SSP2EU;gdp_SSP2EU;gdp_SSP2_lowEn;SSP2;1;2;1;3;2;0;off;off;SSP2;2025;;SSP2-NPi;SSP2-Base;SSP2-NPi -SSP2-Tland-rcp45;0;load;rcp45;magicc;RCP26_50;HADCRUT4;CMIP5;KWTCint;9;mean;0;0;globallyOptimal;0;exogenous;1;2100;3;9;0;Mix4;0.2;standard;standard;;10;NPi2018;pop_SSP2EU;gdp_SSP2EU;gdp_SSP2EU;SSP2;1;2;1;2;2;0;off;off;SSP2;2025;;SSP2-NPi;SSP2-Base;SSP2-NPi -SSP2-LNDndc-rcp45;0;load;rcp45;magicc;RCP26_50;HADCRUT4;CMIP5;KWTCint;9;mean;0;0;globallyOptimal;0;exogenous;1;2100;3;9;0;Mix4;0.2;standard;standard;;10;NPi2018;pop_SSP2EU;gdp_SSP2EU;gdp_SSP2EU;SSP2;1;2;1;2;2;0;off;off;SSP2;2025;;SSP2-NPi;SSP2-Base;SSP2-NPi -SSP2-LNDlbs-rcp45;0;load;rcp45;magicc;RCP26_50;HADCRUT4;CMIP5;KWTCint;9;mean;0;0;globallyOptimal;0;exogenous;1;2100;3;9;0;Mix4;0.2;standard;standard;;10;NPi2018;pop_SSP2EU;gdp_SSP2EU;gdp_SSP2EU;SSP2;1;2;1;2;2;0;off;off;SSP2;2025;;SSP2-NPi;SSP2-Base;SSP2-NPi -SSP2-LNDreseff-rcp45;0;load;rcp45;magicc;RCP26_50;HADCRUT4;CMIP5;KWTCint;9;mean;0;0;globallyOptimal;0;exogenous;1;2100;3;9;0;Mix4;0.2;standard;standard;;10;NPi2018;pop_SSP2EU;gdp_SSP2EU;gdp_SSP2EU;SSP2;1;2;1;2;2;0;off;off;SSP2;2025;;SSP2-NPi;SSP2-Base;SSP2-NPi -SSP2-LNDfood-rcp45;0;load;rcp45;magicc;RCP26_50;HADCRUT4;CMIP5;KWTCint;9;mean;0;0;globallyOptimal;0;exogenous;1;2100;3;9;0;Mix4;0.2;standard;standard;;10;NPi2018;pop_SSP2EU;gdp_SSP2EU;gdp_SSP2EU;SSP2;1;2;1;2;2;0;off;off;SSP2;2025;;SSP2-NPi;SSP2-Base;SSP2-NPi -SSP2-basendc-Tene;0;load;rcp26;magicc;RCP26_50;HADCRUT4;CMIP5;KWTCint;9;mean;0;0;globallyOptimal;0;exogenous;1;2100;3;9;0;Mix4;0.15;feelhpb 0.87;manual;feel_steel_secondary 1.00, feel_steel_primary 1.00 , feelhth_chemicals 1.00, feelhth_otherInd 1.00, feh2_chemicals 0.87, feh2_steel 0.87, feh2_otherInd 0.87, feh2_cement 0.87;10;NDC;pop_SSP2EU;gdp_SSP2EU;gdp_SSP2EU;SSP2;1;2;1;3;1;1;on;off;SSP2;2025;;SSP2-NPi;SSP2-Base;SSP2-Tall-PkBudg750 -SSP2-basendc-Tland;0;load;rcp26;magicc;RCP26_50;HADCRUT4;CMIP5;KWTCint;9;mean;0;0;globallyOptimal;0;exogenous;1;2100;3;9;0;Mix4;0.2;standard;standard;;10;NDC;pop_SSP2EU;gdp_SSP2EU;gdp_SSP2EU;SSP2;1;2;1;2;2;0;off;off;SSP2;2025;;SSP2-NPi;SSP2-Base;SSP2-NDC -SSP2-Tall-noTpc-PkBudg750;0;load;rcp20;magicc;RCP26_50;HADCRUT4;CMIP5;KWTCint;9;mean;0;9;globallyOptimal;750;diffCurvPhaseIn2Lin;200;2045;3;9;0;Mix4;0.15;feelhpb 0.87;standard;;10;NDC;pop_SSP2EU;gdp_SSP2EU;gdp_SSP2_lowEn;SSP2;1;2;1;2;1;1;on;off;SSP2;2025;;SSP2-NPi;SSP2-Base; -SSP2-Tall-noDam-PkBudg750;0;load;rcp20;magicc;RCP26_50;HADCRUT4;CMIP5;off;9;mean;0;9;globallyOptimal;750;diffCurvPhaseIn2Lin;200;2045;3;9;0;Mix4;0.15;feelhpb 0.87;standard;;10;NDC;pop_SSP2EU;gdp_SSP2EU;gdp_SSP2_lowEn;SSP2;1;2;1;2;1;1;on;off;SSP2;2025;;SSP2-NPi;SSP2-Base; -SSP2-Tall-noDam-exoCP;0;load;rcp20;magicc;RCP26_50;HADCRUT4;CMIP5;off;9;mean;0;0;globallyOptimal;0;exogenous;1;2100;3;9;0;Mix4;0.15;feelhpb 0.87;standard;;10;NDC;pop_SSP2EU;gdp_SSP2EU;gdp_SSP2_lowEn;SSP2;1;2;1;2;1;1;on;off;SSP2;2025;;SSP2-NPi;SSP2-Base;SSP2-Tall-PkBudg750 -SSP2-NPi-noDam;0;load;rcp45;magicc;RCP26_50;HADCRUT4;CMIP5;off;9;mean;0;3;globallyOptimal;0;NPi;1;2100;3;9;0;Mix1;0.2;standard;standard;;10;NPi2018;pop_SSP2EU;gdp_SSP2EU;gdp_SSP2EU;SSP2;1;2;1;3;2;0;off;off;SSP2;2005;;;; -SSP2-notrans-PkBudg750;0;load;rcp26;magicc;RCP26_50;HADCRUT4;CMIP5;KWTCint;9;mean;0;9;globallyOptimal;750;diffCurvPhaseIn2Lin;200;2045;3;9;0;Mix1;0.2;standard;standard;;10;NDC;pop_SSP2EU;gdp_SSP2EU;gdp_SSP2EU;SSP2;1;2;1;3;2;0;off;off;SSP2;2025;;SSP2-NPi;SSP2-Base; -SSP2-notrans-PkBudg500;0;load;rcp26;magicc;RCP26_50;HADCRUT4;CMIP5;KWTCint;9;mean;0;9;globallyOptimal;500;diffCurvPhaseIn2Lin;200;2045;3;9;0;Mix1;0.2;standard;standard;;10;NDC;pop_SSP2EU;gdp_SSP2EU;gdp_SSP2EU;SSP2;1;2;1;3;2;0;off;off;SSP2;2025;;SSP2-NPi;SSP2-Base; -SSP2-CPonly;0;load;rcp26;magicc;RCP26_50;HADCRUT4;CMIP5;KWTCint;9;mean;0;0;globallyOptimal;0;exogenous;1;2100;3;9;0;Mix1;0.2;standard;standard;;10;NPi2018;pop_SSP2EU;gdp_SSP2EU;gdp_SSP2EU;SSP2;1;2;1;3;2;0;off;off;SSP2;2025;;SSP2-NPi;SSP2-Base;SSP2-Tall-PkBudg750 -SSP2-lowEnBase;0;load;none;magicc;RCP26_50;HADCRUT4;CMIP5;off;9;mean;0;0;off;0;none;-1;2100;3;1;0;Mix1;0.2;standard;standard;;10;none;pop_SSP2EU;gdp_SSP2EU;gdp_SSP2_lowEn;SSP2;1;2;1;2;2;0;off;off;SSP2;2005;;;; -SSP2-sens-Tall-PkBudg750;0;load;rcp20;magicc;RCP26_50;HADCRUT4;CMIP5;KWTCint;9;mean;0;9;globallyOptimal;750;diffCurvPhaseIn2Lin;200;2045;3;9;0;Mix4;0.15;feelhpb 0.87;standard;;10;NDC;pop_SSP2EU;gdp_SSP2EU;gdp_SSP2_lowEn;SSP2;1;2;1;2;1;1;on;off;SSP2;2025;;SSP2-NPi;SSP2-Base; -SSP2-sens-Tall-PkBudg700;0;load;rcp20;magicc;RCP26_50;HADCRUT4;CMIP5;KWTCint;9;mean;0;9;globallyOptimal;700;diffCurvPhaseIn2Lin;200;2045;3;9;0;Mix4;0.15;feelhpb 0.87;standard;;10;NDC;pop_SSP2EU;gdp_SSP2EU;gdp_SSP2_lowEn;SSP2;1;2;1;2;1;1;on;off;SSP2;2025;;SSP2-NPi;SSP2-Base; -SSP2-sens-Tall-PkBudg650;0;load;rcp20;magicc;RCP26_50;HADCRUT4;CMIP5;KWTCint;9;mean;0;9;globallyOptimal;650;diffCurvPhaseIn2Lin;200;2045;3;9;0;Mix4;0.15;feelhpb 0.87;standard;;10;NDC;pop_SSP2EU;gdp_SSP2EU;gdp_SSP2_lowEn;SSP2;1;2;1;2;1;1;on;off;SSP2;2025;;SSP2-NPi;SSP2-Base; -SSP2-sens-Tall-PkBudg600;0;load;rcp20;magicc;RCP26_50;HADCRUT4;CMIP5;KWTCint;9;mean;0;9;globallyOptimal;600;diffCurvPhaseIn2Lin;200;2045;3;9;0;Mix4;0.15;feelhpb 0.87;standard;;10;NDC;pop_SSP2EU;gdp_SSP2EU;gdp_SSP2_lowEn;SSP2;1;2;1;2;1;1;on;off;SSP2;2025;;SSP2-NPi;SSP2-Base; diff --git a/config/scenario_config_coupled_SHAPE.csv b/config/scenario_config_coupled_SHAPE.csv deleted file mode 100644 index 7dce22a13..000000000 --- a/config/scenario_config_coupled_SHAPE.csv +++ /dev/null @@ -1,36 +0,0 @@ -title;start;qos;oldrun;path_report;magpie_scen;no_ghgprices_land_until;path_gdx;path_gdx_ref;path_gdx_bau -SSP1-Base;1;short;;;SSP1|NPI|nocc_hist;y2150;;; -SSP1-NDC;0;short;;;SSP1|NDC|nocc_hist;y2150;;; -SSP1-NPi;1;short;;;SSP1|NPI|nocc_hist;y2150;;; -SSP1-PkBudg500;0;short;;;SSP1|NDC|nocc_hist;y2030;;; -SSP1-PkBudg650;1;short;;;SSP1|NDC|nocc_hist;y2030;;; -SSP2EU-Base;1;priority;;;SSP2|NPI|nocc_hist;y2150;;; -SSP2EU-NDC;1;priority;;;SSP2|NDC|nocc_hist;y2150;;; -SSP2EU-NPi;1;short;;;SSP2|NPI|nocc_hist;y2150;;; -SSP2EU-PkBudg500;1;short;;;SSP2|NDC|nocc_hist;y2030;;; -SSP2EU-PkBudg650;1;short;;;SSP2|NDC|nocc_hist;y2030;;; -SDP-Base;0;short;;;SDP|NPI|nocc_hist;y2150;;; -SDP-NDC;0;short;;;SDP|NDC|nocc_hist;y2150;;; -SDP-NPi;0;short;;;SDP|NPI|nocc_hist;y2150;;; -SDP-PkBudg500;0;short;;;SDP|NDC|nocc_hist;y2030;;; -SDP-PkBudg650;0;short;;;SDP|NDC|nocc_hist;y2030;;; -SDP_MC-Base;1;priority;;;SDP-MC|NPI|nocc_hist;y2150;;; -SDP_MC-NDC;1;short;;;SDP-MC|NDC|nocc_hist;y2150;;; -SDP_MC-NPi;1;short;;;SDP-MC|NPI|nocc_hist;y2150;;; -SDP_MC-PkBudg500;1;short;;;SDP-MC|NDC|nocc_hist;y2030;;; -SDP_MC-PkBudg650;1;short;;;SDP-MC|NDC|nocc_hist;y2030;;; -SDP_EI-Base;1;priority;;;SDP-EI|NPI|nocc_hist;y2150;;; -SDP_EI-NDC;1;short;;;SDP-EI|NDC|nocc_hist;y2150;;; -SDP_EI-NPi;1;short;;;SDP-EI|NPI|nocc_hist;y2150;;; -SDP_EI-PkBudg500;1;short;;;SDP-EI|NDC|nocc_hist;y2030;;; -SDP_EI-PkBudg650;1;short;;;SDP-EI|NDC|nocc_hist;y2030;;; -SDP_RC-Base;1;priority;;;SDP-RC|NPI|nocc_hist;y2150;;; -SDP_RC-NDC;1;short;;;SDP-RC|NDC|nocc_hist;y2150;;; -SDP_RC-NPi;1;short;;;SDP-RC|NPI|nocc_hist;y2150;;; -SDP_RC-PkBudg500;1;short;;;SDP-RC|NDC|nocc_hist;y2030;;; -SDP_RC-PkBudg650;1;short;;;SDP-RC|NDC|nocc_hist;y2030;;; -SDP_MC-PkBudg650-CCimp;1;short;;;SDP-MC|NDC|cc|rcp1p9;y2030;;; -SDP_EI-PkBudg650-CCimp;1;short;;;SDP-EI|NDC|cc|rcp1p9;y2030;;; -SDP_RC-PkBudg650-CCimp;1;short;;;SDP-RC|NDC|cc|rcp1p9;y2030;;; -SSP2EU-PkBudg650-CCimp;1;short;;;SSP2|NDC|cc|rcp1p9;y2030;;; -SSP2EU-NPi-CCimp;1;short;;;SSP2|NPI|cc|rcp4p5;y2150;;; diff --git a/config/scenario_config_tradeCap_standalone.csv b/config/scenario_config_tradeCap_standalone.csv deleted file mode 100644 index b391d2f77..000000000 --- a/config/scenario_config_tradeCap_standalone.csv +++ /dev/null @@ -1,2 +0,0 @@ -title;trade;start;model;output;cm_startyear;path_gdx;path_gdx_ref;path_gdx_bau -standalone_trade;capacity;1;standalone/trade/trade.gms;reporting_trade;2005;;; diff --git a/core/datainput.gms b/core/datainput.gms index 29869feb8..70a104a76 100644 --- a/core/datainput.gms +++ b/core/datainput.gms @@ -55,6 +55,7 @@ pm_ttot_2_tall(ttot,tall)$((ttot.val = tall.val) ) = Yes; *** define pm_prtp according to cm_prtpScen: if(cm_prtpScen eq 1, pm_prtp(regi) = 0.01); if(cm_prtpScen eq 3, pm_prtp(regi) = 0.03); +pm_ies(regi) = 0.5; *------------------------------------------------------------------------------------ *------------------------------------------------------------------------------------ @@ -148,27 +149,26 @@ $include "./core/input/generisdata_trade.prn" *JH* SSP energy technology scenario 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" ; table f_dataglob_SSP5(char,all_te) "Techno-economic assumptions consistent with SSP5" $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 -*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 ***--------------------------------------------------------------------------- -*** Reading in and initializing regional data +*** Reading in and initializing regional cost data ***--------------------------------------------------------------------------- parameter p_inco0(ttot,all_regi,all_te) "regionalized technology costs Unit: USD$/KW" / @@ -182,9 +182,9 @@ $offdelim pm_esCapCost(tall,all_regi,all_teEs) = 0; ***--------------------------------------------------------------------------- -*** Manipulating technology data +*** Manipulating technology cost data ***--------------------------------------------------------------------------- -*** Manipulating global or regional technology data - absolute value +*** 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, @@ -201,6 +201,10 @@ if (cm_VRE_supply_assumptions eq 3, ); +*JH* 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 +); if (c_techAssumptScen eq 2, fm_dataglob(char,te) = f_dataglob_SSP1(char,te) @@ -209,6 +213,13 @@ if (c_techAssumptScen eq 3, fm_dataglob(char,te) = f_dataglob_SSP5(char,te) ); +*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 @@ -218,9 +229,9 @@ $if "%cm_ccsinjeCost%" == "low" fm_dataglob("inco0","ccsinje") = 220; * 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 technology data - relative value +*** Manipulating global or regional cost technology data - relative value ***--------------------------------------------------------------------------- -*** Overwrite default technology parameter values based on specific scenario configs +*** 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% /; @@ -250,16 +261,16 @@ fm_dataglob("inco0","csp") = 0.7 * fm_dataglob("inco0","csp"); fm_dataglob("incolearn","csp") = 0.7 * fm_dataglob("incolearn","csp"); -***--------------------------------------------------------------------------- -*** Regionalize investment cost data -***--------------------------------------------------------------------------- +*** -------------------------------------------------------------------------------- +*** Regionalize technology investment cost data +*** ------------------------------------------------------------------------------- *** initialize regionalized data using global data pm_data(all_regi,char,te) = fm_dataglob(char,te); -***--------------------------------------------------------------------------- +*** ------------------------------------------------------------------------------- *** Regional risk premium during building time -***--------------------------------------------------------------------------- +*** ------------------------------------------------------------------------------- *RP* calculate turnkey costs (which are the sum of the overnight costs in generisdata_tech and the "interest during construction” (IDC) ) @@ -278,16 +289,16 @@ $offdelim loop(te$(fm_dataglob("constrTme",te) > 0), p_tkpremused(regi,te) = 1/fm_dataglob("constrTme",te) * sum(integ$(integ.val <= fm_dataglob("constrTme",te)), -$if %cm_techcosts% == "REG" (1.03 + pm_prtp(regi) + p_risk_premium_constr(regi) ) ** (integ.val - 0.5) - 1 -$if %cm_techcosts% == "GLO" (1.03 + pm_prtp(regi) ) ** (integ.val - 0.5) - 1 +$if %cm_techcosts% == "REG" (1 + 0.02/pm_ies(regi) + pm_prtp(regi) + p_risk_premium_constr(regi) ) ** (integ.val - 0.5) - 1 +$if %cm_techcosts% == "GLO" (1 + 0.02/pm_ies(regi) + pm_prtp(regi) ) ** (integ.val - 0.5) - 1 ) ); *** 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) * sum(integ$(integ.val <= fm_dataglob("constrTme",te)), -$if %cm_techcosts% == "REG" (1.03 + 0.03 + pm_prtp(regi) + p_risk_premium_constr(regi) ) ** (integ.val - 0.5) - 1 -$if %cm_techcosts% == "GLO" (1.03 + 0.03 + pm_prtp(regi) ) ** (integ.val - 0.5) - 1 +$if %cm_techcosts% == "REG" (1 + 0.02/pm_ies(regi) + 0.03 + pm_prtp(regi) + p_risk_premium_constr(regi) ) ** (integ.val - 0.5) - 1 +$if %cm_techcosts% == "GLO" (1 + 0.02/pm_ies(regi) + 0.03 + pm_prtp(regi) ) ** (integ.val - 0.5) - 1 ) ); @@ -411,16 +422,14 @@ loop (teNoLearn(te)$( sameas(te,"igcc") ), ); $endif.REG_techcosts - *------------------------------------------------------------------------------------ -* END of Technology data input read-in and manipulation in core +* END of Technology cost data input read-in and manipulation in core *------------------------------------------------------------------------------------ *** 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 s_ccsinjecrate = 0.005 diff --git a/core/declarations.gms b/core/declarations.gms index fa5865364..d58c50f4b 100644 --- a/core/declarations.gms +++ b/core/declarations.gms @@ -417,9 +417,6 @@ v_shGasLiq_fe(ttot,all_regi,emi_sectors) "share of gases and liquids vm_emiCdrAll(ttot,all_regi) "all CDR emissions" -vm_FeedstocksCarbon(ttot,all_regi,all_enty,all_enty,all_emiMkt) "Carbon flow: carbon contained in chemical feedstocks [GtC]" -vm_plasticsCarbon(ttot,all_regi,all_enty,all_enty,all_emiMkt) "Carbon flow: carbon contained in plastics [GtC]" -vm_plasticWaste(ttot,all_regi,all_enty,all_enty,all_emiMkt) "Carbon flow: carbon contained in plastic waste [GtC]" vm_feedstockEmiUnknownFate(ttot,all_regi,all_enty,all_enty,all_emiMkt) "Carbon flow: carbon contained in feedstocks with unknown fate (not plastics)(assumed to go back into the atmosphere) [GtC]" vm_incinerationEmi(ttot,all_regi,all_enty,all_enty,all_emiMkt) "Emissions from incineration of plastic waste [GtC]" vm_nonIncineratedPlastics(ttot,all_regi,all_enty,all_enty,all_emiMkt) "Carbon flow: carbon contained in plastics that are not incinerated [GtC]" diff --git a/core/equations.gms b/core/equations.gms index 7b6b75f22..41f694a2c 100644 --- a/core/equations.gms +++ b/core/equations.gms @@ -57,7 +57,7 @@ q_costInvTeDir(t,regi,te).. =e= vm_costTeCapital(t,regi,te) * sum(te2rlf(te,rlf), vm_deltaCap(t,regi,te,rlf)) - * (1.02 + pm_prtp(regi) ) ** (pm_ts(t) / 2) !! This increases the investments as if the money was actually borrowed + * (1 + 0.02/pm_ies(regi) + pm_prtp(regi) ) ** (pm_ts(t) / 2) !! This increases the investments as if the money was actually borrowed !! half a time step earlier, using an interest rate of pm_prtp + 2%, which is close to the model-endogenous interest rate. !! We do this to reduce the difference to the previous version where the effect of deltacap on capacity was split !! half to the current and half to the next time. @@ -74,7 +74,7 @@ q_costInvTeAdj(t,regi,teAdj).. vm_costTeCapital(t,regi,teAdj) * ( (p_adj_coeff(t,regi,teAdj) * v_adjFactor(t,regi,teAdj)) + (p_adj_coeff_glob(teAdj) * v_adjFactorGlob(t,regi,teAdj)) ) - * (1.02 + pm_prtp(regi) ) ** (pm_ts(t) / 2) !! This increases the investments as if the money was actually borrowed + * (1 + 0.02/pm_ies(regi) + pm_prtp(regi) ) ** (pm_ts(t) / 2) !! This increases the investments as if the money was actually borrowed !! half a time step earlier, using an interest rate of pm_prtp + 2%, which is close to the model-endogenous interest rate. !! We do this to reduce the difference to the previous version where the effect of deltacap on capacity was split !! half to the current and half to the next time. diff --git a/core/postsolve.gms b/core/postsolve.gms index 5e0d05fdf..4629b012d 100644 --- a/core/postsolve.gms +++ b/core/postsolve.gms @@ -603,7 +603,7 @@ o_margAdjCostInv(ttot,regi,te)$(ttot.val ge max(2010, cm_startyear) AND teAdj(te + p_adj_deltacapoffset("2010",regi,te)$(ttot.val eq 2010) + p_adj_deltacapoffset("2015",regi,te)$(ttot.val eq 2015) + p_adj_deltacapoffset("2020",regi,te)$(ttot.val eq 2020) + p_adj_deltacapoffset("2025",regi,te)$(ttot.val eq 2025) ) - * (1.02 + pm_prtp(regi)) ** (pm_ts(ttot) / 2) + * (1 + 0.02/pm_ies(regi) + pm_prtp(regi)) ** (pm_ts(ttot) / 2) ; *** CG: calculate average adjustment cost for capacity investment: vm_costInvTeAdj / vm_deltaCap @@ -850,7 +850,7 @@ o_carbon_reemitted(ttot,regi,"co2")$(ttot.val ge 2005) = *CG**ML*: capital interest rate p_r(ttot,regi)$(ttot.val gt 2005 and ttot.val le 2130) - = (( (vm_cons.l(ttot+1,regi)/pm_pop(ttot+1,regi)) / + = 1 / pm_ies(regi) * (( (vm_cons.l(ttot+1,regi)/pm_pop(ttot+1,regi)) / (vm_cons.l(ttot-1,regi)/pm_pop(ttot-1,regi)) ) ** (1 / ( pm_ttot_val(ttot+1)- pm_ttot_val(ttot-1))) - 1) + pm_prtp(regi) ; diff --git a/main.gms b/main.gms index 70b83df10..ce13dc68e 100755 --- a/main.gms +++ b/main.gms @@ -658,7 +658,7 @@ parameter parameter cm_prtpScen "pure rate of time preference standard values" ; - cm_prtpScen = 3; !! def = 3 !! regexp = 1|3 + cm_prtpScen = 1; !! def = 1 !! regexp = 1|3 *' * (1): 1 % *' * (3): 3 % *' diff --git a/modules/05_initialCap/on/declarations.gms b/modules/05_initialCap/on/declarations.gms index 5c0453553..2118bcd46 100644 --- a/modules/05_initialCap/on/declarations.gms +++ b/modules/05_initialCap/on/declarations.gms @@ -28,6 +28,7 @@ Parameter $ifThen %cm_techcosts% == "GLO" p05_inco0_t_ref(ttot,all_regi,all_te) "auxiliary parameter to load pm_inco0_t from reference run if cm_startyear > 2005 and initialCap is therefore not run" $endIf + p05_pmdata_ref(all_regi,char,all_te) "auxiliary parameter to load pm_data from reference run if cm_startyear > 2005 and initialCap is therefore not run" ; Variables diff --git a/modules/05_initialCap/on/preloop.gms b/modules/05_initialCap/on/preloop.gms index 33c29c685..e58f5bb9e 100644 --- a/modules/05_initialCap/on/preloop.gms +++ b/modules/05_initialCap/on/preloop.gms @@ -532,12 +532,24 @@ if (cm_startyear gt 2005, Execute_Loadpoint 'input_ref' pm_EN_demand_from_initialcap2 = pm_EN_demand_from_initialcap2; Execute_Loadpoint 'input_ref' pm_pedem_res = pm_pedem_res; Execute_Loadpoint 'input_ref' pm_dataeta = pm_dataeta; - Execute_Loadpoint 'input_ref' pm_data = pm_data; Execute_Loadpoint 'input_ref' pm_aux_capLowerLimit = pm_aux_capLowerLimit; Execute_Loadpoint 'input_ref' vm_deltaCap.l = vm_deltaCap.l; Execute_Loadpoint 'input_ref' vm_deltaCap.lo = vm_deltaCap.lo; Execute_Loadpoint 'input_ref' vm_deltaCap.up = vm_deltaCap.up; + + +*** load pm_data from input_ref.gdx and overwrite values only for eta of chp technologies +*** Only the eta values of chp technologies have been adapted by initialCap script above. +*** This is to avoid overwriting all of pm_data and make sure that scenario switches which adapt pm_data before this module work as intended. + Execute_Loadpoint 'input_ref' p05_pmdata_ref = pm_data; + pm_data(regi,char,te)$( (sameas(te,"coalchp") + OR sameas(te,"gaschp") + OR sameas(te,"biochp") ) + AND sameas(char,"eta") ) = p05_pmdata_ref(regi,char,te); + + + *** if %cm_techcosts% == "GLO", load pm_inco0_t from input_ref.gdx and overwrite values *** only for pc, ngt, ngcc since they have been adapted in initialCap routine above *** This is to avoid overwriting changes to pm_inco0_t by scenario switches diff --git a/modules/23_capitalMarket/debt_limit/datainput.gms b/modules/23_capitalMarket/debt_limit/datainput.gms index 5ef32599c..2b3c8361c 100644 --- a/modules/23_capitalMarket/debt_limit/datainput.gms +++ b/modules/23_capitalMarket/debt_limit/datainput.gms @@ -6,7 +6,6 @@ *** | Contact: remind@pik-potsdam.de *** SOF ./modules/23_capitalMarket/debt_limit/datainput.gms -pm_ies(regi) = 1; pm_risk_premium(regi) = 0.0; p23_debt_growthCoeff(regi) = 0.2 ; diff --git a/modules/37_industry/fixed_shares/not_used.txt b/modules/37_industry/fixed_shares/not_used.txt index 3e71d8556..4157d5d7f 100644 --- a/modules/37_industry/fixed_shares/not_used.txt +++ b/modules/37_industry/fixed_shares/not_used.txt @@ -4,33 +4,33 @@ # | AGPL-3.0, you are granted additional permissions described in the # | REMIND License Exception, version 1.0 (see LICENSE file). # | Contact: remind@pik-potsdam.de -name,type,reason -pm_delta_kap, input, questionnaire -pm_calibrate_eff_scale, parameter, not needed -pm_fedemand, parameter, not needed -sm_TWa_2_MWh, input, questionnaire -sm_giga_2_non, input, not needed -sm_EJ_2_TWa, input, not needed -sm_tmp2, parameter, not needed -vm_cap, variable, not needed -vm_capFac, variable, not needed -pm_tau_ces_tax, input, questionnaire -pm_secBioShare, parameter, not needed -pm_exogDemScen, input, added by codeCheck -pm_ts, parameter, not needed -pm_outflowPrcIni, parameter, not needed -pm_specFeDem, parameter, not needed -sm_macChange, parameter, not needed -vm_demFENonEnergySector, variable, not needed -vm_FeedstocksCarbon, variable, not needed -vm_plasticsCarbon, variable, not needed -vm_plasticWaste, variable, not needed -vm_feedstockEmiUnknownFate, variable, not needed -vm_incinerationEmi, variable, not needed -vm_nonIncineratedPlastics, variable, not needed -vm_outflowPrc, variable, not needed -vm_costMatPrc, variable, not needed -pm_emifacNonEnergy, parameter, not needed -pm_incinerationRate, parameter, not needed -cm_emiscen, parameter, not needed -vm_demFeSector, variable, not needed +name, type, reason +pm_delta_kap, input, questionnaire +pm_calibrate_eff_scale, parameter, not needed +pm_fedemand, parameter, not needed +sm_TWa_2_MWh, input, questionnaire +sm_giga_2_non, input, not needed +sm_EJ_2_TWa, input, not needed +sm_tmp2, parameter, not needed +vm_cap, variable, not needed +vm_capFac, variable, not needed +pm_tau_ces_tax, input, questionnaire +pm_secBioShare, parameter, not needed +pm_exogDemScen, input, added by codeCheck +pm_ts, parameter, not needed +pm_outflowPrcIni, parameter, not needed +pm_specFeDem, parameter, not needed +sm_macChange, parameter, not needed +vm_demFENonEnergySector, variable, not needed +v37_FeedstocksCarbon, variable, not needed +v37_plasticsCarbon, variable, not needed +v37_plasticWaste, variable, not needed +vm_feedstockEmiUnknownFate, variable, not needed +vm_incinerationEmi, variable, not needed +vm_nonIncineratedPlastics, variable, not needed +vm_outflowPrc, variable, not needed +vm_costMatPrc, variable, not needed +pm_emifacNonEnergy, parameter, not needed +pm_incinerationRate, parameter, not needed +cm_emiscen, parameter, not needed +vm_demFeSector, variable, not needed diff --git a/modules/37_industry/subsectors/declarations.gms b/modules/37_industry/subsectors/declarations.gms index 6bfcf7fc6..552ae7631 100644 --- a/modules/37_industry/subsectors/declarations.gms +++ b/modules/37_industry/subsectors/declarations.gms @@ -73,6 +73,9 @@ Positive Variables vm_emiIndCCS(ttot,all_regi,all_enty) "industry CCS emissions [GtC/a]" vm_IndCCSCost(ttot,all_regi,all_enty) "industry CCS cost" v37_emiIndCCSmax(ttot,all_regi,emiInd37) "maximum abatable industry emissions" + v37_FeedstocksCarbon(ttot,all_regi,all_enty,all_enty,all_emiMkt) "Carbon flow: carbon contained in chemical feedstocks [GtC]" + v37_plasticsCarbon(ttot,all_regi,all_enty,all_enty,all_emiMkt) "Carbon flow: carbon contained in plastics [GtC]" + v37_plasticWaste(ttot,all_regi,all_enty,all_enty,all_emiMkt) "Carbon flow: carbon contained in plastic waste [GtC]" !! process-based implementation vm_outflowPrc(tall,all_regi,all_te,opmoPrc) "Production volume of processes in process-based model [Gt/a]" @@ -104,6 +107,7 @@ $endif.no_calibration q37_nonIncineratedPlastics(ttot,all_regi,all_enty,all_enty,all_emiMkt) "calculate carbon contained in plastics that are not incinerated [GtC]" q37_feedstockEmiUnknownFate(ttot,all_regi,all_enty,all_enty,all_emiMkt) "calculate carbon contained in chemical feedstock with unknown fate [GtC]" q37_feedstocksLimit(ttot,all_regi,all_enty,all_enty,all_emiMkt) "restrict feedstocks flow to total energy flows into industry" + q37_feedstocksShares(ttot,all_regi,all_enty,all_enty,all_emiMkt) "identical fossil/biomass/synfuel shares for FE and feedstocks" !! process-based implementation q37_demMatPrc(tall,all_regi,mat) "Material demand of processes" diff --git a/modules/37_industry/subsectors/equations.gms b/modules/37_industry/subsectors/equations.gms index efab8e809..4f4061718 100644 --- a/modules/37_industry/subsectors/equations.gms +++ b/modules/37_industry/subsectors/equations.gms @@ -13,17 +13,16 @@ ***------------------------------------------------------ *' Industry final energy balance ***------------------------------------------------------ -q37_demFeIndst(ttot,regi,entyFe,emiMkt)$( ttot.val ge cm_startyear - AND entyFe2Sector(entyFe,"indst") ) .. +q37_demFeIndst(t,regi,entyFe,emiMkt)$( entyFe2Sector(entyFe,"indst") ) .. sum(se2fe(entySe,entyFe,te), - vm_demFeSector_afterTax(ttot,regi,entySe,entyFe,"indst",emiMkt) + vm_demFeSector_afterTax(t,regi,entySe,entyFe,"indst",emiMkt) ) =e= sum(fe2ppfEn(entyFe,ppfen_industry_dyn37(in)), sum((secInd37_emiMkt(secInd37,emiMkt),secInd37_2_pf(secInd37,in)), ( - vm_cesIO(ttot,regi,in) - + pm_cesdata(ttot,regi,in,"offset_quantity") + vm_cesIO(t,regi,in) + + pm_cesdata(t,regi,in,"offset_quantity") )$(NOT secInd37Prc(secInd37)) ) ) @@ -31,9 +30,9 @@ q37_demFeIndst(ttot,regi,entyFe,emiMkt)$( ttot.val ge cm_startyear sum((secInd37_emiMkt(secInd37Prc,emiMkt), secInd37_tePrc(secInd37Prc,tePrc), tePrc2opmoPrc(tePrc,opmoPrc)), - pm_specFeDem(ttot,regi,entyFe,tePrc,opmoPrc) + pm_specFeDem(t,regi,entyFe,tePrc,opmoPrc) * - vm_outflowPrc(ttot,regi,tePrc,opmoPrc) + vm_outflowPrc(t,regi,tePrc,opmoPrc) ) ; @@ -41,39 +40,37 @@ q37_demFeIndst(ttot,regi,entyFe,emiMkt)$( ttot.val ge cm_startyear *' Thermodynamic limits on subsector energy demand ***------------------------------------------------------ $ifthen.no_calibration "%CES_parameters%" == "load" !! CES_parameters -q37_energy_limits(ttot,regi,industry_ue_calibration_target_dyn37(out))$( - ttot.val gt 2020 - AND NOT ppfUePrc(out) - AND p37_energy_limit_slope(ttot,regi,out) ) .. - sum(ces_eff_target_dyn37(out,in), vm_cesIO(ttot,regi,in)) +q37_energy_limits(t,regi,industry_ue_calibration_target_dyn37(out))$( + t.val gt 2020 + AND NOT ppfUePrc(out) + AND p37_energy_limit_slope(t,regi,out) ) .. + sum(ces_eff_target_dyn37(out,in), vm_cesIO(t,regi,in)) =g= - vm_cesIO(ttot,regi,out) - * p37_energy_limit_slope(ttot,regi,out) + vm_cesIO(t,regi,out) + * p37_energy_limit_slope(t,regi,out) ; $endif.no_calibration ***------------------------------------------------------ *' Limit the share of secondary steel to historic values, fading to 90 % in 2050 ***------------------------------------------------------ -q37_limit_secondary_steel_share(ttot,regi)$( - ttot.val ge cm_startyear - +q37_limit_secondary_steel_share(t,regi)$( + YES $ifthen.fixed_production "%cm_import_EU%" == "bal" !! cm_import_EU !! do not limit steel production shares for fixed production - AND p37_industry_quantity_targets(ttot,regi,"ue_steel_secondary") eq 0 + AND p37_industry_quantity_targets(t,regi,"ue_steel_secondary") eq 0 $endif.fixed_production $ifthen.exogDem_scen NOT "%cm_exogDem_scen%" == "off" !! do not limit steel production shares for fixed production - AND pm_exogDemScen(ttot,regi,"%cm_exogDem_scen%","ue_steel_secondary") eq 0 + AND pm_exogDemScen(t,regi,"%cm_exogDem_scen%","ue_steel_secondary") eq 0 $endif.exogDem_scen - ) .. - vm_cesIO(ttot,regi,"ue_steel_secondary") + vm_cesIO(t,regi,"ue_steel_secondary") =l= - ( vm_cesIO(ttot,regi,"ue_steel_primary") - + vm_cesIO(ttot,regi,"ue_steel_secondary") + ( vm_cesIO(t,regi,"ue_steel_primary") + + vm_cesIO(t,regi,"ue_steel_secondary") ) - * p37_steel_secondary_max_share(ttot,regi) + * p37_steel_secondary_max_share(t,regi) ; ***------------------------------------------------------ @@ -82,23 +79,23 @@ $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(ttot,regi,entyFe,secInd37)$( ttot.val ge cm_startyear ) .. - vm_emiIndBase(ttot,regi,entyFe,secInd37) +q37_emiIndBase(t,regi,entyFe,secInd37) .. + vm_emiIndBase(t,regi,entyFe,secInd37) =e= sum((secInd37_2_pf(secInd37,ppfen_industry_dyn37(in)),fe2ppfEn(entyFeCC37(entyFe),in)), - ( vm_cesIO(ttot,regi,in) - - ( p37_chemicals_feedstock_share(ttot,regi) - * vm_cesIO(ttot,regi,in) + ( vm_cesIO(t,regi,in) + - ( p37_chemicals_feedstock_share(t,regi) + * vm_cesIO(t,regi,in) )$( in_chemicals_feedstock_37(in) ) ) * sum(se2fe(entySeFos,entyFe,te), - pm_emifac(ttot,regi,entySeFos,entyFe,te,"co2") + pm_emifac(t,regi,entySeFos,entyFe,te,"co2") ) )$(NOT secInd37Prc(secInd37)) + sum((secInd37_tePrc(secInd37,tePrc),tePrc2opmoPrc(tePrc,opmoPrc)), - v37_emiPrc(ttot,regi,entyFe,tePrc,opmoPrc) + v37_emiPrc(t,regi,entyFe,tePrc,opmoPrc) )$(secInd37Prc(secInd37)) ; @@ -106,8 +103,9 @@ q37_emiIndBase(ttot,regi,entyFe,secInd37)$( ttot.val ge cm_startyear ) .. *' Compute maximum possible CCS level in industry sub-sectors given the current *' CO2 price. ***------------------------------------------------------ -q37_emiIndCCSmax(ttot,regi,emiInd37)$( ttot.val ge cm_startyear AND NOT sum(secInd37Prc,secInd37_2_emiInd37(secInd37Prc,emiInd37)) ) .. - v37_emiIndCCSmax(ttot,regi,emiInd37) +q37_emiIndCCSmax(t,regi,emiInd37)$( + NOT sum(secInd37Prc,secInd37_2_emiInd37(secInd37Prc,emiInd37)) ) .. + v37_emiIndCCSmax(t,regi,emiInd37) =e= !! map sub-sector emissions to sub-sector MACs !! otherInd has no CCS, therefore no MAC, cement has both fuel and process @@ -116,29 +114,30 @@ q37_emiIndCCSmax(ttot,regi,emiInd37)$( ttot.val ge cm_startyear AND NOT sum(secI !! add cement process emissions, which are calculated in core/preloop !! from a econometric fit and might not correspond to energy use (FIXME) ( sum((secInd37_2_emiInd37(secInd37,emiInd37),entyFe), - vm_emiIndBase(ttot,regi,entyFe,secInd37) + vm_emiIndBase(t,regi,entyFe,secInd37) )$( NOT sameas(emiInd37,"co2cement_process") ) - + ( vm_emiIndBase(ttot,regi,"co2cement_process","cement") + + ( vm_emiIndBase(t,regi,"co2cement_process","cement") )$( sameas(emiInd37,"co2cement_process") ) ) * pm_macSwitch(macInd37) !! sub-sector CCS available or not - * pm_macAbatLev(ttot,regi,macInd37) !! abatement level at current price + * pm_macAbatLev(t,regi,macInd37) !! abatement level at current price ) ; ***------------------------------------------------------ *' Limit industry CCS to maximum possible CCS level. ***------------------------------------------------------ -q37_IndCCS(ttot,regi,emiInd37)$( ttot.val ge cm_startyear AND NOT sum(secInd37Prc,secInd37_2_emiInd37(secInd37Prc,emiInd37)) ) .. - vm_emiIndCCS(ttot,regi,emiInd37) +q37_IndCCS(t,regi,emiInd37)$( + NOT sum(secInd37Prc,secInd37_2_emiInd37(secInd37Prc,emiInd37)) ) .. + vm_emiIndCCS(t,regi,emiInd37) =l= - v37_emiIndCCSmax(ttot,regi,emiInd37) + v37_emiIndCCSmax(t,regi,emiInd37) ; ***------------------------------------------------------ *' Limit industry CCS scale-up to sm_macChange (default: 5 % p.a.) ***------------------------------------------------------ -q37_limit_IndCCS_growth(ttot,regi,emiInd37) .. +q37_limit_IndCCS_growth(ttot,regi,emiInd37)$( ttot.val ge cm_startyear ) .. vm_emiIndCCS(ttot,regi,emiInd37) =l= vm_emiIndCCS(ttot-1,regi,emiInd37) @@ -152,39 +151,39 @@ q37_limit_IndCCS_growth(ttot,regi,emiInd37) .. ***------------------------------------------------------ *' Fix cement fuel and cement process emissions to the same abatement level. ***------------------------------------------------------ -q37_cementCCS(ttot,regi)$( ttot.val ge cm_startyear - AND pm_macSwitch("co2cement") - AND pm_macAbatLev(ttot,regi,"co2cement") ) .. - vm_emiIndCCS(ttot,regi,"co2cement") - * v37_emiIndCCSmax(ttot,regi,"co2cement_process") +q37_cementCCS(t,regi)$( pm_macSwitch("co2cement") + AND pm_macAbatLev(t,regi,"co2cement") ) .. + vm_emiIndCCS(t,regi,"co2cement") + * v37_emiIndCCSmax(t,regi,"co2cement_process") =e= - vm_emiIndCCS(ttot,regi,"co2cement_process") - * v37_emiIndCCSmax(ttot,regi,"co2cement") + vm_emiIndCCS(t,regi,"co2cement_process") + * v37_emiIndCCSmax(t,regi,"co2cement") ; ***------------------------------------------------------ *' Calculate industry CCS costs. ***------------------------------------------------------ -q37_IndCCSCost(ttot,regi,emiInd37)$( ttot.val ge cm_startyear AND NOT sum(secInd37Prc,secInd37_2_emiInd37(secInd37Prc,emiInd37)) ) .. - vm_IndCCSCost(ttot,regi,emiInd37) +q37_IndCCSCost(t,regi,emiInd37)$( + NOT sum(secInd37Prc,secInd37_2_emiInd37(secInd37Prc,emiInd37)) ) .. + vm_IndCCSCost(t,regi,emiInd37) =e= 1e-3 * pm_macSwitch(emiInd37) * ( sum((enty,secInd37_2_emiInd37(secInd37,emiInd37)), - vm_emiIndBase(ttot,regi,enty,secInd37) + vm_emiIndBase(t,regi,enty,secInd37) )$( NOT sameas(emiInd37,"co2cement_process") ) - + ( vm_emiIndBase(ttot,regi,"co2cement_process","cement") + + ( vm_emiIndBase(t,regi,"co2cement_process","cement") )$( sameas(emiInd37,"co2cement_process") ) ) * sm_dmac * sum(emiMac2mac(emiInd37,enty), - ( pm_macStep(ttot,regi,enty) - * sum(steps$( ord(steps) eq pm_macStep(ttot,regi,enty) ), - pm_macAbat(ttot,regi,enty,steps) + ( pm_macStep(t,regi,enty) + * sum(steps$( ord(steps) eq pm_macStep(t,regi,enty) ), + pm_macAbat(t,regi,enty,steps) ) ) - - sum(steps$( ord(steps) le pm_macStep(ttot,regi,enty) ), - pm_macAbat(ttot,regi,enty,steps) + - sum(steps$( ord(steps) le pm_macStep(t,regi,enty) ), + pm_macAbat(t,regi,enty,steps) ) ) ; @@ -205,7 +204,7 @@ q37_costCESmarkup(t,regi,in)$(ppfen_industry_dyn37(in)).. ***-------------------------------------------------------------------------- *' Lower bound on feso/feli/fega in chemicals FE input for feedstocks -q37_chemicals_feedstocks_limit(t,regi)$( t.val ge cm_startyear ) .. +q37_chemicals_feedstocks_limit(t,regi) .. sum(in_chemicals_feedstock_37(in), vm_cesIO(t,regi,in)) =g= sum(ces_eff_target_dyn37("ue_chemicals",in), vm_cesIO(t,regi,in)) @@ -213,50 +212,63 @@ q37_chemicals_feedstocks_limit(t,regi)$( t.val ge cm_startyear ) .. ; *' Define the flow of non-energy feedstocks. It is used for emissions accounting and calculating plastics production -q37_demFeFeedstockChemIndst(ttot,regi,entyFe,emiMkt)$( - ttot.val ge cm_startyear - AND entyFE2sector2emiMkt_NonEn(entyFe,"indst",emiMkt) ) .. +q37_demFeFeedstockChemIndst(t,regi,entyFe,emiMkt)$( + entyFE2sector2emiMkt_NonEn(entyFe,"indst",emiMkt) ) .. sum(se2fe(entySe,entyFe,te), - vm_demFENonEnergySector(ttot,regi,entySe,entyFe,"indst",emiMkt) + vm_demFENonEnergySector(t,regi,entySe,entyFe,"indst",emiMkt) ) =e= sum((fe2ppfEn(entyFe,ppfen_industry_dyn37(in)), secInd37_emiMkt(secInd37,emiMkt), secInd37_2_pf(secInd37,in_chemicals_feedstock_37(in))), - ( vm_cesIO(ttot,regi,in) - + pm_cesdata(ttot,regi,in,"offset_quantity") + ( vm_cesIO(t,regi,in) + + pm_cesdata(t,regi,in,"offset_quantity") ) - * p37_chemicals_feedstock_share(ttot,regi) + * p37_chemicals_feedstock_share(t,regi) ) ; *' Feedstocks flow has to be lower than total energy flow into the industry -q37_feedstocksLimit(ttot,regi,entySe,entyFe,emiMkt)$( - ttot.val ge cm_startyear - AND sefe(entySe,entyFe) +q37_feedstocksLimit(t,regi,entySe,entyFe,emiMkt)$( + sefe(entySe,entyFe) AND sector2emiMkt("indst",emiMkt) AND entyFe2Sector(entyFe,"indst") AND entyFeCC37(entyFe) ) .. - vm_demFeSector(ttot,regi,entySe,entyFe,"indst",emiMkt) + vm_demFeSector(t,regi,entySe,entyFe,"indst",emiMkt) =g= - vm_demFENonEnergySector(ttot,regi,entySe,entyFe,"indst",emiMkt) + vm_demFENonEnergySector(t,regi,entySe,entyFe,"indst",emiMkt) ; +*' Feedstocks have identical fossil/biomass/synfuel shares as industry FE +q37_feedstocksShares(t,regi,entySE,entyFE,emiMkt)$( + sum(te, se2fe(entySE,entyFE,te)) ) .. + vm_demFEsector_afterTax(t,regi,entySE,entyFE,"indst",emiMkt) + * sum(se2fe(entySE2,entyFE,te), + vm_demFENonEnergySector(t,regi,entySE2,entyFE,"indst",emiMkt) + ) + =e= + vm_demFENonEnergySector(t,regi,entySE,entyFE,"indst",emiMkt) + * sum(se2fe2(entySE2,entyFE,te), + vm_demFEsector_afterTax(t,regi,entySE2,entyFE,"indst",emiMkt) + ) +; + + *' Calculate mass of carbon contained in chemical feedstocks -q37_FeedstocksCarbon(ttot,regi,sefe(entySe,entyFe),emiMkt)$( +q37_FeedstocksCarbon(t,regi,sefe(entySe,entyFe),emiMkt)$( entyFE2sector2emiMkt_NonEn(entyFe,"indst",emiMkt) ) .. - vm_FeedstocksCarbon(ttot,regi,entySe,entyFe,emiMkt) + v37_FeedstocksCarbon(t,regi,entySe,entyFe,emiMkt) =e= - vm_demFENonEnergySector(ttot,regi,entySe,entyFe,"indst",emiMkt) - * p37_FeedstockCarbonContent(ttot,regi,entyFe) + vm_demFENonEnergySector(t,regi,entySe,entyFe,"indst",emiMkt) + * p37_FeedstockCarbonContent(t,regi,entyFe) ; *' Calculate carbon contained in plastics as a share of carbon in feedstock [GtC] -q37_plasticsCarbon(ttot,regi,sefe(entySe,entyFe),emiMkt)$( +q37_plasticsCarbon(t,regi,sefe(entySe,entyFe),emiMkt)$( entyFE2sector2emiMkt_NonEn(entyFe,"indst",emiMkt) ) .. - vm_plasticsCarbon(ttot,regi,entySe,entyFe,emiMkt) + v37_plasticsCarbon(t,regi,entySe,entyFe,emiMkt) =e= - vm_FeedstocksCarbon(ttot,regi,entySe,entyFe,emiMkt) + v37_FeedstocksCarbon(t,regi,entySe,entyFe,emiMkt) * s37_plasticsShare ; @@ -264,50 +276,46 @@ q37_plasticsCarbon(ttot,regi,sefe(entySe,entyFe),emiMkt)$( *' shift by 2 time steps when we have 5-year steps and 1 when we have 10-year steps *' allocate averge of 2055 and 2060 to 2070 q37_plasticWaste(ttot,regi,sefe(entySe,entyFe),emiMkt)$( - entyFE2sector2emiMkt_NonEn(entyFe,"indst",emiMkt) - AND ttot.val ge cm_startyear ) .. - vm_plasticWaste(ttot,regi,entySe,entyFe,emiMkt) + entyFE2sector2emiMkt_NonEn(entyFe,"indst",emiMkt) + AND ttot.val ge max(2015, cm_startyear) ) .. + v37_plasticWaste(ttot,regi,entySe,entyFe,emiMkt) =e= - vm_plasticsCarbon(ttot-2,regi,entySe,entyFe,emiMkt)$( ttot.val le 2060 ) - + ( ( vm_plasticsCarbon(ttot-2,regi,entySe,entyFe,emiMkt) - + vm_plasticsCarbon(ttot-1,regi,entySe,entyFe,emiMkt) + v37_plasticsCarbon(ttot-2,regi,entySe,entyFe,emiMkt)$( ttot.val lt 2070 ) + + ( ( v37_plasticsCarbon(ttot-2,regi,entySe,entyFe,emiMkt) + + v37_plasticsCarbon(ttot-1,regi,entySe,entyFe,emiMkt) ) / 2 )$( ttot.val eq 2070 ) - + vm_plasticsCarbon(ttot-1,regi,entySe,entyFe,emiMkt)$( ttot.val gt 2070 ) + + v37_plasticsCarbon(ttot-1,regi,entySe,entyFe,emiMkt)$( ttot.val gt 2070 ) ; -*' plastic waste in the past is not accounted for -vm_plasticWaste.fx(ttot,regi,sefe(entySe,entyFe),emiMkt)$( ttot.val lt 2005 ) = 0 ; -vm_plasticsCarbon.fx(ttot,regi,sefe(entySe,entyFe),emiMkt)$( ttot.val lt 2005 ) = 0 ; - *' emissions from plastics incineration as a share of total plastic waste -q37_incinerationEmi(ttot,regi,sefe(entySe,entyFe),emiMkt)$( +q37_incinerationEmi(t,regi,sefe(entySe,entyFe),emiMkt)$( entyFE2sector2emiMkt_NonEn(entyFe,"indst",emiMkt)) .. - vm_incinerationEmi(ttot,regi,entySe,entyFe,emiMkt) + vm_incinerationEmi(t,regi,entySe,entyFe,emiMkt) =e= - vm_plasticWaste(ttot,regi,entySe,entyFe,emiMkt) - * pm_incinerationRate(ttot,regi) + v37_plasticWaste(t,regi,entySe,entyFe,emiMkt) + * pm_incinerationRate(t,regi) ; *' calculate carbon contained in non-incinerated plastics *' this is used in emissions accounting to subtract the carbon that gets *' sequestered in plastic products -q37_nonIncineratedPlastics(ttot,regi,sefe(entySe,entyFe),emiMkt)$( +q37_nonIncineratedPlastics(t,regi,sefe(entySe,entyFe),emiMkt)$( entyFE2sector2emiMkt_NonEn(entyFe,"indst",emiMkt) ) .. - vm_nonIncineratedPlastics(ttot,regi,entySe,entyFe,emiMkt) + vm_nonIncineratedPlastics(t,regi,entySe,entyFe,emiMkt) =e= - vm_plasticWaste(ttot,regi,entySe,entyFe,emiMkt) - * (1 - pm_incinerationRate(ttot,regi)) + v37_plasticWaste(t,regi,entySe,entyFe,emiMkt) + * (1 - pm_incinerationRate(t,regi)) ; *' calculate flow of carbon contained in chemical feedstock with unknown fate *' it is assumed that this carbon is re-emitted in the same timestep -q37_feedstockEmiUnknownFate(ttot,regi,sefe(entySe,entyFe),emiMkt)$( +q37_feedstockEmiUnknownFate(t,regi,sefe(entySe,entyFe),emiMkt)$( entyFE2sector2emiMkt_NonEn(entyFe,"indst",emiMkt) ) .. - vm_feedstockEmiUnknownFate(ttot,regi,entySe,entyFe,emiMkt) + vm_feedstockEmiUnknownFate(t,regi,entySe,entyFe,emiMkt) =e= - vm_FeedstocksCarbon(ttot,regi,entySe,entyFe,emiMkt) + v37_FeedstocksCarbon(t,regi,entySe,entyFe,emiMkt) * (1 - s37_plasticsShare) ; @@ -330,103 +338,105 @@ q37_FossilFeedstock_Base(t,regi,entyFe,emiMkt)$( ***------------------------------------------------------ *' Material input to production ***------------------------------------------------------ -q37_demMatPrc(ttot,regi,mat)$((ttot.val ge cm_startyear) AND matIn(mat)).. - v37_matFlow(ttot,regi,mat) +q37_demMatPrc(t,regi,mat)$( matIn(mat) ) .. + v37_matFlow(t,regi,mat) =e= sum(tePrc2matIn(tePrc,opmoPrc,mat), p37_specMatDem(mat,tePrc,opmoPrc) * - vm_outflowPrc(ttot,regi,tePrc,opmoPrc) + vm_outflowPrc(t,regi,tePrc,opmoPrc) ) ; ***------------------------------------------------------ *' Material cost ***------------------------------------------------------ -q37_costMat(ttot,regi)$(ttot.val ge cm_startyear).. - vm_costMatPrc(ttot,regi) +q37_costMat(t,regi) .. + vm_costMatPrc(t,regi) =e= sum(mat, p37_priceMat(mat) * - v37_matFlow(ttot,regi,mat)) + v37_matFlow(t,regi,mat)) ; ***------------------------------------------------------ *' Output material production ***------------------------------------------------------ -q37_prodMat(ttot,regi,mat)$((ttot.val ge cm_startyear) AND matOut(mat)).. - v37_matFlow(ttot,regi,mat) +q37_prodMat(t,regi,mat)$( matOut(mat) ) .. + v37_matFlow(t,regi,mat) =e= sum(tePrc2matOut(tePrc,opmoPrc,mat), - vm_outflowPrc(ttot,regi,tePrc,opmoPrc) + vm_outflowPrc(t,regi,tePrc,opmoPrc) ) ; ***------------------------------------------------------ *' Hand-over to CES ***------------------------------------------------------ -q37_mat2ue(ttot,regi,all_in)$((ttot.val ge cm_startyear) AND ppfUePrc(all_in)).. - vm_cesIO(ttot,regi,all_in) +q37_mat2ue(t,regi,all_in)$( ppfUePrc(all_in) ) .. + vm_cesIO(t,regi,all_in) =e= sum(mat2ue(mat,all_in), p37_mat2ue(mat,all_in) * - v37_matFlow(ttot,regi,mat) + v37_matFlow(t,regi,mat) ) ; ***------------------------------------------------------ *' Definition of capacity constraints ***------------------------------------------------------ -q37_limitCapMat(ttot,regi,tePrc)$(ttot.val ge cm_startyear) .. +q37_limitCapMat(t,regi,tePrc) .. sum(tePrc2opmoPrc(tePrc,opmoPrc), - vm_outflowPrc(ttot,regi,tePrc,opmoPrc) + vm_outflowPrc(t,regi,tePrc,opmoPrc) ) =l= sum(teMat2rlf(tePrc,rlf), - vm_capFac(ttot,regi,tePrc) * vm_cap(ttot,regi,tePrc,rlf) + vm_capFac(t,regi,tePrc) + * vm_cap(t,regi,tePrc,rlf) ) ; ***------------------------------------------------------ *' Emission from process based industry sector (pre CC) ***------------------------------------------------------ -q37_emiPrc(ttot,regi,entyFe,tePrc,opmoPrc)$(ttot.val ge cm_startyear ) .. - v37_emiPrc(ttot,regi,entyFe,tePrc,opmoPrc) +q37_emiPrc(t,regi,entyFe,tePrc,opmoPrc) .. + v37_emiPrc(t,regi,entyFe,tePrc,opmoPrc) =e= - pm_specFeDem(ttot,regi,entyFe,tePrc,opmoPrc) + pm_specFeDem(t,regi,entyFe,tePrc,opmoPrc) * sum(se2fe(entySeFos,entyFe,te), - pm_emifac(ttot,regi,entySeFos,entyFe,te,"co2")) + pm_emifac(t,regi,entySeFos,entyFe,te,"co2")) * - vm_outflowPrc(ttot,regi,tePrc,opmoPrc) + vm_outflowPrc(t,regi,tePrc,opmoPrc) ; ***------------------------------------------------------ *' Carbon capture processes can only capture as much co2 as the base process emits ***------------------------------------------------------ -q37_limitOutflowCCPrc(ttot,regi,tePrc)$(ttot.val ge cm_startyear ) .. +q37_limitOutflowCCPrc(t,regi,tePrc) .. sum((entyFe,tePrc2opmoPrc(tePrc,opmoPrc)), - v37_emiPrc(ttot,regi,entyFe,tePrc,opmoPrc)) + v37_emiPrc(t,regi,entyFe,tePrc,opmoPrc)) =g= sum(tePrc2teCCPrc(tePrc,opmoPrc,teCCPrc,opmoCCPrc), 1. / p37_captureRate(teCCPrc,opmoCCPrc) * - vm_outflowPrc(ttot,regi,teCCPrc,opmoCCPrc) + vm_outflowPrc(t,regi,teCCPrc,opmoCCPrc) ) ; ***------------------------------------------------------ *' Emission captured from process based industry sector ***------------------------------------------------------ -q37_emiCCPrc(ttot,regi,emiInd37)$((ttot.val ge cm_startyear ) AND sum(secInd37Prc,secInd37_2_emiInd37(secInd37Prc,emiInd37)) ) .. - vm_emiIndCCS(ttot,regi,emiInd37) +q37_emiCCPrc(t,regi,emiInd37)$( + sum(secInd37Prc,secInd37_2_emiInd37(secInd37Prc,emiInd37)) ) .. + vm_emiIndCCS(t,regi,emiInd37) =e= sum((secInd37_2_emiInd37(secInd37Prc,emiInd37), secInd37_tePrc(secInd37Prc,tePrc), tePrc2teCCPrc(tePrc,opmoPrc,teCCPrc,opmoCCPrc)), - vm_outflowPrc(ttot,regi,teCCPrc,opmoCCPrc) + vm_outflowPrc(t,regi,teCCPrc,opmoCCPrc) ) ; diff --git a/output.R b/output.R index b8030a4c4..946901025 100755 --- a/output.R +++ b/output.R @@ -67,7 +67,8 @@ library(lucode2) library(gms) require(stringr, quietly = TRUE) -source("scripts/start/isSlurmAvailable.R") +# Import all functions from the scripts/start folder +invisible(sapply(list.files("scripts/start", pattern = "\\.R$", full.names = TRUE), source)) flags <- NULL ### Define arguments that can be read from command line @@ -83,7 +84,7 @@ if ("--help" %in% flags) { q() } -choose_slurmConfig_output <- function(slurmExceptions = NULL) { +choose_slurmConfig_output <- function(output) { slurm_options <- c("--qos=priority", "--qos=short", "--qos=standby", "--qos=priority --mem=16000", "--qos=short --mem=16000", "--qos=standby --mem=16000", "--qos=priority --mem=32000") @@ -91,9 +92,11 @@ choose_slurmConfig_output <- function(slurmExceptions = NULL) { if (!isSlurmAvailable()) return("direct") - if (!is.null(slurmExceptions)) { - slurm_options <- grep(slurmExceptions, slurm_options, value = TRUE) - } + # Modify slurm options for ar6 reporting, since we want to run MAGICC in parallel and we'll need a lot of memory + if ("ar6Climate" %in% output) slurm_options <- paste(slurm_options[1:3], "--tasks-per-node=12 --mem=32000") + # reporting.R, in particular remind2::convGDX2MIF, requires at least --mem=8000 of memory + if ("reporting" %in% output) slurm_options <- grep("--mem=[0-9]*[0-9]{3}", slurm_options, value = TRUE) + if (length(slurm_options) == 1) { return(slurm_options[[1]]) } @@ -176,7 +179,7 @@ if (comp %in% c("comparison", "export")) { # choose the slurm options. If you use command line arguments, use slurmConfig=priority or standby modules_using_slurmConfig <- c("compareScenarios2") if (!exists("slurmConfig") && any(modules_using_slurmConfig %in% output)) { - slurmConfig <- choose_slurmConfig_output() + slurmConfig <- choose_slurmConfig_output(output = output) } if (exists("slurmConfig")) { if (slurmConfig %in% c("priority", "short", "standby")) { @@ -207,11 +210,9 @@ if (comp %in% c("comparison", "export")) { } } } else { # comp = single - # define slurm class or direct execution + # define slurm class or direct execution outputInteractive <- c("plotIterations", "fixOnRef", "integratedDamageCosts") if (! exists("source_include")) { - # for selected output scripts, only slurm configurations matching these regex are available - slurmExceptions <- if ("reporting" %in% output) "--mem=[0-9]*[0-9]{3}" else NULL if (any(output %in% outputInteractive)) { slurmConfig <- "direct" flags <- c(flags, "--interactive") # to tell scripts they can run in interactive mode @@ -219,8 +220,8 @@ if (comp %in% c("comparison", "export")) { # if this script is not being sourced by another script but called from the command line via Rscript let the user # choose the slurm options if (!exists("slurmConfig")) { - slurmConfig <- choose_slurmConfig_output(slurmExceptions = slurmExceptions) - if (slurmConfig != "direct") slurmConfig <- paste(slurmConfig, "--nodes=1 --tasks-per-node=1") + slurmConfig <- choose_slurmConfig_output(output = output) + if (slurmConfig != "direct") slurmConfig <- combine_slurmConfig("--nodes=1 --tasks-per-node=1", slurmConfig) } if (slurmConfig %in% c("priority", "short", "standby")) { slurmConfig <- paste0("--qos=", slurmConfig, " --nodes=1 --tasks-per-node=1") diff --git a/scripts/output/export/xlsx_IIASA.R b/scripts/output/export/xlsx_IIASA.R index 485ba5c87..c7a612b83 100644 --- a/scripts/output/export/xlsx_IIASA.R +++ b/scripts/output/export/xlsx_IIASA.R @@ -67,7 +67,7 @@ lucode2::readArgs("outputdirs", "filename_prefix", "outputFilename", "model", if (is.null(mapping)) { mapping <- gms::chooseFromList(names(piamInterfaces::templateNames()), type = "mapping template") } -if (length(mapping) == 0 || ! all(file.exists(mapping) | mapping %in% names(templateNames()))) +if (length(mapping) == 0 || ! all(file.exists(mapping) | mapping %in% names(templateNames()))) { stop("mapping='", paste(mapping, collapse = ", "), "' not found.") } if (exists("iiasatemplate") && ! is.null(iiasatemplate) && ! file.exists(iiasatemplate)) { diff --git a/scripts/output/single/ar6Climate.R b/scripts/output/single/ar6Climate.R new file mode 100644 index 000000000..ad1ddd5d9 --- /dev/null +++ b/scripts/output/single/ar6Climate.R @@ -0,0 +1,232 @@ +# | (C) 2006-2023 Potsdam Institute for Climate Impact Research (PIK) +# | authors, and contributors see CITATION.cff file. This file is part +# | of REMIND and licensed under AGPL-3.0-or-later. Under Section 7 of +# | AGPL-3.0, you are granted additional permissions described in the +# | REMIND License Exception, version 1.0 (see LICENSE file). +# | Contact: remind@pik-potsdam.de + +#' @title AR6 climate assessment +#' @description Assessment of new emissions pathways consistent with the climate variable data from the working group +#' III contribution to the IPCC Sixth Assessment (AR6) report. The script uses REMIND emissions data to perform +#' harmonization and infilling based on the IIASA [climate-assessment](https://climate-assessment.readthedocs.io) +#' package. The harmonized and infilled emissions are then used as input to the +#' [MAGICC7 simple climate model](https://magicc.org/). Results are postprocessed and appended to the REMIND model +#' intercomparison file (MIF). +#' +#' @author Gabriel Abrahao, Oliver Richters, Tonn Rüter +#' +#' @param outputdir Directory where REMIND MIF file is located. Output files generated in the process will be written +#' to a subfolder "climate-assessment-data" in this directory. Defaults to "." +#' @param gdxName Name of the REMIND GDX file. Defaults to "fulldata.gdx" + +library(madrat) +library(remind2) +library(quitte) +library(piamInterfaces) +library(lucode2) +library(yaml) +library(tidyverse) +library(readr) +library(stringr) + +############################# BASIC CONFIGURATION ############################# + +gdxName <- "fulldata.gdx" # name of the gdx +cfgName <- "cfg.txt" # cfg file for getting file paths + +if (!exists("source_include")) { + # Define arguments that can be read from command line + outputdir <- "." + readArgs("outputdir", "gdxName", "gdx_ref_name", "gdx_refpolicycost_name") +} + +cfgPath <- file.path(outputdir, cfgName) +logFile <- file.path(outputdir, "log_climate.txt") # specific log for python steps +scenario <- getScenNames(outputdir) +remindReportingFile <- file.path(outputdir, paste0("REMIND_generic_", scenario, ".mif")) +climateAssessmentEmi <- normalizePath(file.path(outputdir, paste0("ar6_climate_assessment_", scenario, ".csv")), + mustWork = FALSE) +climateAssessmentYaml <- file.path(system.file(package = "piamInterfaces"), + "iiasaTemplates", "climate_assessment_variables.yaml") + +############################# PREPARING EMISSIONS INPUT ############################# + +logmsg <- paste0( + date(), " =================== CONFIGURATION STARTED ==================================\n", + " outputdir = '", outputdir, "' exists? ", file.exists(outputdir), "\n", + " cfgPath = '", cfgPath, "' exists? ", file.exists(cfgPath), "\n", + " logFile = '", logFile, "' exists? ", file.exists(logFile), "\n", + " scenario = '", scenario, "'\n", + " remindReportingFile = '", remindReportingFile, "' exists? ", file.exists(remindReportingFile), "\n", + " climateAssessmentYaml = '", climateAssessmentYaml, "' exists? ", file.exists(climateAssessmentYaml), "\n", + " climateAssessmentEmi = '", climateAssessmentEmi, "' exists? ", file.exists(climateAssessmentEmi), "\n", + date(), " =================== EXTRACT REMIND emission data ===========================\n", + " ar6Climate.R: Extracting REMIND emission data\n" +) +cat(logmsg) +capture.output(cat(logmsg), file = logFile, append = TRUE) + +climateAssessmentInputData <- as.quitte(remindReportingFile) %>% + # Consider only the global region + filter(region %in% c("GLO", "World")) %>% + # Extract only the variables needed for climate-assessment. These are provided from the iiasaTemplates in the + # piamInterfaces package. See also: + # https://github.com/pik-piam/piamInterfaces/blob/master/inst/iiasaTemplates/climate_assessment_variables.yaml + generateIIASASubmission( + mapping = "AR6", + outputFilename = NULL, + iiasatemplate = climateAssessmentYaml, + logFile = logFile + ) %>% + mutate(region = factor("World")) %>% + # Rename the columns using str_to_title which capitalizes the first letter of each word + rename_with(str_to_title) %>% + # Transforms the yearly values for each variable from a long to a wide format. The resulting data frame then has + # one column for each year and one row for each variable + pivot_wider(names_from = "Period", values_from = "Value") %>% + write_csv(climateAssessmentEmi, quote = "none") + +logmsg <- paste0( + date(), " ar6Climate.R: Wrote REMIND emission data to '", climateAssessmentEmi, "' for climate-assessment\n" +) +cat(logmsg) +capture.output(cat(logmsg), file = logFile, append = TRUE) + +############################# PYTHON/MAGICC SETUP ############################# + +# Read the cfg to get the location of MAGICC-related files +cfg <- read_yaml(cfgPath) + +if (is.null(cfg$climate_assessment_root)) cfg$climate_assessment_root <- "/p/projects/rd3mod/python/climate-assessment/src/" +if (is.null(cfg$climate_assessment_files_dir)) cfg$climate_assessment_files_dir <- "/p/projects/rd3mod/climate-assessment-files/" +if (is.null(cfg$cfg$climate_assessment_magicc_bin)) cfg$climate_assessment_magicc_bin <- "/p/projects/rd3mod/climate-assessment-files/magicc-v7.5.3/bin/magicc" + +# All climate-assessment files will be written to this folder +climateAssessmentFolder <- normalizePath(file.path(outputdir, "climate-assessment-data")) +dir.create(climateAssessmentFolder, showWarnings = FALSE) + +# The base name, that climate-assessment uses to derive it's output names +baseFileName <- sub("\\.csv$", "", basename(climateAssessmentEmi)) + +# These files are supposed to be all inside cfg$climate_assessment_files_dir in a certain structure +probabilisticFile <- normalizePath(file.path( + cfg$climate_assessment_files_dir, + "parsets", "0fd0f62-derived-metrics-id-f023edb-drawnset.json" +)) +infillingDatabaseFile <- normalizePath(file.path( + cfg$climate_assessment_files_dir, + "1652361598937-ar6_emissions_vetted_infillerdatabase_10.5281-zenodo.6390768.csv" +)) + +# Extract the location of the climate-assessment scripts and the MAGICC binary from cfg.txt +scriptsFolder <- normalizePath(file.path(cfg$climate_assessment_root, "scripts")) +magiccBinFile <- normalizePath(file.path(cfg$climate_assessment_magicc_bin)) +magiccWorkersFolder <- file.path(normalizePath(climateAssessmentFolder), "workers") + +# Read parameter sets file to ascertain how many parsets there are +allparsets <- read_yaml(probabilisticFile) +nparsets <- length(allparsets$configurations) + +logmsg <- paste0(date(), " =================== SET UP climate-assessment scripts environment ===================\n") +cat(logmsg) +capture.output(cat(logmsg), file = logFile, append = TRUE) + +# Create working folder for climate-assessment files +dir.create(magiccWorkersFolder, recursive = TRUE, showWarnings = FALSE) + +# Set relevant environment variables and create a MAGICC worker directory +Sys.setenv(MAGICC_EXECUTABLE_7 = magiccBinFile) +Sys.setenv(MAGICC_WORKER_ROOT_DIR = magiccWorkersFolder) # Has to be an absolute path +Sys.setenv(MAGICC_WORKER_NUMBER = 1) # TODO: Get this from slurm or nproc + +# Specify the commands to (de-)activate the venv & run the harmonization/infilling/model scripts +# TODO: This makes assumptions about the users climate-assessment installation. There are a couple of options: +# A) Remove entirely and assume that the user has set up their environment correctly +# B) Make this more flexible by explictly setting them in default.cfg +#activate_venv_cmd <- paste("source", normalizePath(file.path(cfg$climate_assessment_root, "..", "venv", "bin", "activate"))) +#deactivate_venv_cmd <- "deactivate" + +run_harm_inf_cmd <- paste( + "python", file.path(scriptsFolder, "run_harm_inf.py"), + climateAssessmentEmi, + climateAssessmentFolder, + "--no-inputcheck", + "--infilling-database", infillingDatabaseFile +) + +run_clim_cmd <- paste( + "python", file.path(scriptsFolder, "run_clim.py"), + normalizePath(file.path(climateAssessmentFolder, paste0(baseFileName, "_harmonized_infilled.csv"))), + climateAssessmentFolder, + "--num-cfgs", nparsets, + "--scenario-batch-size", 1, + "--probabilistic-file", probabilisticFile +) + +logmsg <- paste0( + " climateAssessmentFolder = '", climateAssessmentFolder, "' exists? ", dir.exists(climateAssessmentFolder), "\n", + " baseFileName = '", baseFileName, "'\n", + " probabilisticFile = '", probabilisticFile, "' exists? ", file.exists(probabilisticFile), "\n", + " infillingDatabaseFile = '", infillingDatabaseFile, "' exists? ", file.exists(infillingDatabaseFile), "\n", + " scriptsFolder = '", scriptsFolder, "' exists? ", dir.exists(scriptsFolder), "\n", + " magiccBinFile = '", magiccBinFile, "' exists? ", file.exists(magiccBinFile), "\n", + " magiccWorkersFolder = '", magiccWorkersFolder, "' exists? ", dir.exists(magiccWorkersFolder), "\n\n", + " ENVIRONMENT VARIABLES:\n", + " MAGICC_EXECUTABLE_7 = ", Sys.getenv("MAGICC_EXECUTABLE_7") ,"\n", + " MAGICC_WORKER_ROOT_DIR = ", Sys.getenv("MAGICC_WORKER_ROOT_DIR") ,"\n", + " MAGICC_WORKER_NUMBER = ", Sys.getenv("MAGICC_WORKER_NUMBER") ,"\n", + date(), " =================== RUN climate-assessment infilling & harmonization ===================\n", + run_harm_inf_cmd, "'\n" +) +cat(logmsg) +capture.output(cat(logmsg), file = logFile, append = TRUE) + +############################# HARMONIZATION/INFILLING ############################# + +system(run_harm_inf_cmd) + +logmsg <- paste0(date(), " Done with harmonization & infilling\n") +cat(logmsg) +capture.output(cat(logmsg), file = logFile, append = TRUE) + +############################# RUNNING MODEL ############################# + +logmsg <- paste0( + date(), " Found ", nparsets, " nparsets, start climate-assessment model runs\n", run_harm_inf_cmd, "\n", + date(), " =================== RUN climate-assessment model ============================\n", + run_clim_cmd, "'\n" +) +cat(logmsg) +capture.output(cat(logmsg), file = logFile, append = TRUE) + +system(run_clim_cmd) + +############################# POSTPROCESS CLIMATE OUTPUT ############################# +climateAssessmentOutput <- file.path( + climateAssessmentFolder, + paste0(baseFileName, "_harmonized_infilled_IAMC_climateassessment.xlsx") +) + +logmsg <- paste0( + date(), " climate-assessment finished\n", + date(), " =================== POSTPROCESS climate-assessment output ==================\n", + " climateAssessmentOutput = '", climateAssessmentOutput, "'\n" +) +cat(logmsg) +capture.output(cat(logmsg), file = logFile, append = TRUE) + +############################# APPEND TO REMIND MIF ############################# +# Filter only periods used in REMIND, so that it doesn't expand the original mif +usePeriods <- as.numeric(grep("[0-9]+", quitte::read_mif_header(remindReportingFile)$header, value = TRUE)) + +climateAssessmentData <- read.quitte(climateAssessmentOutput) %>% + filter(period %in% usePeriods) %>% + interpolate_missing_periods(usePeriods, expand.values = FALSE) %>% + write.mif(remindReportingFile, append = TRUE) + +logmsg <- paste0( + date(), " postprocessing done! Results appended to REMIND mif '", remindReportingFile, "'\n", + "ar6Climate.R finished\n" +) +cat(logmsg) +capture.output(cat(logmsg), file = logFile, append = TRUE) diff --git a/scripts/output/single/reporting.R b/scripts/output/single/reporting.R index dc2b42b80..6bf35f01e 100644 --- a/scripts/output/single/reporting.R +++ b/scripts/output/single/reporting.R @@ -50,11 +50,8 @@ load(configfile, envir = envir) # produce REMIND reporting *.mif based on gdx information message("\n### start generation of mif files at ", Sys.time()) -tmp <- try(convGDX2MIF(gdx, gdx_refpolicycost = gdx_refpolicycost, file = remind_reporting_file, - scenario = scenario, gdx_ref = gdx_ref)) # try to execute convGDX2MIF -if (inherits(tmp, "try-error")) { - convGDX2MIF_REMIND2MAgPIE(gdx, file = remind_reporting_file, scenario = scenario) -} +convGDX2MIF(gdx, gdx_refpolicycost = gdx_refpolicycost, file = remind_reporting_file, + scenario = scenario, gdx_ref = gdx_ref) # MAGICC code not working with REMIND-EU # generate MAGICC reporting and append to REMIND reporting @@ -122,11 +119,9 @@ if (! is.null(magpie_reporting_file) && file.exists(magpie_reporting_file)) { message("### end generation of mif files at ", Sys.time()) ## produce REMIND LCOE reporting *.csv based on gdx information -if (! isTRUE(envir$cfg$gms$c_empty_model == "on") || ! grepl("^C_TESTTHAT", scenario)) { - message("### start generation of LCOE reporting at ", Sys.time()) - tmp <- try(convGDX2CSV_LCOE(gdx,file=LCOE_reporting_file,scen=scenario)) # execute convGDX2MIF_LCOE - message("### end generation of LCOE reporting at ", Sys.time()) -} +message("### start generation of LCOE reporting at ", Sys.time()) +tmp <- try(convGDX2CSV_LCOE(gdx,file=LCOE_reporting_file,scen=scenario)) # execute convGDX2MIF_LCOE +message("### end generation of LCOE reporting at ", Sys.time()) ## generate DIETER reporting if it is needed ## the reporting is appended to REMIND_generic_.MIF in "DIETER" Sub Directory diff --git a/scripts/output/single/reportingREMIND2MAgPIE.R b/scripts/output/single/reportingREMIND2MAgPIE.R index 9fc92e542..48171e701 100644 --- a/scripts/output/single/reportingREMIND2MAgPIE.R +++ b/scripts/output/single/reportingREMIND2MAgPIE.R @@ -21,36 +21,35 @@ if(!exists("source_include")) { gdx <- file.path(outputdir,gdx_name) scenario <- getScenNames(outputdir) + +configfile <- file.path(outputdir, "config.Rdata") +envir <- new.env() +load(configfile, envir = envir) + ############################################################################### # paths of the reporting files remind_reporting_file <- file.path(outputdir,paste0("REMIND_generic_",scenario,".mif")) # produce REMIND reporting *.mif based on gdx information +message("\n### start generation of mif files at ", Sys.time()) convGDX2MIF_REMIND2MAgPIE(gdx, file = remind_reporting_file, scenario = scenario) -# create common REMIND-MAgPIE reporting by sticking individual REMIND and MAgPIE reporting mifs together -configfile <- file.path(outputdir, "config.Rdata") -envir <- new.env() -load(configfile, envir = envir) magpie_reporting_file <- envir$cfg$pathToMagpieReport if (! is.null(magpie_reporting_file) && file.exists(magpie_reporting_file)) { message("add MAgPIE reporting from ", magpie_reporting_file) - tmp_rem <- read.report(remind_reporting_file, as.list=FALSE) - tmp_mag <- read.report(magpie_reporting_file, as.list=FALSE)[, getYears(tmp_rem), ] + tmp_rem <- quitte::as.quitte(remind_reporting_file) + tmp_mag <- dplyr::filter(quitte::as.quitte(magpie_reporting_file), .data$period %in% unique(tmp_rem$period)) # remove population from magpie reporting to avoid duplication (units "million" vs. "million people") - tmp_mag <- tmp_mag[, , "Population (million people)", invert = TRUE] - # harmonize scenario name from -mag-xx to -rem-xx - getNames(tmp_mag, dim = 1) <- paste0(scenario) - tmp_rem_mag <- mbind(tmp_rem, tmp_mag) - # extract variable names without units for both models - remind_variables <- magclass::unitsplit(getNames(tmp_rem_mag[, , "REMIND"], dim = 3))$variable - magpie_variables <- magclass::unitsplit(getNames(tmp_rem_mag[, , "MAgPIE"], dim = 3))$variable - if (any(remind_variables %in% magpie_variables)) { - message("Cannot produce common REMIND-MAgPIE reporting because there are identical variable names in both models!") - } else { - write.report(tmp_rem_mag, file = remind_reporting_file, ndigit = 7) - deletePlus(remind_reporting_file, writemif = TRUE) + sharedvariables <- intersect(tmp_mag$variable, tmp_rem$variable) + if (length(sharedvariables) > 0) { + message("The following variables will be dropped from MAgPIE reporting because they are in REMIND reporting: ", paste(sharedvariables, collapse = ", ")) + tmp_mag <- dplyr::filter(tmp_mag, ! .data$variable %in% sharedvariables) } + # harmonize scenario name from -mag-xx to -rem-xx + tmp_mag$scenario <- paste0(scenario) + tmp_rem_mag <- rbind(tmp_rem, tmp_mag) + quitte::write.mif(tmp_rem_mag, path = remind_reporting_file) + deletePlus(remind_reporting_file, writemif = TRUE) } message("### end generation of mif files at ", Sys.time()) diff --git a/start_bundle_coupled.R b/start_bundle_coupled.R index 347ddccbe..7a1294350 100755 --- a/start_bundle_coupled.R +++ b/start_bundle_coupled.R @@ -124,16 +124,13 @@ NC <- "\033[0m" # No Color # define arguments that are accepted (test for backward compatibility) startgroup <- "1" -flags <- lucode2::readArgs("startgroup", .flags = c(h = "--help", g = "--gamscompile", i = "--interactive", p = "--parallel", t = "--test")) +flags <- lucode2::readArgs("startgroup", .flags = c(h = "--help", g = "--gamscompile", i = "--interactive", t = "--test")) if (! exists("argv")) argv <- commandArgs(trailingOnly = TRUE) if ("--help" %in% flags) { message(helpText) q() } if ("test" %in% argv) flags <- unique(c(flags, "--test")) -if ("--parallel" %in% flags) { - message("The flag --parallel is not necessary anymore, as this is default now") -} # load arguments from command line argv <- grep('(^-|=|^test$)', argv, value = TRUE, invert = TRUE) @@ -155,7 +152,8 @@ if (length(argv) > 0) { message("") } -if (! file.exists("output")) dir.create("output") +dir.create(file.path(path_remind, "output"), showWarnings = FALSE) +dir.create(file.path(path_magpie, "output"), showWarnings = FALSE) ensureRequirementsInstalled(rerunPrompt = "start_bundle_coupled.R") @@ -554,7 +552,7 @@ for(scen in common){ errorsfound <- errorsfound + cfg_rem$errorsfoundInCheckFixCfg } - if (! "--test" %in% flags) { + if (! any(c("--test", "--gamscompile")) %in% flags) { Rdatafile <- paste0(fullrunname, ".RData") message("Save settings to ", Rdatafile) save(path_remind, path_magpie, cfg_rem, cfg_mag, runname, fullrunname, max_iterations, start_iter, diff --git a/start_coupled.R b/start_coupled.R index 879ed5f8c..b4be48fc9 100644 --- a/start_coupled.R +++ b/start_coupled.R @@ -74,7 +74,7 @@ start_coupled <- function(path_remind, path_magpie, cfg_rem, cfg_mag, runname, m # Switch off generation of needless output for all but the last REMIND iteration if (i < max_iterations) { - cfg_rem$output <- intersect(c("reporting", "emulator", "rds_report", "reportingREMIND2MAgPIE"), cfg_rem_original) + cfg_rem$output <- intersect(cfg_rem_original, c("reporting", "reportingREMIND2MAgPIE", "emulator", "rds_report")) } else { cfg_rem$output <- cfg_rem_original } diff --git a/tests/testthat/test_04-gamscompile.R b/tests/testthat/test_04-gamscompile.R index f1b206fd8..f36ff5b1d 100644 --- a/tests/testthat/test_04-gamscompile.R +++ b/tests/testthat/test_04-gamscompile.R @@ -30,9 +30,6 @@ test_that("start.R --gamscompile works on all configs and scenarios", { file.path("../../config", "*", "scenario_config*.csv"))) } csvfiles <- normalizePath(grep("^scenario_config_coupled.*", csvfiles, invert = TRUE, value = TRUE)) - skipfiles <- c("scenario_config_tradeCap_standalone", - "scenario_config_GCS") - csvfiles <- grep(paste(skipfiles, collapse = "|"), csvfiles, invert = TRUE, value = TRUE) expect_true(length(csvfiles) > 0) testthat::with_mocked_bindings( for (csvfile in csvfiles) { diff --git a/tests/testthat/test_20-coupled.R b/tests/testthat/test_20-coupled.R index dacd93c72..21c8e6713 100644 --- a/tests/testthat/test_20-coupled.R +++ b/tests/testthat/test_20-coupled.R @@ -40,7 +40,7 @@ test_that("environment is suitable for coupled tests", { test_that("using start_bundle_coupled.R --gamscompile works", { skipIfPreviousFailed() # try compiling - output <- localSystem2("Rscript", c("start_bundle_coupled.R", "--gamscompile", coupledConfig), + output <- localSystem2("Rscript", c("start_bundle_coupled.R", "--gamscompile", coupledConfig, "startgroup=1"), env = paste0("R_PROFILE_USER=", Rprofile)) printIfFailed(output) expectSuccessStatus(output) @@ -59,7 +59,7 @@ test_that("using start_bundle_coupled.R --gamscompile works", { test_that("using start_bundle_coupled.R --test works", { skipIfPreviousFailed() # just test the settings and RData files are written - output <- localSystem2("Rscript", c("start_bundle_coupled.R", "--test", coupledConfig), + output <- localSystem2("Rscript", c("start_bundle_coupled.R", "--test", coupledConfig, "startgroup=1"), env = paste0("R_PROFILE_USER=", Rprofile)) printIfFailed(output) expectSuccessStatus(output) @@ -67,7 +67,25 @@ test_that("using start_bundle_coupled.R --test works", { expect_true(any(grepl("NOT submitted", output))) for (scen in rownames(config)[config$start == 1]) { expect_true(any(grepl(paste0("starting with C_", scen, "-rem-1"), output))) - expectedFiles <- paste0("../../C_", scen, "-rem-", seq(max_iterations), ".RData") + } +}) + +test_that("runs coupled to MAgPIE work", { + skipIfPreviousFailed() + # try running actual runs + output <- localSystem2("Rscript", c("start_bundle_coupled.R", coupledConfig, "startgroup=1"), + env = paste0("R_PROFILE_USER=", Rprofile)) + printIfFailed(output) + expectSuccessStatus(output) + expect_true(xor("Copied REMIND .Rprofile to MAgPIE folder." %in% output, + any(grepl("^Finding R package dependencies.*Done.", output)))) + for (scen in rownames(config)[config$start == 1]) { + expectedFiles <- c( + paste0("../../output/C_", scen, "-rem-", seq(max_iterations)), + paste0("../../output/C_", scen, ".mif"), + paste0("../../C_", scen, "-rem-", seq(max_iterations), ".RData"), + file.path(magpie_folder, paste0("output/C_", scen, "-mag-", seq(max_iterations - 1))) + ) expect_true(all(file.exists(expectedFiles))) # check -rem-1 config file configfile <- paste0("../../C_", scen, "-rem-1.RData") @@ -92,28 +110,6 @@ test_that("using start_bundle_coupled.R --test works", { if ("cm_nash_autoconverge_lastrun" %in% names(config)) { expect_true(envir$cfg_rem$gms$cm_nash_autoconverge == config[scen, "cm_nash_autoconverge_lastrun"]) } - # no_ghgprices_land_until, oldrun, path_report - } -}) - -test_that("runs coupled to MAgPIE work", { - skipIfPreviousFailed() - # try running actual runs - output <- localSystem2("Rscript", c("start_bundle_coupled.R", coupledConfig), - env = paste0("R_PROFILE_USER=", Rprofile)) - printIfFailed(output) - expectSuccessStatus(output) - expect_true(xor("Copied REMIND .Rprofile to MAgPIE folder." %in% output, - any(grepl("^Finding R package dependencies.*Done.", output)))) - for (scen in rownames(config)[config$start == 1]) { - expectedFiles <- c( - paste0("../../output/C_", scen, "-rem-", seq(max_iterations)), - # paste0("../../output/C_", scen, "-", max_iterations, ".pdf"), - paste0("../../output/C_", scen, ".mif"), - paste0("../../C_", scen, "-rem-", seq(max_iterations), ".RData"), - file.path(magpie_folder, paste0("output/C_", scen, "-mag-", seq(max_iterations - 1))) - ) - expect_true(all(file.exists(expectedFiles))) # check path_mif_ghgprice_land if ("path_mif_ghgprice_land" %in% names(config)[config$start == 1]) { configfile <- paste0("../../C_", scen, "-rem-", (max_iterations - 1), ".RData") @@ -138,13 +134,12 @@ test_that("runs coupled to MAgPIE work", { expect_true(any(grepl("^REMIND", levels(qscen$model)))) expect_false(any(grepl("^MAgPIE", levels(qscen$model)))) lengthwithoutmag <- nrow(qscen) - expect_true(lengthwithoutmag > 700000) + expect_true(lengthwithoutmag > 600000) qscen <- quitte::as.quitte(paste0("../../output/C_", scen, "-rem-", max_iterations, "/REMIND_generic_C_", scen, "-rem-", max_iterations, ".mif")) expect_true(any(grepl("^REMIND", levels(qscen$model)))) expect_true(any(grepl("^MAgPIE", levels(qscen$model)))) lengthwithmag <- nrow(qscen) - expect_true(lengthwithmag > 850000 && lengthwithmag > lengthwithoutmag) - qscen <- quitte::as.quitte(paste0("../../output/C_", scen, "-rem-1/REMIND_generic_C_", scen, "-rem-1.mif")) + expect_true(lengthwithmag > lengthwithoutmag && lengthwithmag > 700000) # check main mif qscen <- quitte::as.quitte(paste0("../../output/C_", scen, ".mif")) expect_true(all(grepl("^REMIND-MAgPIE", levels(qscen$model)))) @@ -156,7 +151,7 @@ test_that("runs coupled to MAgPIE work", { test_that("don't run again if completed", { skipIfPreviousFailed() # do not delete anything to simulate re-running already completed run - output <- localSystem2("Rscript", c("start_bundle_coupled.R", coupledConfig), + output <- localSystem2("Rscript", c("start_bundle_coupled.R", coupledConfig, "startgroup=1"), env = paste0("R_PROFILE_USER=", Rprofile)) printIfFailed(output) writeLines(output, "C_TESTTHAT_startlog_1.txt") @@ -175,7 +170,7 @@ test_that("delete last REMIND run to simulate re-starting aborted run", { paste0("../../output/C_", scen, ".mif") ) expect_true(0 == unlink(filestodelete, recursive = TRUE)) - output <- localSystem2("Rscript", c("start_bundle_coupled.R", coupledConfig), + output <- localSystem2("Rscript", c("start_bundle_coupled.R", coupledConfig, "startgroup=1"), env = paste0("R_PROFILE_USER=", Rprofile)) writeLines(output, "C_TESTTHAT_startlog_2.txt") printIfFailed(output) @@ -186,7 +181,7 @@ test_that("delete last REMIND run to simulate re-starting aborted run", { # delete the last MAgPIE, but not the last REMIND scenario and expect fail filestodelete <- file.path(magpie_folder, "output", paste0("C_", scen, "-mag-", (max_iterations - 1))) expect_true(0 == unlink(filestodelete, recursive = TRUE)) - output <- localSystem2("Rscript", c("start_bundle_coupled.R", coupledConfig), + output <- localSystem2("Rscript", c("start_bundle_coupled.R", coupledConfig, "startgroup=1"), env = paste0("R_PROFILE_USER=", Rprofile)) writeLines(output, "C_TESTTHAT_startlog_3.txt") expectFailStatus(output) @@ -200,7 +195,7 @@ test_that("delete last REMIND run to simulate re-starting aborted run", { paste0("../../output/C_", scen, ".mif") ) expect_true(0 == unlink(filestodelete, recursive = TRUE)) - output <- localSystem2("Rscript", c("start_bundle_coupled.R", coupledConfig), + output <- localSystem2("Rscript", c("start_bundle_coupled.R", coupledConfig, "startgroup=1"), env = paste0("R_PROFILE_USER=", Rprofile)) printIfFailed(output) writeLines(output, "C_TESTTHAT_startlog_4.txt") @@ -212,7 +207,7 @@ test_that("delete last REMIND run to simulate re-starting aborted run", { # delete all REMIND, but not MAgPIE, and expect fail filestodelete <- paste0("../../output/C_", scen, "-rem-", seq(max_iterations)) expect_true(0 == unlink(filestodelete, recursive = TRUE)) - output <- localSystem2("Rscript", c("start_bundle_coupled.R", coupledConfig), + output <- localSystem2("Rscript", c("start_bundle_coupled.R", coupledConfig, "startgroup=1"), env = paste0("R_PROFILE_USER=", Rprofile)) writeLines(output, "C_TESTTHAT_startlog_5.txt") expectFailStatus(output)