From fbccd5fbc085017c4326d04032fb3f636a929173 Mon Sep 17 00:00:00 2001 From: Tom Brown Date: Fri, 24 Sep 2021 13:00:58 +0200 Subject: [PATCH 1/6] industry: separate HVC, methanol and chlorine from basic chemicals --- config.default.yaml | 16 ++++-- ...ustrial_energy_demand_per_country_today.py | 5 ++ ...build_industrial_production_per_country.py | 19 +++++-- ...ustrial_production_per_country_tomorrow.py | 4 +- .../build_industrial_production_per_node.py | 8 +-- scripts/build_industry_sector_ratios.py | 50 +++++++++++++------ 6 files changed, 73 insertions(+), 29 deletions(-) diff --git a/config.default.yaml b/config.default.yaml index dfc888c4..e13fdc85 100644 --- a/config.default.yaml +++ b/config.default.yaml @@ -72,7 +72,7 @@ electricity: # regulate what components with which carriers are kept from PyPSA-Eur; # some technologies are removed because they are implemented differently -# (e.g. battery or H2 storage) or have different year-dependent costs +# (e.g. battery or H2 storage) or have different year-dependent costs # in PyPSA-Eur-Sec pypsa_eur: Bus: @@ -270,10 +270,18 @@ industry: MWh_elec_per_tNH3_electrolysis: 1.17 # from https://doi.org/10.1016/j.joule.2018.04.017 Table 13 (air separation and HB) NH3_process_emissions: 24.5 # in MtCO2/a from SMR for H2 production for NH3 from UNFCCC for 2015 for EU28 petrochemical_process_emissions: 25.5 # in MtCO2/a for petrochemical and other from UNFCCC for 2015 for EU28 - HVC_primary_fraction: 1.0 #fraction of current non-ammonia basic chemicals produced via primary route + HVC_primary_fraction: 1. # fraction of today's HVC produced via primary route + HVC_production_today: 52. # MtHVC/a from DECHEMA (2017), Figure 16, page 107; includes ethylene, propylene and BTX + chlorine_production_today: 9.58 # MtCl/a from DECHEMA (2017), Table 7, page 43 + MWh_elec_per_tCl: 3.6 # DECHEMA (2017), Table 6, page 43 + MWh_H2_per_tCl: -0.9372 # DECHEMA (2017), page 43; negative since hydrogen produced in chloralkali process + methanol_production_today: 1.5 # MtMeOH/a from DECHEMA (2017), page 62 + MWh_elec_per_tMeOH: 0.167 # DECHEMA (2017), Table 14, page 65 + MWh_CH4_per_tMeOH: 10.25 # DECHEMA (2017), Table 14, page 65 hotmaps_locate_missing: false reference_year: 2015 - + # references: + # DECHEMA (2017): https://dechema.de/dechema_media/Downloads/Positionspapiere/Technology_study_Low_carbon_energy_and_feedstock_for_the_European_chemical_industry-p-20002750.pdf costs: lifetime: 25 #default lifetime @@ -335,7 +343,7 @@ solving: plotting: map: - boundaries: [-11, 30, 34, 71] + boundaries: [-11, 30, 34, 71] color_geomap: ocean: white land: whitesmoke diff --git a/scripts/build_industrial_energy_demand_per_country_today.py b/scripts/build_industrial_energy_demand_per_country_today.py index 1d906b24..af30553e 100644 --- a/scripts/build_industrial_energy_demand_per_country_today.py +++ b/scripts/build_industrial_energy_demand_per_country_today.py @@ -114,6 +114,11 @@ def add_non_eu28_industrial_energy_demand(demand): fn = snakemake.input.industrial_production_per_country production = pd.read_csv(fn, index_col=0) / 1e3 + #recombine HVC, Chlorine and Methanol to Basic chemicals (without ammonia) + chemicals = ["HVC", "Chlorine", "Methanol"] + production["Basic chemicals (without ammonia)"] = production[chemicals].sum(axis=1) + production.drop(columns=chemicals, inplace=True) + eu28_production = production.loc[eu28].sum() eu28_energy = demand.groupby(level=1).sum() eu28_averages = eu28_energy / eu28_production diff --git a/scripts/build_industrial_production_per_country.py b/scripts/build_industrial_production_per_country.py index 1754752a..c7973751 100644 --- a/scripts/build_industrial_production_per_country.py +++ b/scripts/build_industrial_production_per_country.py @@ -179,8 +179,8 @@ def industry_production(countries): return demand -def add_ammonia_demand_separately(demand): - """Include ammonia demand separately and remove ammonia from basic chemicals.""" +def separate_basic_chemicals(demand): + """Remove ammonia, chlorine and methanol from basic chemicals to get HVC.""" ammonia = pd.read_csv(snakemake.input.ammonia_production, index_col=0) @@ -198,9 +198,16 @@ def add_ammonia_demand_separately(demand): # EE, HR and LT got negative demand through subtraction - poor data demand['Basic chemicals'].clip(lower=0., inplace=True) - to_rename = {"Basic chemicals": "Basic chemicals (without ammonia)"} - demand.rename(columns=to_rename, inplace=True) + demand.insert(2, "HVC", 0.) + demand.insert(3, "Chlorine", 0.) + demand.insert(4, "Methanol", 0.) + # assume HVC, methanol, chlorine production proportional to non-ammonia basic chemicals + demand["HVC"] = config["HVC_production_today"]*1e3/demand["Basic chemicals"].sum()*demand["Basic chemicals"] + demand["Chlorine"] = config["chlorine_production_today"]*1e3/demand["Basic chemicals"].sum()*demand["Basic chemicals"] + demand["Methanol"] = config["methanol_production_today"]*1e3/demand["Basic chemicals"].sum()*demand["Basic chemicals"] + + demand.drop(columns=["Basic chemicals"], inplace=True) if __name__ == '__main__': if 'snakemake' not in globals(): @@ -211,12 +218,14 @@ def add_ammonia_demand_separately(demand): year = snakemake.config['industry']['reference_year'] + config = snakemake.config["industry"] + jrc_dir = snakemake.input.jrc eurostat_dir = snakemake.input.eurostat demand = industry_production(countries) - add_ammonia_demand_separately(demand) + separate_basic_chemicals(demand) fn = snakemake.output.industrial_production_per_country demand.to_csv(fn, float_format='%.2f') diff --git a/scripts/build_industrial_production_per_country_tomorrow.py b/scripts/build_industrial_production_per_country_tomorrow.py index ba69e0a6..3372a88a 100644 --- a/scripts/build_industrial_production_per_country_tomorrow.py +++ b/scripts/build_industrial_production_per_country_tomorrow.py @@ -39,11 +39,11 @@ al_primary_fraction = get(config["Al_primary_fraction"], investment_year) fraction_persistent_primary = al_primary_fraction * total_aluminium.sum() / production[key_pri].sum() - + production[key_pri] = fraction_persistent_primary * production[key_pri] production[key_sec] = total_aluminium - production[key_pri] - production["Basic chemicals (without ammonia)"] *= config['HVC_primary_fraction'] + production["HVC"] *= config['HVC_primary_fraction'] fn = snakemake.output.industrial_production_per_country_tomorrow production.to_csv(fn, float_format='%.2f') diff --git a/scripts/build_industrial_production_per_node.py b/scripts/build_industrial_production_per_node.py index b5361e6b..88f36eec 100644 --- a/scripts/build_industrial_production_per_node.py +++ b/scripts/build_industrial_production_per_node.py @@ -9,7 +9,9 @@ 'Integrated steelworks': 'Iron and steel', 'DRI + Electric arc': 'Iron and steel', 'Ammonia': 'Chemical industry', - 'Basic chemicals (without ammonia)': 'Chemical industry', + 'HVC': 'Chemical industry', + 'Methanol': 'Chemical industry', + 'Chlorine': 'Chemical industry', 'Other chemicals': 'Chemical industry', 'Pharmaceutical products etc.': 'Chemical industry', 'Cement': 'Cement', @@ -40,12 +42,12 @@ def build_nodal_industrial_production(): countries = keys.country.unique() sectors = industrial_production.columns - + for country, sector in product(countries, sectors): buses = keys.index[keys.country == country] mapping = sector_mapping.get(sector, "population") - + key = keys.loc[buses, mapping] nodal_production.loc[buses, sector] = industrial_production.at[country, sector] * key diff --git a/scripts/build_industry_sector_ratios.py b/scripts/build_industry_sector_ratios.py index adfb1d3c..738b500e 100644 --- a/scripts/build_industry_sector_ratios.py +++ b/scripts/build_industry_sector_ratios.py @@ -279,7 +279,7 @@ def chemicals_industry(): df = pd.DataFrame(index=index) - # Basid chemicals + # Basic chemicals sector = "Basic chemicals" @@ -374,52 +374,72 @@ def chemicals_industry(): # putting in ammonia demand for H2 and electricity separately s_emi = idees["emi"][3:57] - s_out = idees["out"][8:9] assert s_emi.index[0] == sector - assert sector in str(s_out.index) - - ammonia = pd.read_csv(snakemake.input.ammonia_production, index_col=0) - - # ktNH3/a - ammonia_total = ammonia.loc[ammonia.index.intersection(eu28), str(year)].sum() - s_out -= ammonia_total + # convert from MtHVC/a to ktHVC/a + s_out = config["HVC_production_today"]*1e3 # tCO2/t material df.loc["process emission", sector] += ( s_emi["Process emissions"] - config["petrochemical_process_emissions"] * 1e3 - config["NH3_process_emissions"] * 1e3 - ) / s_out.values + ) / s_out # emissions originating from feedstock, could be non-fossil origin # tCO2/t material df.loc["process emission from feedstock", sector] += ( config["petrochemical_process_emissions"] * 1e3 - ) / s_out.values + ) / s_out # convert from ktoe/a to GWh/a sources = ["elec", "biomass", "methane", "hydrogen", "heat", "naphtha"] df.loc[sources, sector] *= toe_to_MWh + # subtract ammonia energy demand + ammonia = pd.read_csv(snakemake.input.ammonia_production, index_col=0) + # ktNH3/a + ammonia_total = ammonia.loc[ammonia.index.intersection(eu28), str(year)].sum() df.loc["methane", sector] -= ammonia_total * config["MWh_CH4_per_tNH3_SMR"] df.loc["elec", sector] -= ammonia_total * config["MWh_elec_per_tNH3_SMR"] + # subtract chlorine demand + chlorine_total = config["chlorine_production_today"] + df.loc["hydrogen", sector] -= chlorine_total * config["MWh_H2_per_tCl"] + df.loc["elec", sector] -= chlorine_total * config["MWh_elec_per_tCl"] + + # subtract methanol demand + methanol_total = config["methanol_production_today"] + df.loc["methane", sector] -= methanol_total * config["MWh_CH4_per_tMeOH"] + df.loc["elec", sector] -= methanol_total * config["MWh_elec_per_tMeOH"] + # MWh/t material - df.loc[sources, sector] = df.loc[sources, sector] / s_out.values + df.loc[sources, sector] = df.loc[sources, sector] / s_out - to_rename = {sector: f"{sector} (without ammonia)"} + to_rename = {sector: "HVC"} df.rename(columns=to_rename, inplace=True) # Ammonia sector = "Ammonia" - df[sector] = 0.0 - df.loc["hydrogen", sector] = config["MWh_H2_per_tNH3_electrolysis"] df.loc["elec", sector] = config["MWh_elec_per_tNH3_electrolysis"] + # Chlorine + + sector = "Chlorine" + df[sector] = 0.0 + df.loc["hydrogen", sector] = config["MWh_H2_per_tCl"] + df.loc["elec", sector] = config["MWh_elec_per_tCl"] + + # Methanol + + sector = "Methanol" + df[sector] = 0.0 + df.loc["methane", sector] = config["MWh_CH4_per_tMeOH"] + df.loc["elec", sector] = config["MWh_elec_per_tMeOH"] + # Other chemicals sector = "Other chemicals" From 93d4eae1ea74d696088fc99a2d6494625e3b0332 Mon Sep 17 00:00:00 2001 From: Tom Brown Date: Fri, 24 Sep 2021 13:19:48 +0200 Subject: [PATCH 2/6] industry: for HVC, add mechanical and chemical recycling --- config.default.yaml | 5 +++++ ...ild_industrial_production_per_country_tomorrow.py | 3 +++ scripts/build_industrial_production_per_node.py | 2 ++ scripts/build_industry_sector_ratios.py | 12 ++++++++++++ 4 files changed, 22 insertions(+) diff --git a/config.default.yaml b/config.default.yaml index e13fdc85..0ed52c0d 100644 --- a/config.default.yaml +++ b/config.default.yaml @@ -271,7 +271,11 @@ industry: NH3_process_emissions: 24.5 # in MtCO2/a from SMR for H2 production for NH3 from UNFCCC for 2015 for EU28 petrochemical_process_emissions: 25.5 # in MtCO2/a for petrochemical and other from UNFCCC for 2015 for EU28 HVC_primary_fraction: 1. # fraction of today's HVC produced via primary route + HVC_mechanical_recycling_fraction: 0. # fraction of today's HVC produced via mechanical recycling + HVC_chemical_recycling_fraction: 0. # fraction of today's HVC produced via chemical recycling HVC_production_today: 52. # MtHVC/a from DECHEMA (2017), Figure 16, page 107; includes ethylene, propylene and BTX + MWh_elec_per_tHVC_mechanical_recycling: 3. # estimate + MWh_elec_per_tHVC_chemical_recycling: 6.9 # Material Economics (2019), page 125; based on pyrolysis and steam cracking chlorine_production_today: 9.58 # MtCl/a from DECHEMA (2017), Table 7, page 43 MWh_elec_per_tCl: 3.6 # DECHEMA (2017), Table 6, page 43 MWh_H2_per_tCl: -0.9372 # DECHEMA (2017), page 43; negative since hydrogen produced in chloralkali process @@ -282,6 +286,7 @@ industry: reference_year: 2015 # references: # DECHEMA (2017): https://dechema.de/dechema_media/Downloads/Positionspapiere/Technology_study_Low_carbon_energy_and_feedstock_for_the_European_chemical_industry-p-20002750.pdf + # Material Economics (2019): https://materialeconomics.com/latest-updates/industrial-transformation-2050 costs: lifetime: 25 #default lifetime diff --git a/scripts/build_industrial_production_per_country_tomorrow.py b/scripts/build_industrial_production_per_country_tomorrow.py index 3372a88a..17367bbc 100644 --- a/scripts/build_industrial_production_per_country_tomorrow.py +++ b/scripts/build_industrial_production_per_country_tomorrow.py @@ -43,6 +43,9 @@ production[key_pri] = fraction_persistent_primary * production[key_pri] production[key_sec] = total_aluminium - production[key_pri] + production.insert(4, "HVC (mechanical recycling)", config["HVC_mechanical_recycling_fraction"]*production["HVC"]) + production.insert(5, "HVC (chemical recycling)", config["HVC_chemical_recycling_fraction"]*production["HVC"]) + production["HVC"] *= config['HVC_primary_fraction'] fn = snakemake.output.industrial_production_per_country_tomorrow diff --git a/scripts/build_industrial_production_per_node.py b/scripts/build_industrial_production_per_node.py index 88f36eec..4ceffee9 100644 --- a/scripts/build_industrial_production_per_node.py +++ b/scripts/build_industrial_production_per_node.py @@ -10,6 +10,8 @@ 'DRI + Electric arc': 'Iron and steel', 'Ammonia': 'Chemical industry', 'HVC': 'Chemical industry', + 'HVC (mechanical recycling)': 'Chemical industry', + 'HVC (chemical recycling)': 'Chemical industry', 'Methanol': 'Chemical industry', 'Chlorine': 'Chemical industry', 'Other chemicals': 'Chemical industry', diff --git a/scripts/build_industry_sector_ratios.py b/scripts/build_industry_sector_ratios.py index 738b500e..a6c53720 100644 --- a/scripts/build_industry_sector_ratios.py +++ b/scripts/build_industry_sector_ratios.py @@ -419,6 +419,18 @@ def chemicals_industry(): to_rename = {sector: "HVC"} df.rename(columns=to_rename, inplace=True) + # HVC mechanical recycling + + sector = "HVC (mechanical recycling)" + df[sector] = 0.0 + df.loc["elec", sector] = config["MWh_elec_per_tHVC_mechanical_recycling"] + + # HVC chemical recycling + + sector = "HVC (chemical recycling)" + df[sector] = 0.0 + df.loc["elec", sector] = config["MWh_elec_per_tHVC_chemical_recycling"] + # Ammonia sector = "Ammonia" From 561d86c223a39f80881bb67c897d7f4a54a6d27b Mon Sep 17 00:00:00 2001 From: Fabian Neumann Date: Mon, 27 Sep 2021 12:06:15 +0200 Subject: [PATCH 3/6] add mechanical recycling energy demand from literature Assuming energy demand for recycling of HPTE, PET, PS, PP as LDPE is more difficult to recycle. https://doi.org/10.1016/j.resconrec.2020.105010 https://www.generalkinematics.com/blog/different-types-plastics-recycled/ --- config.default.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config.default.yaml b/config.default.yaml index 0ed52c0d..b0c8e60c 100644 --- a/config.default.yaml +++ b/config.default.yaml @@ -274,7 +274,7 @@ industry: HVC_mechanical_recycling_fraction: 0. # fraction of today's HVC produced via mechanical recycling HVC_chemical_recycling_fraction: 0. # fraction of today's HVC produced via chemical recycling HVC_production_today: 52. # MtHVC/a from DECHEMA (2017), Figure 16, page 107; includes ethylene, propylene and BTX - MWh_elec_per_tHVC_mechanical_recycling: 3. # estimate + MWh_elec_per_tHVC_mechanical_recycling: 0.547 # from SI of https://doi.org/10.1016/j.resconrec.2020.105010, Table S5, for HDPE, PP, PS, PET. LDPE would be 0.756. MWh_elec_per_tHVC_chemical_recycling: 6.9 # Material Economics (2019), page 125; based on pyrolysis and steam cracking chlorine_production_today: 9.58 # MtCl/a from DECHEMA (2017), Table 7, page 43 MWh_elec_per_tCl: 3.6 # DECHEMA (2017), Table 6, page 43 From 9f4e1f2176e87e208bf957d038df1aa7597df4cd Mon Sep 17 00:00:00 2001 From: Fabian Neumann Date: Tue, 28 Sep 2021 17:08:03 +0200 Subject: [PATCH 4/6] make HVC recycling ready for pathway, minor edits --- config.default.yaml | 2 +- doc/release_notes.rst | 1 + ..._industrial_energy_demand_per_country_today.py | 1 + .../build_industrial_production_per_country.py | 15 ++++++--------- ..._industrial_production_per_country_tomorrow.py | 6 +++--- scripts/build_industry_sector_ratios.py | 8 +++----- 6 files changed, 15 insertions(+), 18 deletions(-) diff --git a/config.default.yaml b/config.default.yaml index b0c8e60c..7e8a4664 100644 --- a/config.default.yaml +++ b/config.default.yaml @@ -275,7 +275,7 @@ industry: HVC_chemical_recycling_fraction: 0. # fraction of today's HVC produced via chemical recycling HVC_production_today: 52. # MtHVC/a from DECHEMA (2017), Figure 16, page 107; includes ethylene, propylene and BTX MWh_elec_per_tHVC_mechanical_recycling: 0.547 # from SI of https://doi.org/10.1016/j.resconrec.2020.105010, Table S5, for HDPE, PP, PS, PET. LDPE would be 0.756. - MWh_elec_per_tHVC_chemical_recycling: 6.9 # Material Economics (2019), page 125; based on pyrolysis and steam cracking + MWh_elec_per_tHVC_chemical_recycling: 6.9 # Material Economics (2019), page 125; based on pyrolysis and electric steam cracking chlorine_production_today: 9.58 # MtCl/a from DECHEMA (2017), Table 7, page 43 MWh_elec_per_tCl: 3.6 # DECHEMA (2017), Table 6, page 43 MWh_H2_per_tCl: -0.9372 # DECHEMA (2017), page 43; negative since hydrogen produced in chloralkali process diff --git a/doc/release_notes.rst b/doc/release_notes.rst index 4de40f06..c90e98f5 100644 --- a/doc/release_notes.rst +++ b/doc/release_notes.rst @@ -69,6 +69,7 @@ Future release * The transformation of the Steel and Aluminium production can be now defined for different years in the ``config.yaml`` file. * Include the option to alter the maximum energy capacity of a store via the ``carrier+factor`` in the ``{sector_opts}`` wildcard. This can be useful for sensitivity analyses. Example: ``co2 stored+e2`` multiplies the ``e_nom_max`` by factor 2. In this example, ``e_nom_max`` represents the CO2 sequestration potential in Europe. * Compatibility with ``xarray`` version 0.19. +* Separate basic chemicals into HVC, chlorine, methanol and ammonia [`#166 `_]. PyPSA-Eur-Sec 0.5.0 (21st May 2021) =================================== diff --git a/scripts/build_industrial_energy_demand_per_country_today.py b/scripts/build_industrial_energy_demand_per_country_today.py index af30553e..0adf84e7 100644 --- a/scripts/build_industrial_energy_demand_per_country_today.py +++ b/scripts/build_industrial_energy_demand_per_country_today.py @@ -103,6 +103,7 @@ def ammonia_by_fuel(x): demand['Basic chemicals (without ammonia)'] = demand["Basic chemicals"] - demand["Ammonia"] demand['Basic chemicals (without ammonia)'].clip(lower=0, inplace=True) + demand.drop(columns='Basic chemicals', inplace=True) return demand diff --git a/scripts/build_industrial_production_per_country.py b/scripts/build_industrial_production_per_country.py index c7973751..eadfb224 100644 --- a/scripts/build_industrial_production_per_country.py +++ b/scripts/build_industrial_production_per_country.py @@ -180,7 +180,7 @@ def industry_production(countries): def separate_basic_chemicals(demand): - """Remove ammonia, chlorine and methanol from basic chemicals to get HVC.""" + """Separate basic chemicals into ammonia, chlorine, methanol and HVC.""" ammonia = pd.read_csv(snakemake.input.ammonia_production, index_col=0) @@ -189,7 +189,7 @@ def separate_basic_chemicals(demand): print("Following countries have no ammonia demand:", missing) - demand.insert(2, "Ammonia", 0.) + demand["Ammonia"] = 0. demand.loc[there, "Ammonia"] = ammonia.loc[there, str(year)] @@ -198,14 +198,11 @@ def separate_basic_chemicals(demand): # EE, HR and LT got negative demand through subtraction - poor data demand['Basic chemicals'].clip(lower=0., inplace=True) - demand.insert(2, "HVC", 0.) - demand.insert(3, "Chlorine", 0.) - demand.insert(4, "Methanol", 0.) - # assume HVC, methanol, chlorine production proportional to non-ammonia basic chemicals - demand["HVC"] = config["HVC_production_today"]*1e3/demand["Basic chemicals"].sum()*demand["Basic chemicals"] - demand["Chlorine"] = config["chlorine_production_today"]*1e3/demand["Basic chemicals"].sum()*demand["Basic chemicals"] - demand["Methanol"] = config["methanol_production_today"]*1e3/demand["Basic chemicals"].sum()*demand["Basic chemicals"] + distribution_key = demand["Basic chemicals"] / demand["Basic chemicals"].sum() + demand["HVC"] = config["HVC_production_today"] * 1e3 * distribution_key + demand["Chlorine"] = config["chlorine_production_today"] * 1e3 * distribution_key + demand["Methanol"] = config["methanol_production_today"] * 1e3 * distribution_key demand.drop(columns=["Basic chemicals"], inplace=True) diff --git a/scripts/build_industrial_production_per_country_tomorrow.py b/scripts/build_industrial_production_per_country_tomorrow.py index 17367bbc..ccf31839 100644 --- a/scripts/build_industrial_production_per_country_tomorrow.py +++ b/scripts/build_industrial_production_per_country_tomorrow.py @@ -43,10 +43,10 @@ production[key_pri] = fraction_persistent_primary * production[key_pri] production[key_sec] = total_aluminium - production[key_pri] - production.insert(4, "HVC (mechanical recycling)", config["HVC_mechanical_recycling_fraction"]*production["HVC"]) - production.insert(5, "HVC (chemical recycling)", config["HVC_chemical_recycling_fraction"]*production["HVC"]) + production["HVC (mechanical recycling)"] = get(config["HVC_mechanical_recycling_fraction"], investment_year) * production["HVC"] + production["HVC (chemical recycling)"] = get(config["HVC_chemical_recycling_fraction"], investment_year) * production["HVC"] - production["HVC"] *= config['HVC_primary_fraction'] + production["HVC"] *= get(config['HVC_primary_fraction'], investment_year) fn = snakemake.output.industrial_production_per_country_tomorrow production.to_csv(fn, float_format='%.2f') diff --git a/scripts/build_industry_sector_ratios.py b/scripts/build_industry_sector_ratios.py index a6c53720..49c82138 100644 --- a/scripts/build_industry_sector_ratios.py +++ b/scripts/build_industry_sector_ratios.py @@ -377,7 +377,7 @@ def chemicals_industry(): assert s_emi.index[0] == sector # convert from MtHVC/a to ktHVC/a - s_out = config["HVC_production_today"]*1e3 + s_out = config["HVC_production_today"] * 1e3 # tCO2/t material df.loc["process emission", sector] += ( @@ -396,9 +396,8 @@ def chemicals_industry(): sources = ["elec", "biomass", "methane", "hydrogen", "heat", "naphtha"] df.loc[sources, sector] *= toe_to_MWh - # subtract ammonia energy demand + # subtract ammonia energy demand (in ktNH3/a) ammonia = pd.read_csv(snakemake.input.ammonia_production, index_col=0) - # ktNH3/a ammonia_total = ammonia.loc[ammonia.index.intersection(eu28), str(year)].sum() df.loc["methane", sector] -= ammonia_total * config["MWh_CH4_per_tNH3_SMR"] df.loc["elec", sector] -= ammonia_total * config["MWh_elec_per_tNH3_SMR"] @@ -416,8 +415,7 @@ def chemicals_industry(): # MWh/t material df.loc[sources, sector] = df.loc[sources, sector] / s_out - to_rename = {sector: "HVC"} - df.rename(columns=to_rename, inplace=True) + df.rename(columns={sector: "HVC"}, inplace=True) # HVC mechanical recycling From 488b93a079a9fe428707e67fd12f0edb34acf76b Mon Sep 17 00:00:00 2001 From: Fabian Neumann Date: Tue, 28 Sep 2021 17:24:00 +0200 Subject: [PATCH 5/6] extend release notes on plastics recycling --- doc/release_notes.rst | 1 + 1 file changed, 1 insertion(+) diff --git a/doc/release_notes.rst b/doc/release_notes.rst index c90e98f5..da1f5c1d 100644 --- a/doc/release_notes.rst +++ b/doc/release_notes.rst @@ -70,6 +70,7 @@ Future release * Include the option to alter the maximum energy capacity of a store via the ``carrier+factor`` in the ``{sector_opts}`` wildcard. This can be useful for sensitivity analyses. Example: ``co2 stored+e2`` multiplies the ``e_nom_max`` by factor 2. In this example, ``e_nom_max`` represents the CO2 sequestration potential in Europe. * Compatibility with ``xarray`` version 0.19. * Separate basic chemicals into HVC, chlorine, methanol and ammonia [`#166 `_]. +* Add option to specify reuse, primary production, and mechanical and chemical recycling fraction of platics [`#166 `_]. PyPSA-Eur-Sec 0.5.0 (21st May 2021) =================================== From 5c247425263054d3bda83277855395e279e7b59a Mon Sep 17 00:00:00 2001 From: Fabian Neumann Date: Tue, 28 Sep 2021 17:34:47 +0200 Subject: [PATCH 6/6] temporarily disable h2 liquefaction in shipping by default --- config.default.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config.default.yaml b/config.default.yaml index d928fb86..3c5238c5 100644 --- a/config.default.yaml +++ b/config.default.yaml @@ -175,7 +175,7 @@ sector: transport_fuel_cell_efficiency: 0.5 transport_internal_combustion_efficiency: 0.3 shipping_average_efficiency: 0.4 #For conversion of fuel oil to propulsion in 2011 - shipping_hydrogen_liquefaction: true # whether to consider liquefaction costs for shipping H2 demands + shipping_hydrogen_liquefaction: false # whether to consider liquefaction costs for shipping H2 demands shipping_hydrogen_share: # 1 means all hydrogen FC 2020: 0 2025: 0