add ammonia as carrier: with Haber-Bosch, crackers, store, load

This commit is contained in:
Fabian Neumann 2022-06-10 14:44:36 +02:00
parent 8dfd8b5a7f
commit 9573f33860
4 changed files with 17 additions and 5 deletions

View File

@ -244,6 +244,7 @@ sector:
# - onshore # more than 50 km from sea
- nearshore # within 50 km of sea
# - offshore
ammonia: false
use_fischer_tropsch_waste_heat: true
use_fuel_cell_waste_heat: true
electricity_distribution_grid: true
@ -291,6 +292,7 @@ industry:
# 2040: 0.3
# 2045: 0.25
# 2050: 0.2
MWh_NH3_per_tNH3: 5.166 # LHV
MWh_CH4_per_tNH3_SMR: 10.8 # 2012's demand from https://ec.europa.eu/docsroom/documents/4165/attachments/1/translations/en/renditions/pdf
MWh_elec_per_tNH3_SMR: 0.7 # same source, assuming 94-6% split methane-elec of total energy demand 11.5 MWh/tNH3
MWh_H2_per_tNH3_electrolysis: 6.5 # from https://doi.org/10.1016/j.joule.2018.04.017, around 0.197 tH2/tHN3 (>3/17 since some H2 lost and used for energy)

View File

@ -65,6 +65,8 @@ def industrial_energy_demand_per_country(country):
df = df_dict[sheet][year].groupby(fuels).sum()
df["ammonia"] = 0.
df['other'] = df['all'] - df.loc[df.index != 'all'].sum()
return df
@ -89,18 +91,21 @@ def add_ammonia_energy_demand(demand):
fn = snakemake.input.ammonia_production
ammonia = pd.read_csv(fn, index_col=0)[str(year)] / 1e3
def ammonia_by_fuel(x):
def get_ammonia_by_fuel(x):
fuels = {'gas': config['MWh_CH4_per_tNH3_SMR'],
'electricity': config['MWh_elec_per_tNH3_SMR']}
return pd.Series({k: x*v for k,v in fuels.items()})
ammonia = ammonia.apply(ammonia_by_fuel).T
ammonia_by_fuel = ammonia.apply(get_ammonia_by_fuel).T
ammonia_by_fuel = ammonia_by_fuel.unstack().reindex(index=demand.index, fill_value=0.)
ammonia = pd.DataFrame({"ammonia": ammonia * config['MWh_NH3_per_tNH3']}).T
demand['Ammonia'] = ammonia.unstack().reindex(index=demand.index, fill_value=0.)
demand['Basic chemicals (without ammonia)'] = demand["Basic chemicals"] - demand["Ammonia"]
demand['Basic chemicals (without ammonia)'] = demand["Basic chemicals"] - ammonia_by_fuel
demand['Basic chemicals (without ammonia)'].clip(lower=0, inplace=True)

View File

@ -9,6 +9,7 @@ if __name__ == '__main__':
'build_industrial_energy_demand_per_node',
simpl='',
clusters=48,
planning_horizons=2030,
)
# import EU ratios df as csv

View File

@ -60,6 +60,7 @@ index = [
"hydrogen",
"heat",
"naphtha",
"ammonia",
"process emission",
"process emission from feedstock",
]
@ -432,6 +433,9 @@ def chemicals_industry():
sector = "Ammonia"
df[sector] = 0.0
if snakemake.config["sector"].get("ammonia", False):
df.loc["ammonia", sector] = config["MWh_NH3_per_tNH3"]
else:
df.loc["hydrogen", sector] = config["MWh_H2_per_tNH3_electrolysis"]
df.loc["elec", sector] = config["MWh_elec_per_tNH3_electrolysis"]