new config options for demand in aviation + HVC, control of ICE shares in land transport and agriculture

This commit is contained in:
Fabian Neumann 2022-12-29 11:46:57 +01:00
parent 2be8b52a1e
commit 27414ac010
3 changed files with 41 additions and 15 deletions

View File

@ -178,19 +178,25 @@ sector:
bev_avail_mean: 0.8 bev_avail_mean: 0.8
v2g: true #allows feed-in to grid from EV battery v2g: true #allows feed-in to grid from EV battery
#what is not EV or FCEV is oil-fuelled ICE #what is not EV or FCEV is oil-fuelled ICE
land_transport_fuel_cell_share: # 1 means all FCEVs land_transport_fuel_cell_share:
2020: 0 2020: 0
2030: 0.05 2030: 0.05
2040: 0.1 2040: 0.1
2050: 0.15 2050: 0.15
land_transport_electric_share: # 1 means all EVs land_transport_electric_share:
2020: 0 2020: 0
2030: 0.25 2030: 0.25
2040: 0.6 2040: 0.6
2050: 0.85 2050: 0.85
land_transport_ice_share:
2020: 1
2030: 0.7
2040: 0.3
2050: 0
transport_fuel_cell_efficiency: 0.5 transport_fuel_cell_efficiency: 0.5
transport_internal_combustion_efficiency: 0.3 transport_internal_combustion_efficiency: 0.3
agriculture_machinery_electric_share: 0 agriculture_machinery_electric_share: 0
agriculture_machinery_oil_share: 1
agriculture_machinery_fuel_efficiency: 0.7 # fuel oil per use agriculture_machinery_fuel_efficiency: 0.7 # fuel oil per use
agriculture_machinery_electric_efficiency: 0.3 # electricity per use agriculture_machinery_electric_efficiency: 0.3 # electricity per use
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_MWh_H2: 0.8787 # in LHV, source: DECHEMA (2017): Low carbon energy and feedstock for the European chemical industry , pg. 64.
@ -202,6 +208,8 @@ sector:
shipping_oil_share: 0 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_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 shipping_oil_efficiency: 0.40 #For conversion of fuel oil to propulsion in 2011
aviation_demand_factor: 1. # relative aviation demand compared to today
HVC_demand_factor: 1. # relative HVC demand compared to today
time_dep_hp_cop: true #time dependent heat pump coefficient of performance 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 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 # conservatively high to cover hot water and space heating in poorly-insulated buildings

View File

@ -88,6 +88,11 @@ incorporates retrofitting options to hydrogen.
* Improved network plots including better legends, hydrogen retrofitting network display, and change to EqualEarth projection. * Improved network plots including better legends, hydrogen retrofitting network display, and change to EqualEarth projection.
* New config options for changing energy demands in aviation
(``aviation_demand_factor``) and HVC industry (``HVC_demand_factor``), as well
as explicit ICE shares for land transport (``land_transport_ice_share``) and
agriculture machinery (``agriculture_machinery_oil_share``).
**Bugfixes** **Bugfixes**
* The CO2 sequestration limit implemented as GlobalConstraint (introduced in the previous version) * The CO2 sequestration limit implemented as GlobalConstraint (introduced in the previous version)

View File

