complete methanol for shipping
This commit is contained in:
parent
7208d96039
commit
0c62bfc9ee
@ -193,20 +193,15 @@ sector:
|
||||
agriculture_machinery_electric_share: 0
|
||||
agriculture_machinery_fuel_efficiency: 0.7 # fuel oil per use
|
||||
agriculture_machinery_electric_efficiency: 0.3 # electricity per use
|
||||
shipping_methanol: true
|
||||
MWh_MeOH_per_MWh_H2: 0.8787 # in LHV, source: DECHEMA (2017): Low carbon energy and feedstock for the European chemical industry , pg. 64.
|
||||
MWh_MeOH_per_tCO2: 4.0321 # in LHV, source: DECHEMA (2017): Low carbon energy and feedstock for the European chemical industry , pg. 64.
|
||||
MWh_MeOH_per_MWh_e: 3.6907 # in LHV, source: DECHEMA (2017): Low carbon energy and feedstock for the European chemical industry , pg. 64.
|
||||
shipping_average_efficiency: 0.4 #For conversion of fuel oil to propulsion in 2011
|
||||
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
|
||||
2030: 0.05
|
||||
2035: 0.15
|
||||
2040: 0.3
|
||||
2045: 0.6
|
||||
2050: 1
|
||||
shipping_hydrogen_share: 0
|
||||
shippint_methanol_share: 1
|
||||
shipping_oil_share: 0
|
||||
shipping_methanol_efficiency: 0.46 # 10-15% higher https://www.iea-amf.org/app/webroot/files/file/Annex%20Reports/AMF_Annex_56.pdf, https://users.ugent.be/~lsileghe/documents/extended_abstract.pdf
|
||||
shipping_oil_efficiency: 0.40 #For conversion of fuel oil to propulsion in 2011
|
||||
time_dep_hp_cop: true #time dependent heat pump coefficient of performance
|
||||
heat_pump_sink_T: 55. # Celsius, based on DTU / large area radiators; used in build_cop_profiles.py
|
||||
# conservatively high to cover hot water and space heating in poorly-insulated buildings
|
||||
|
@ -2139,32 +2139,56 @@ def add_industry(n, costs):
|
||||
p_set=industrial_demand.loc[nodes, "hydrogen"] / 8760
|
||||
)
|
||||
|
||||
if options["shipping_hydrogen_liquefaction"]:
|
||||
shipping_hydrogen_share = get(options['shipping_hydrogen_share'], investment_year)
|
||||
shipping_methanol_share = get(options['shipping_methanol_share'], investment_year)
|
||||
shipping_oil_share = get(options['shipping_oil_share'], investment_year)
|
||||
|
||||
n.madd("Bus",
|
||||
total_share = shipping_hydrogen_share + shipping_methanol_share + shipping_oil_share
|
||||
if total_share != 1:
|
||||
logger.warning(f"Total shipping shares sum up to {total_share*100}%, corresponding to increased or decreased demand assumptions.")
|
||||
|
||||
all_navigation = ["total international navigation", "total domestic navigation"]
|
||||
p_set = pop_weighted_energy_totals.loc[nodes, all_navigation].sum(axis=1) * 1e6 / 8760
|
||||
|
||||
if shipping_hydrogen_share:
|
||||
|
||||
if options["shipping_hydrogen_liquefaction"]:
|
||||
|
||||
n.madd("Bus",
|
||||
nodes,
|
||||
suffix=" H2 liquid",
|
||||
carrier="H2 liquid",
|
||||
location=nodes,
|
||||
unit="MWh_LHV"
|
||||
)
|
||||
|
||||
n.madd("Link",
|
||||
nodes + " H2 liquefaction",
|
||||
bus0=nodes + " H2",
|
||||
bus1=nodes + " H2 liquid",
|
||||
carrier="H2 liquefaction",
|
||||
efficiency=costs.at["H2 liquefaction", 'efficiency'],
|
||||
capital_cost=costs.at["H2 liquefaction", 'fixed'],
|
||||
p_nom_extendable=True,
|
||||
lifetime=costs.at['H2 liquefaction', 'lifetime']
|
||||
)
|
||||
|
||||
shipping_bus = nodes + " H2 liquid"
|
||||
else:
|
||||
shipping_bus = nodes + " H2"
|
||||
|
||||
efficiency = options['shipping_oil_efficiency'] / costs.at["fuel cell", "efficiency"]
|
||||
p_set_hydrogen = shipping_hydrogen_share * p_set * efficiency
|
||||
|
||||
n.madd("Load",
|
||||
nodes,
|
||||
suffix=" H2 liquid",
|
||||
carrier="H2 liquid",
|
||||
location=nodes,
|
||||
unit="MWh_LHV"
|
||||
suffix=" H2 for shipping",
|
||||
bus=shipping_bus,
|
||||
carrier="H2 for shipping",
|
||||
p_set=p_set_hydrogen
|
||||
)
|
||||
|
||||
n.madd("Link",
|
||||
nodes + " H2 liquefaction",
|
||||
bus0=nodes + " H2",
|
||||
bus1=nodes + " H2 liquid",
|
||||
carrier="H2 liquefaction",
|
||||
efficiency=costs.at["H2 liquefaction", 'efficiency'],
|
||||
capital_cost=costs.at["H2 liquefaction", 'fixed'],
|
||||
p_nom_extendable=True,
|
||||
lifetime=costs.at['H2 liquefaction', 'lifetime']
|
||||
)
|
||||
|
||||
shipping_bus = nodes + " H2 liquid"
|
||||
else:
|
||||
shipping_bus = nodes + " H2"
|
||||
|
||||
if options.get("shipping_methanol"):
|
||||
if shipping_methanol_share:
|
||||
|
||||
n.madd("Bus",
|
||||
spatial.methanol.nodes,
|
||||
@ -2173,7 +2197,6 @@ def add_industry(n, costs):
|
||||
unit="MWh_LHV"
|
||||
)
|
||||
|
||||
# methanolisation
|
||||
n.madd(
|
||||
spatial.h2.locations + "methanolisation",
|
||||
bus0=spatial.h2.nodes,
|
||||
@ -2185,38 +2208,44 @@ def add_industry(n, costs):
|
||||
capital_cost=costs.at["methanolisation", 'fixed'] * options["MWh_MeOH_per_MWh_H2"], # EUR/MW_H2/a
|
||||
lifetime=costs.at["methanolisation", 'lifetime'],
|
||||
efficiency=options["MWh_MeOH_per_MWh_H2"],
|
||||
efficiency2=- options["MWh_MeOH_per_MWh_H2"] / options["MWh_MeOH_per_tCO2"],
|
||||
efficiency3=- options["MWh_MeOH_per_MWh_H2"] / options["MWh_MeOH_per_MWh_e"],
|
||||
efficiency2=- options["MWh_MeOH_per_MWh_H2"] / options["MWh_MeOH_per_MWh_e"],
|
||||
efficiency3=- options["MWh_MeOH_per_MWh_H2"] / options["MWh_MeOH_per_tCO2"],
|
||||
)
|
||||
|
||||
all_navigation = ["total international navigation", "total domestic navigation"]
|
||||
efficiency = options['shipping_average_efficiency'] / costs.at["fuel cell", "efficiency"]
|
||||
shipping_hydrogen_share = get(options['shipping_hydrogen_share'], investment_year)
|
||||
p_set = shipping_hydrogen_share * pop_weighted_energy_totals.loc[nodes, all_navigation].sum(axis=1) * 1e6 * efficiency / 8760
|
||||
|
||||
n.madd("Load",
|
||||
nodes,
|
||||
suffix=" H2 for shipping",
|
||||
bus=shipping_bus,
|
||||
carrier="H2 for shipping",
|
||||
p_set=p_set
|
||||
)
|
||||
|
||||
if shipping_hydrogen_share < 1:
|
||||
|
||||
shipping_oil_share = 1 - shipping_hydrogen_share
|
||||
|
||||
p_set = shipping_oil_share * pop_weighted_energy_totals.loc[nodes, all_navigation].sum(axis=1) * 1e6 / 8760.
|
||||
efficiency = options["shipping_oil_efficiency"] / options["shipping_methanol_efficiency"]
|
||||
p_set_methanol = shipping_methanol_share * p_set.sum() * efficiency
|
||||
|
||||
n.madd("Load",
|
||||
nodes,
|
||||
spatial.methanol.nodes,
|
||||
suffix=" shipping methanol",
|
||||
bus=spatial.methanol.nodes,
|
||||
carrier="shipping methanol",
|
||||
p_set=p_set_methanol,
|
||||
)
|
||||
|
||||
# CO2 intensity methanol based on stoichiometric calculation with 22.7 GJ/t methanol (32 g/mol), CO2 (44 g/mol), 277.78 MWh/TJ = 0.218 t/MWh
|
||||
co2 = p_set_methanol / options["MWh_MeOH_per_tCO2"]
|
||||
|
||||
n.add("Load"
|
||||
"shipping methanol emissions",
|
||||
bus="co2 atmosphere",
|
||||
carrier="shipping methanol emissions",
|
||||
p_set=-co2,
|
||||
)
|
||||
|
||||
if shipping_oil_share:
|
||||
|
||||
p_set_oil = shipping_oil_share * p_set.sum()
|
||||
|
||||
n.madd("Load",
|
||||
spatial.oil.nodes,
|
||||
suffix=" shipping oil",
|
||||
bus=spatial.oil.nodes,
|
||||
carrier="shipping oil",
|
||||
p_set=p_set
|
||||
p_set=p_set_oil
|
||||
)
|
||||
|
||||
co2 = shipping_oil_share * pop_weighted_energy_totals.loc[nodes, all_navigation].sum().sum() * 1e6 / 8760 * costs.at["oil", "CO2 intensity"]
|
||||
co2 = p_set_oil * costs.at["oil", "CO2 intensity"]
|
||||
|
||||
n.add("Load",
|
||||
"shipping oil emissions",
|
||||
@ -2225,34 +2254,34 @@ def add_industry(n, costs):
|
||||
p_set=-co2
|
||||
)
|
||||
|
||||
if "oil" not in n.buses.carrier.unique():
|
||||
n.madd("Bus",
|
||||
spatial.oil.nodes,
|
||||
location=spatial.oil.locations,
|
||||
carrier="oil",
|
||||
unit="MWh_LHV"
|
||||
)
|
||||
if "oil" not in n.buses.carrier.unique():
|
||||
n.madd("Bus",
|
||||
spatial.oil.nodes,
|
||||
location=spatial.oil.locations,
|
||||
carrier="oil",
|
||||
unit="MWh_LHV"
|
||||
)
|
||||
|
||||
if "oil" not in n.stores.carrier.unique():
|
||||
if "oil" not in n.stores.carrier.unique():
|
||||
|
||||
#could correct to e.g. 0.001 EUR/kWh * annuity and O&M
|
||||
n.madd("Store",
|
||||
[oil_bus + " Store" for oil_bus in spatial.oil.nodes],
|
||||
bus=spatial.oil.nodes,
|
||||
e_nom_extendable=True,
|
||||
e_cyclic=True,
|
||||
carrier="oil",
|
||||
)
|
||||
#could correct to e.g. 0.001 EUR/kWh * annuity and O&M
|
||||
n.madd("Store",
|
||||
[oil_bus + " Store" for oil_bus in spatial.oil.nodes],
|
||||
bus=spatial.oil.nodes,
|
||||
e_nom_extendable=True,
|
||||
e_cyclic=True,
|
||||
carrier="oil",
|
||||
)
|
||||
|
||||
if "oil" not in n.generators.carrier.unique():
|
||||
if "oil" not in n.generators.carrier.unique():
|
||||
|
||||
n.madd("Generator",
|
||||
spatial.oil.nodes,
|
||||
bus=spatial.oil.nodes,
|
||||
p_nom_extendable=True,
|
||||
carrier="oil",
|
||||
marginal_cost=costs.at["oil", 'fuel']
|
||||
)
|
||||
n.madd("Generator",
|
||||
spatial.oil.nodes,
|
||||
bus=spatial.oil.nodes,
|
||||
p_nom_extendable=True,
|
||||
carrier="oil",
|
||||
marginal_cost=costs.at["oil", 'fuel']
|
||||
)
|
||||
|
||||
if options["oil_boilers"]:
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user