diff --git a/config/config.default.yaml b/config/config.default.yaml index d1d13065..373f4a6c 100644 --- a/config/config.default.yaml +++ b/config/config.default.yaml @@ -716,7 +716,7 @@ industry: MWh_CH4_per_tMeOH: 10.25 MWh_MeOH_per_tMeOH: 5.528 hotmaps_locate_missing: false - reference_year: 2015 + reference_year: 2021 # docs in https://pypsa-eur.readthedocs.io/en/latest/configuration.html#costs diff --git a/rules/build_sector.smk b/rules/build_sector.smk index 866f6962..cd259d39 100644 --- a/rules/build_sector.smk +++ b/rules/build_sector.smk @@ -509,7 +509,7 @@ rule build_industrial_production_per_country: countries=config_provider("countries"), input: ammonia_production=resources("ammonia_production.csv"), - jrc="data/bundle/jrc-idees-2015", + jrc="data/bundle/jrc-idees-2021", eurostat="data/eurostat/Balances-April2023", output: industrial_production_per_country=resources( @@ -656,7 +656,7 @@ rule build_industrial_energy_demand_per_country_today: countries=config_provider("countries"), industry=config_provider("industry"), input: - jrc="data/bundle/jrc-idees-2015", + jrc="data/bundle/jrc-idees-2021", industrial_production_per_country=resources( "industrial_production_per_country.csv" ), diff --git a/scripts/build_industrial_energy_demand_per_country_today.py b/scripts/build_industrial_energy_demand_per_country_today.py index b77ba8d6..114485e7 100644 --- a/scripts/build_industrial_energy_demand_per_country_today.py +++ b/scripts/build_industrial_energy_demand_per_country_today.py @@ -8,7 +8,7 @@ Build industrial energy demand per country. Inputs ------- -- ``data/bundle/jrc-idees-2015`` +- ``data/bundle/jrc-idees-2021`` - ``industrial_production_per_country.csv`` Outputs @@ -120,7 +120,7 @@ jrc_names = {"GR": "EL", "GB": "UK"} def industrial_energy_demand_per_country(country, year, jrc_dir): jrc_country = jrc_names.get(country, country) - fn = f"{jrc_dir}/JRC-IDEES-2015_EnergyBalance_{jrc_country}.xlsx" + fn = f"{jrc_dir}/{jrc_country}/JRC-IDEES-2021_EnergyBalance_{jrc_country}.xlsx" sheets = list(sector_sheets.values()) df_dict = pd.read_excel(fn, sheet_name=sheets, index_col=0) diff --git a/scripts/build_industrial_production_per_country.py b/scripts/build_industrial_production_per_country.py index ec86a78d..1bb75271 100644 --- a/scripts/build_industrial_production_per_country.py +++ b/scripts/build_industrial_production_per_country.py @@ -16,7 +16,7 @@ Relevant Settings Inputs ------- - ``resources/ammonia_production.csv`` -- ``data/bundle-sector/jrc-idees-2015`` +- ``data/bundle-sector/jrc-idees-2021`` - ``data/eurostat`` Outputs @@ -50,11 +50,11 @@ The following subcategories [kton/a] are considered: - Aluminium - primary production - Aluminium - secondary production - Other non-ferrous metals -- Transport Equipment -- Machinery Equipment +- Transport equipment +- Machinery equipment - Textiles and leather - Wood and wood products -- Other Industrial Sectors +- Other industrial sectors - Ammonia - HVC - Chlorine @@ -79,25 +79,25 @@ ktoe_to_twh = 0.01163 sub_sheet_name_dict = { "Iron and steel": "ISI", - "Chemicals Industry": "CHI", + "Chemical industry": "CHI", "Non-metallic mineral products": "NMM", "Pulp, paper and printing": "PPA", "Food, beverages and tobacco": "FBT", "Non Ferrous Metals": "NFM", - "Transport Equipment": "TRE", - "Machinery Equipment": "MAE", + "Transport equipment": "TRE", + "Machinery equipment": "MAE", "Textiles and leather": "TEL", "Wood and wood products": "WWP", - "Other Industrial Sectors": "OIS", + "Other industrial sectors": "OIS", } -eu28 = cc.EU28as("ISO2").ISO2.values +eu27 = cc.EU27as("ISO2").ISO2.values jrc_names = {"GR": "EL", "GB": "UK"} sect2sub = { "Iron and steel": ["Electric arc", "Integrated steelworks"], - "Chemicals Industry": [ + "Chemical industry": [ "Basic chemicals", "Other chemicals", "Pharmaceutical products etc.", @@ -119,11 +119,11 @@ sect2sub = { "Aluminium - secondary production", "Other non-ferrous metals", ], - "Transport Equipment": ["Transport Equipment"], - "Machinery Equipment": ["Machinery Equipment"], + "Transport equipment": ["Transport equipment"], + "Machinery equipment": ["Machinery equipment"], "Textiles and leather": ["Textiles and leather"], "Wood and wood products": ["Wood and wood products"], - "Other Industrial Sectors": ["Other Industrial Sectors"], + "Other industrial sectors": ["Other industrial sectors"], } sub2sect = {v: k for k, vv in sect2sub.items() for v in vv} @@ -145,27 +145,29 @@ fields = { "Aluminium - primary production": "Aluminium - primary production", "Aluminium - secondary production": "Aluminium - secondary production", "Other non-ferrous metals": "Other non-ferrous metals (kt lead eq.)", - "Transport Equipment": "Physical output (index)", - "Machinery Equipment": "Physical output (index)", + "Transport equipment": "Physical output (index)", + "Machinery equipment": "Physical output (index)", "Textiles and leather": "Physical output (index)", "Wood and wood products": "Physical output (index)", - "Other Industrial Sectors": "Physical output (index)", + "Other industrial sectors": "Physical output (index)", } eb_sectors = { "Iron & steel": "Iron and steel", - "Chemical & petrochemical": "Chemicals Industry", + "Chemical & petrochemical": "Chemical industry", "Non-ferrous metals": "Non-metallic mineral products", "Paper, pulp & printing": "Pulp, paper and printing", "Food, beverages & tobacco": "Food, beverages and tobacco", "Non-metallic minerals": "Non Ferrous Metals", - "Transport equipment": "Transport Equipment", - "Machinery": "Machinery Equipment", + "Transport equipment": "Transport equipment", + "Machinery": "Machinery equipment", "Textile & leather": "Textiles and leather", "Wood & wood products": "Wood and wood products", - "Not elsewhere specified (industry)": "Other Industrial Sectors", + "Not elsewhere specified (industry)": "Other industrial sectors", } + + # TODO: this should go in a csv in `data` # Annual energy consumption in Switzerland by sector in 2015 (in TJ) # From: Energieverbrauch in der Industrie und im Dienstleistungssektor, Der Bundesrat @@ -173,16 +175,16 @@ eb_sectors = { e_switzerland = pd.Series( { "Iron and steel": 7889.0, - "Chemicals Industry": 26871.0, + "Chemical industry": 26871.0, "Non-metallic mineral products": 15513.0 + 3820.0, "Pulp, paper and printing": 12004.0, "Food, beverages and tobacco": 17728.0, "Non Ferrous Metals": 3037.0, - "Transport Equipment": 14993.0, - "Machinery Equipment": 4724.0, + "Transport equipment": 14993.0, + "Machinery equipment": 4724.0, "Textiles and leather": 1742.0, "Wood and wood products": 0.0, - "Other Industrial Sectors": 10825.0, + "Other industrial sectors": 10825.0, "current electricity": 53760.0, } ) @@ -199,8 +201,12 @@ def get_energy_ratio(country, eurostat_dir, jrc_dir, year): if country == "CH": e_country = e_switzerland * tj_to_ktoe else: + ct_eurostat = country.replace("GB","UK") + if ct_eurostat == "UK": + year=2019 + logger.info("Assume Eurostat data for GB from 2019.") # estimate physical output, energy consumption in the sector and country - fn = f"{eurostat_dir}/{country}-Energy-balance-sheets-April-2023-edition.xlsb" + fn = f"{eurostat_dir}/{ct_eurostat}-Energy-balance-sheets-April-2023-edition.xlsb" df = pd.read_excel( fn, sheet_name=str(min(2021, year)), @@ -210,19 +216,19 @@ def get_energy_ratio(country, eurostat_dir, jrc_dir, year): ) e_country = df.loc[eb_sectors.keys(), "Total"].rename(eb_sectors) - fn = f"{jrc_dir}/JRC-IDEES-2015_Industry_EU28.xlsx" + fn = f"{jrc_dir}/EU27/JRC-IDEES-2021_Industry_EU27.xlsx" with mute_print(): df = pd.read_excel(fn, sheet_name="Ind_Summary", index_col=0, header=0).squeeze( "columns" ) - assert df.index[48] == "by sector" + assert df.index[49] == "by sector" year_i = df.columns.get_loc(year) - e_eu28 = df.iloc[49:76, year_i] - e_eu28.index = e_eu28.index.str.lstrip() + e_eu27 = df.iloc[50:77, year_i] + e_eu27.index = e_eu27.index.str.lstrip() - e_ratio = e_country / e_eu28 + e_ratio = e_country / e_eu27 return pd.Series({k: e_ratio[v] for k, v in sub2sect.items()}) @@ -230,7 +236,7 @@ def get_energy_ratio(country, eurostat_dir, jrc_dir, year): def industry_production_per_country(country, year, eurostat_dir, jrc_dir): def get_sector_data(sector, country): jrc_country = jrc_names.get(country, country) - fn = f"{jrc_dir}/JRC-IDEES-2015_Industry_{jrc_country}.xlsx" + fn = f"{jrc_dir}/{jrc_country}/JRC-IDEES-2021_Industry_{jrc_country}.xlsx" sheet = sub_sheet_name_dict[sector] with mute_print(): df = pd.read_excel(fn, sheet_name=sheet, index_col=0, header=0).squeeze( @@ -245,10 +251,10 @@ def industry_production_per_country(country, year, eurostat_dir, jrc_dir): return df - ct = "EU28" if country not in eu28 else country + ct = "EU27" if country not in eu27 else country demand = pd.concat([get_sector_data(s, ct) for s in sect2sub]) - if country not in eu28: + if country not in eu27: demand *= get_energy_ratio(country, eurostat_dir, jrc_dir, year) demand.name = country