@ -1273,13 +1273,15 @@ def add_land_transport(n, costs):
fuel_cell_share = get(options["land_transport_fuel_cell_share"], investment_year) fuel_cell_share = get(options["land_transport_fuel_cell_share"], investment_year)
electric_share = get(options["land_transport_electric_share"], investment_year) electric_share = get(options["land_transport_electric_share"], investment_year)
ice_share = 1 - fuel_cell_share - electric_share ice_share = get(options["land_transport_ice_share"], investment_year)
print("FCEV share", fuel_cell_share) total_share = fuel_cell_share + electric_share + ice_share
print("EV share", electric_share) if total_share != 1:
print("ICEV share", ice_share) logger.warning(f"Total land transport shares sum up to {total_share*100}%, corresponding to increased or decreased demand assumptions.")
assert ice_share >= 0, "Error, more FCEV and EV share than 1." logger.info(f"FCEV share: {fuel_cell_share*100}%")
logger.info(f"EV share: {electric_share*100}%")
logger.info(f"ICEV share: {ice_share*100}%")
nodes = pop_layout.index nodes = pop_layout.index
@ -2321,15 +2323,23 @@ def add_industry(n, costs):
lifetime=costs.at['Fischer-Tropsch', 'lifetime'] lifetime=costs.at['Fischer-Tropsch', 'lifetime']
) )
demand_factor = options.get("HVC_demand_factor", 1)
p_set = demand_factor * industrial_demand.loc[nodes, "naphtha"].sum() / 8760
if demand_factor != 1:
logger.warning(f"Changing HVC demand by {demand_factor*100-100:+.2f}%.")
n.madd("Load", n.madd("Load",
["naphtha for industry"], ["naphtha for industry"],
bus=spatial.oil.nodes, bus=spatial.oil.nodes,
carrier="naphtha for industry", carrier="naphtha for industry",
p_set=industrial_demand.loc[nodes, "naphtha"].sum() / 8760 p_set=p_set
) )
demand_factor = options.get("aviation_demand_factor", 1)
all_aviation = ["total international aviation", "total domestic aviation"] all_aviation = ["total international aviation", "total domestic aviation"]
p_set = pop_weighted_energy_totals.loc[nodes, all_aviation].sum(axis=1).sum() * 1e6 / 8760 p_set = demand_factor * pop_weighted_energy_totals.loc[nodes, all_aviation].sum(axis=1).sum() * 1e6 / 8760
if demand_factor != 1:
logger.warning(f"Changing aviation demand by {demand_factor*100-100:+.2f}%.")
n.madd("Load", n.madd("Load",
["kerosene for aviation"], ["kerosene for aviation"],
@ -2480,8 +2490,11 @@ def add_agriculture(n, costs):
# machinery # machinery
electric_share = get(options["agriculture_machinery_electric_share"], investment_year) electric_share = get(options["agriculture_machinery_electric_share"], investment_year)
assert electric_share <= 1. oil_share = get(options["agriculture_machinery_oil_share"], investment_year)
ice_share = 1 - electric_share
total_share = electric_share + oil_share
if total_share != 1:
logger.warning(f"Total agriculture machinery shares sum up to {total_share*100}%, corresponding to increased or decreased demand assumptions.")
machinery_nodal_energy = pop_weighted_energy_totals.loc[nodes, "total agriculture machinery"] machinery_nodal_energy = pop_weighted_energy_totals.loc[nodes, "total agriculture machinery"]
@ -2497,16 +2510,16 @@ def add_agriculture(n, costs):
p_set=electric_share / efficiency_gain * machinery_nodal_energy * 1e6 / 8760, p_set=electric_share / efficiency_gain * machinery_nodal_energy * 1e6 / 8760,
) )
if ice_share > 0: if oil_share > 0:
n.madd("Load", n.madd("Load",
["agriculture machinery oil"], ["agriculture machinery oil"],
bus=spatial.oil.nodes, bus=spatial.oil.nodes,
carrier="agriculture machinery oil", carrier="agriculture machinery oil",
p_set=ice_share * machinery_nodal_energy.sum() * 1e6 / 8760 p_set=oil_share * machinery_nodal_energy.sum() * 1e6 / 8760
) )
co2 = ice_share * machinery_nodal_energy.sum() * 1e6 / 8760 * costs.at["oil", 'CO2 intensity'] co2 = oil_share * machinery_nodal_energy.sum() * 1e6 / 8760 * costs.at["oil", 'CO2 intensity']
n.add("Load", n.add("Load",
"agriculture machinery oil emissions", "agriculture machinery oil emissions",