merge master
This commit is contained in:
commit
68e9593b01
@ -598,6 +598,7 @@ sector:
|
|||||||
conventional_generation:
|
conventional_generation:
|
||||||
OCGT: gas
|
OCGT: gas
|
||||||
biomass_to_liquid: false
|
biomass_to_liquid: false
|
||||||
|
electrobiofuels: false
|
||||||
biosng: false
|
biosng: false
|
||||||
limit_max_growth:
|
limit_max_growth:
|
||||||
enable: false
|
enable: false
|
||||||
@ -620,6 +621,11 @@ sector:
|
|||||||
max_boost: 0.25
|
max_boost: 0.25
|
||||||
var_cf: true
|
var_cf: true
|
||||||
sustainability_factor: 0.0025
|
sustainability_factor: 0.0025
|
||||||
|
solid_biomass_import:
|
||||||
|
enable: false
|
||||||
|
price: 54 #EUR/MWh
|
||||||
|
max_amount: 1390 # TWh
|
||||||
|
upstream_emissions_factor: .1 #share of solid biomass CO2 emissions at full combustion
|
||||||
|
|
||||||
# docs in https://pypsa-eur.readthedocs.io/en/latest/configuration.html#industry
|
# docs in https://pypsa-eur.readthedocs.io/en/latest/configuration.html#industry
|
||||||
industry:
|
industry:
|
||||||
@ -1018,6 +1024,7 @@ plotting:
|
|||||||
biomass: '#baa741'
|
biomass: '#baa741'
|
||||||
solid biomass: '#baa741'
|
solid biomass: '#baa741'
|
||||||
municipal solid waste: '#91ba41'
|
municipal solid waste: '#91ba41'
|
||||||
|
solid biomass import: '#d5ca8d'
|
||||||
solid biomass transport: '#baa741'
|
solid biomass transport: '#baa741'
|
||||||
solid biomass for industry: '#7a6d26'
|
solid biomass for industry: '#7a6d26'
|
||||||
solid biomass for industry CC: '#47411c'
|
solid biomass for industry CC: '#47411c'
|
||||||
@ -1031,6 +1038,7 @@ plotting:
|
|||||||
services rural biomass boiler: '#c6cf98'
|
services rural biomass boiler: '#c6cf98'
|
||||||
services urban decentral biomass boiler: '#dde5b5'
|
services urban decentral biomass boiler: '#dde5b5'
|
||||||
biomass to liquid: '#32CD32'
|
biomass to liquid: '#32CD32'
|
||||||
|
electrobiofuels: 'red'
|
||||||
BioSNG: '#123456'
|
BioSNG: '#123456'
|
||||||
# power transmission
|
# power transmission
|
||||||
lines: '#6c9459'
|
lines: '#6c9459'
|
||||||
|
@ -6,7 +6,7 @@ industry,--,"{true, false}",Flag to include industry sector.
|
|||||||
agriculture,--,"{true, false}",Flag to include agriculture sector.
|
agriculture,--,"{true, false}",Flag to include agriculture sector.
|
||||||
fossil_fuels,--,"{true, false}","Flag to include imports of fossil fuels ( [""coal"", ""gas"", ""oil"", ""lignite""])"
|
fossil_fuels,--,"{true, false}","Flag to include imports of fossil fuels ( [""coal"", ""gas"", ""oil"", ""lignite""])"
|
||||||
district_heating,--,,`prepare_sector_network.py <https://github.com/PyPSA/pypsa-eur-sec/blob/master/scripts/prepare_sector_network.py>`_
|
district_heating,--,,`prepare_sector_network.py <https://github.com/PyPSA/pypsa-eur-sec/blob/master/scripts/prepare_sector_network.py>`_
|
||||||
-- potential,--,float,maximum fraction of urban demand which can be supplied by district heating. Ignored where below current fraction.
|
-- potential,--,float,maximum fraction of urban demand which can be supplied by district heating
|
||||||
-- progress,--,Dictionary with planning horizons as keys., Increase of today's district heating demand to potential maximum district heating share. Progress = 0 means today's district heating share. Progress = 1 means maximum fraction of urban demand is supplied by district heating
|
-- progress,--,Dictionary with planning horizons as keys., Increase of today's district heating demand to potential maximum district heating share. Progress = 0 means today's district heating share. Progress = 1 means maximum fraction of urban demand is supplied by district heating
|
||||||
-- district_heating_loss,--,float,Share increase in district heat demand in urban central due to heat losses
|
-- district_heating_loss,--,float,Share increase in district heat demand in urban central due to heat losses
|
||||||
cluster_heat_buses,--,"{true, false}",Cluster residential and service heat buses in `prepare_sector_network.py <https://github.com/PyPSA/pypsa-eur-sec/blob/master/scripts/prepare_sector_network.py>`_ to one to save memory.
|
cluster_heat_buses,--,"{true, false}",Cluster residential and service heat buses in `prepare_sector_network.py <https://github.com/PyPSA/pypsa-eur-sec/blob/master/scripts/prepare_sector_network.py>`_ to one to save memory.
|
||||||
@ -72,7 +72,7 @@ boilers,--,"{true, false}",Add option for transforming gas into heat using gas b
|
|||||||
resistive_heaters,--,"{true, false}",Add option for transforming electricity into heat using resistive heaters (independently from gas boilers)
|
resistive_heaters,--,"{true, false}",Add option for transforming electricity into heat using resistive heaters (independently from gas boilers)
|
||||||
oil_boilers,--,"{true, false}",Add option for transforming oil into heat using boilers
|
oil_boilers,--,"{true, false}",Add option for transforming oil into heat using boilers
|
||||||
biomass_boiler,--,"{true, false}",Add option for transforming biomass into heat using boilers
|
biomass_boiler,--,"{true, false}",Add option for transforming biomass into heat using boilers
|
||||||
overdimension_individual_heating,--,float,Add option for overdimensioning individual heating systems by a certain factor. This allows them to cover heat demand peaks e.g. 10% higher than those in the data with a setting of 1.1.
|
overdimension_individual_heating,--,"float",Add option for overdimensioning individual heating systems by a certain factor. This allows them to cover heat demand peaks e.g. 10% higher than those in the data with a setting of 1.1.
|
||||||
chp,--,"{true, false}",Add option for using Combined Heat and Power (CHP)
|
chp,--,"{true, false}",Add option for using Combined Heat and Power (CHP)
|
||||||
micro_chp,--,"{true, false}",Add option for using Combined Heat and Power (CHP) for decentral areas.
|
micro_chp,--,"{true, false}",Add option for using Combined Heat and Power (CHP) for decentral areas.
|
||||||
solar_thermal,--,"{true, false}",Add option for using solar thermal to generate heat.
|
solar_thermal,--,"{true, false}",Add option for using solar thermal to generate heat.
|
||||||
@ -154,3 +154,8 @@ enhanced_geothermal,,,
|
|||||||
-- max_boost,--,float,The maximum boost in power output under flexible operation
|
-- max_boost,--,float,The maximum boost in power output under flexible operation
|
||||||
-- var_cf,--,"{true, false}",Add option for variable capacity factor (see Ricks et al. 2024)
|
-- var_cf,--,"{true, false}",Add option for variable capacity factor (see Ricks et al. 2024)
|
||||||
-- sustainability_factor,--,float,Share of sourced heat that is replenished by the earth's core (see details in `build_egs_potentials.py <https://github.com/PyPSA/pypsa-eur-sec/blob/master/scripts/build_egs_potentials.py>`_)
|
-- sustainability_factor,--,float,Share of sourced heat that is replenished by the earth's core (see details in `build_egs_potentials.py <https://github.com/PyPSA/pypsa-eur-sec/blob/master/scripts/build_egs_potentials.py>`_)
|
||||||
|
solid_biomass_import,,,
|
||||||
|
-- enable,--,"{true, false}",Add option to include solid biomass imports
|
||||||
|
-- price,currency/MWh,float,Price for importing solid biomass
|
||||||
|
-- max_amount,Twh,float,Maximum solid biomass import potential
|
||||||
|
-- upstream_emissions_factor,p.u.,float,Upstream emissions of solid biomass imports
|
||||||
|
|
@ -10,6 +10,10 @@ Release Notes
|
|||||||
Upcoming Release
|
Upcoming Release
|
||||||
================
|
================
|
||||||
|
|
||||||
|
* Add option to import solid biomass
|
||||||
|
|
||||||
|
* Add option to produce electrobiofuels (flag ``electrobiofuels`) from solid biomass and hydrogen, as a combination of BtL and Fischer-Tropsch to make more use of the biogenic carbon
|
||||||
|
|
||||||
* Add flag ``sector: fossil_fuels`` in config to remove the option of importing fossil fuels
|
* Add flag ``sector: fossil_fuels`` in config to remove the option of importing fossil fuels
|
||||||
|
|
||||||
* Renamed the carrier of batteries in BEVs from `battery storage` to `EV battery` and the corresponding bus carrier from `Li ion` to `EV battery`. This is to avoid confusion with stationary battery storage.
|
* Renamed the carrier of batteries in BEVs from `battery storage` to `EV battery` and the corresponding bus carrier from `Li ion` to `EV battery`. This is to avoid confusion with stationary battery storage.
|
||||||
|
@ -2311,6 +2311,54 @@ def add_biomass(n, costs):
|
|||||||
e_initial=solid_biomass_potentials_spatial,
|
e_initial=solid_biomass_potentials_spatial,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
if options["solid_biomass_import"].get("enable", False):
|
||||||
|
biomass_import_price = options["solid_biomass_import"]["price"]
|
||||||
|
# convert TWh in MWh
|
||||||
|
biomass_import_max_amount = options["solid_biomass_import"]["max_amount"] * 1e6
|
||||||
|
biomass_import_upstream_emissions = options["solid_biomass_import"][
|
||||||
|
"upstream_emissions_factor"
|
||||||
|
]
|
||||||
|
|
||||||
|
logger.info(
|
||||||
|
"Adding biomass import with cost %.2f EUR/MWh, a limit of %.2f TWh, and embedded emissions of %.2f%%",
|
||||||
|
biomass_import_price,
|
||||||
|
options["solid_biomass_import"]["max_amount"],
|
||||||
|
biomass_import_upstream_emissions * 100,
|
||||||
|
)
|
||||||
|
|
||||||
|
n.add("Carrier", "solid biomass import")
|
||||||
|
|
||||||
|
n.madd(
|
||||||
|
"Bus",
|
||||||
|
["EU solid biomass import"],
|
||||||
|
location="EU",
|
||||||
|
carrier="solid biomass import",
|
||||||
|
)
|
||||||
|
|
||||||
|
n.madd(
|
||||||
|
"Store",
|
||||||
|
["solid biomass import"],
|
||||||
|
bus=["EU solid biomass import"],
|
||||||
|
carrier="solid biomass import",
|
||||||
|
e_nom=biomass_import_max_amount,
|
||||||
|
marginal_cost=biomass_import_price,
|
||||||
|
e_initial=biomass_import_max_amount,
|
||||||
|
)
|
||||||
|
|
||||||
|
n.madd(
|
||||||
|
"Link",
|
||||||
|
spatial.biomass.nodes,
|
||||||
|
suffix=" solid biomass import",
|
||||||
|
bus0=["EU solid biomass import"],
|
||||||
|
bus1=spatial.biomass.nodes,
|
||||||
|
bus2="co2 atmosphere",
|
||||||
|
carrier="solid biomass import",
|
||||||
|
efficiency=1.0,
|
||||||
|
efficiency2=biomass_import_upstream_emissions
|
||||||
|
* costs.at["solid biomass", "CO2 intensity"],
|
||||||
|
p_nom_extendable=True,
|
||||||
|
)
|
||||||
|
|
||||||
n.madd(
|
n.madd(
|
||||||
"Store",
|
"Store",
|
||||||
spatial.msw.nodes,
|
spatial.msw.nodes,
|
||||||
@ -2484,28 +2532,23 @@ def add_biomass(n, costs):
|
|||||||
bus4=spatial.co2.df.loc[urban_central, "nodes"].values,
|
bus4=spatial.co2.df.loc[urban_central, "nodes"].values,
|
||||||
carrier="urban central solid biomass CHP CC",
|
carrier="urban central solid biomass CHP CC",
|
||||||
p_nom_extendable=True,
|
p_nom_extendable=True,
|
||||||
capital_cost=costs.at[key, "fixed"] * costs.at[key, "efficiency"]
|
capital_cost=costs.at[key + " CC", "fixed"]
|
||||||
|
* costs.at[key + " CC", "efficiency"]
|
||||||
+ costs.at["biomass CHP capture", "fixed"]
|
+ costs.at["biomass CHP capture", "fixed"]
|
||||||
* costs.at["solid biomass", "CO2 intensity"],
|
* costs.at["solid biomass", "CO2 intensity"],
|
||||||
marginal_cost=costs.at[key, "VOM"],
|
marginal_cost=costs.at[key + " CC", "VOM"],
|
||||||
efficiency=costs.at[key, "efficiency"]
|
efficiency=costs.at[key + " CC", "efficiency"]
|
||||||
- costs.at["solid biomass", "CO2 intensity"]
|
- costs.at["solid biomass", "CO2 intensity"]
|
||||||
* (
|
* (
|
||||||
costs.at["biomass CHP capture", "electricity-input"]
|
costs.at["biomass CHP capture", "electricity-input"]
|
||||||
+ costs.at["biomass CHP capture", "compression-electricity-input"]
|
+ costs.at["biomass CHP capture", "compression-electricity-input"]
|
||||||
),
|
),
|
||||||
efficiency2=costs.at[key, "efficiency-heat"]
|
efficiency2=costs.at[key + " CC", "efficiency-heat"],
|
||||||
+ costs.at["solid biomass", "CO2 intensity"]
|
|
||||||
* (
|
|
||||||
costs.at["biomass CHP capture", "heat-output"]
|
|
||||||
+ costs.at["biomass CHP capture", "compression-heat-output"]
|
|
||||||
- costs.at["biomass CHP capture", "heat-input"]
|
|
||||||
),
|
|
||||||
efficiency3=-costs.at["solid biomass", "CO2 intensity"]
|
efficiency3=-costs.at["solid biomass", "CO2 intensity"]
|
||||||
* costs.at["biomass CHP capture", "capture_rate"],
|
* costs.at["biomass CHP capture", "capture_rate"],
|
||||||
efficiency4=costs.at["solid biomass", "CO2 intensity"]
|
efficiency4=costs.at["solid biomass", "CO2 intensity"]
|
||||||
* costs.at["biomass CHP capture", "capture_rate"],
|
* costs.at["biomass CHP capture", "capture_rate"],
|
||||||
lifetime=costs.at[key, "lifetime"],
|
lifetime=costs.at[key + " CC", "lifetime"],
|
||||||
)
|
)
|
||||||
|
|
||||||
if options["biomass_boiler"]:
|
if options["biomass_boiler"]:
|
||||||
@ -2547,11 +2590,12 @@ def add_biomass(n, costs):
|
|||||||
efficiency2=-costs.at["solid biomass", "CO2 intensity"]
|
efficiency2=-costs.at["solid biomass", "CO2 intensity"]
|
||||||
+ costs.at["BtL", "CO2 stored"],
|
+ costs.at["BtL", "CO2 stored"],
|
||||||
p_nom_extendable=True,
|
p_nom_extendable=True,
|
||||||
capital_cost=costs.at["BtL", "fixed"],
|
capital_cost=costs.at["BtL", "fixed"] * costs.at["BtL", "efficiency"],
|
||||||
marginal_cost=costs.at["BtL", "efficiency"] * costs.at["BtL", "VOM"],
|
marginal_cost=costs.at["BtL", "VOM"] * costs.at["BtL", "efficiency"],
|
||||||
)
|
)
|
||||||
|
|
||||||
# TODO: Update with energy penalty
|
# Assuming that acid gas removal (incl. CO2) from syngas i performed with Rectisol
|
||||||
|
# process (Methanol) and that electricity demand for this is included in the base process
|
||||||
n.madd(
|
n.madd(
|
||||||
"Link",
|
"Link",
|
||||||
spatial.biomass.nodes,
|
spatial.biomass.nodes,
|
||||||
@ -2567,9 +2611,46 @@ def add_biomass(n, costs):
|
|||||||
+ costs.at["BtL", "CO2 stored"] * (1 - costs.at["BtL", "capture rate"]),
|
+ costs.at["BtL", "CO2 stored"] * (1 - costs.at["BtL", "capture rate"]),
|
||||||
efficiency3=costs.at["BtL", "CO2 stored"] * costs.at["BtL", "capture rate"],
|
efficiency3=costs.at["BtL", "CO2 stored"] * costs.at["BtL", "capture rate"],
|
||||||
p_nom_extendable=True,
|
p_nom_extendable=True,
|
||||||
capital_cost=costs.at["BtL", "fixed"]
|
capital_cost=costs.at["BtL", "fixed"] * costs.at["BtL", "efficiency"]
|
||||||
+ costs.at["biomass CHP capture", "fixed"] * costs.at["BtL", "CO2 stored"],
|
+ costs.at["biomass CHP capture", "fixed"] * costs.at["BtL", "CO2 stored"],
|
||||||
marginal_cost=costs.at["BtL", "efficiency"] * costs.at["BtL", "VOM"],
|
marginal_cost=costs.at["BtL", "VOM"] * costs.at["BtL", "efficiency"],
|
||||||
|
)
|
||||||
|
|
||||||
|
# Electrobiofuels (BtL with hydrogen addition to make more use of biogenic carbon).
|
||||||
|
# Combination of efuels and biomass to liquid, both based on Fischer-Tropsch.
|
||||||
|
# Experimental version - use with caution
|
||||||
|
if options["electrobiofuels"]:
|
||||||
|
|
||||||
|
efuel_scale_factor = costs.at["BtL", "C stored"]
|
||||||
|
name = (
|
||||||
|
pd.Index(spatial.biomass.nodes)
|
||||||
|
+ " "
|
||||||
|
+ pd.Index(spatial.h2.nodes.str.replace(" H2", ""))
|
||||||
|
)
|
||||||
|
n.madd(
|
||||||
|
"Link",
|
||||||
|
name,
|
||||||
|
suffix=" electrobiofuels",
|
||||||
|
bus0=spatial.biomass.nodes,
|
||||||
|
bus1=spatial.oil.nodes,
|
||||||
|
bus2=spatial.h2.nodes,
|
||||||
|
bus3="co2 atmosphere",
|
||||||
|
carrier="electrobiofuels",
|
||||||
|
lifetime=costs.at["electrobiofuels", "lifetime"],
|
||||||
|
efficiency=costs.at["electrobiofuels", "efficiency-biomass"],
|
||||||
|
efficiency2=-costs.at["electrobiofuels", "efficiency-hydrogen"],
|
||||||
|
efficiency3=-costs.at["solid biomass", "CO2 intensity"]
|
||||||
|
+ costs.at["BtL", "CO2 stored"]
|
||||||
|
* (1 - costs.at["Fischer-Tropsch", "capture rate"]),
|
||||||
|
p_nom_extendable=True,
|
||||||
|
capital_cost=costs.at["BtL", "fixed"] * costs.at["BtL", "efficiency"]
|
||||||
|
+ efuel_scale_factor
|
||||||
|
* costs.at["Fischer-Tropsch", "fixed"]
|
||||||
|
* costs.at["Fischer-Tropsch", "efficiency"],
|
||||||
|
marginal_cost=costs.at["BtL", "VOM"] * costs.at["BtL", "efficiency"]
|
||||||
|
+ efuel_scale_factor
|
||||||
|
* costs.at["Fischer-Tropsch", "VOM"]
|
||||||
|
* costs.at["Fischer-Tropsch", "efficiency"],
|
||||||
)
|
)
|
||||||
|
|
||||||
# BioSNG from solid biomass
|
# BioSNG from solid biomass
|
||||||
@ -2587,11 +2668,12 @@ def add_biomass(n, costs):
|
|||||||
efficiency3=-costs.at["solid biomass", "CO2 intensity"]
|
efficiency3=-costs.at["solid biomass", "CO2 intensity"]
|
||||||
+ costs.at["BioSNG", "CO2 stored"],
|
+ costs.at["BioSNG", "CO2 stored"],
|
||||||
p_nom_extendable=True,
|
p_nom_extendable=True,
|
||||||
capital_cost=costs.at["BioSNG", "fixed"],
|
capital_cost=costs.at["BioSNG", "fixed"] * costs.at["BioSNG", "efficiency"],
|
||||||
marginal_cost=costs.at["BioSNG", "efficiency"] * costs.at["BioSNG", "VOM"],
|
marginal_cost=costs.at["BioSNG", "VOM"] * costs.at["BioSNG", "efficiency"],
|
||||||
)
|
)
|
||||||
|
|
||||||
# TODO: Update with energy penalty for CC
|
# Assuming that acid gas removal (incl. CO2) from syngas i performed with Rectisol
|
||||||
|
# process (Methanol) and that electricity demand for this is included in the base process
|
||||||
n.madd(
|
n.madd(
|
||||||
"Link",
|
"Link",
|
||||||
spatial.biomass.nodes,
|
spatial.biomass.nodes,
|
||||||
@ -2609,10 +2691,10 @@ def add_biomass(n, costs):
|
|||||||
+ costs.at["BioSNG", "CO2 stored"]
|
+ costs.at["BioSNG", "CO2 stored"]
|
||||||
* (1 - costs.at["BioSNG", "capture rate"]),
|
* (1 - costs.at["BioSNG", "capture rate"]),
|
||||||
p_nom_extendable=True,
|
p_nom_extendable=True,
|
||||||
capital_cost=costs.at["BioSNG", "fixed"]
|
capital_cost=costs.at["BioSNG", "fixed"] * costs.at["BioSNG", "efficiency"]
|
||||||
+ costs.at["biomass CHP capture", "fixed"]
|
+ costs.at["biomass CHP capture", "fixed"]
|
||||||
* costs.at["BioSNG", "CO2 stored"],
|
* costs.at["BioSNG", "CO2 stored"],
|
||||||
marginal_cost=costs.at["BioSNG", "efficiency"] * costs.at["BioSNG", "VOM"],
|
marginal_cost=costs.at["BioSNG", "VOM"] * costs.at["BioSNG", "efficiency"],
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
@ -3183,7 +3265,9 @@ def add_industry(n, costs):
|
|||||||
carrier="waste CHP CC",
|
carrier="waste CHP CC",
|
||||||
p_nom_extendable=True,
|
p_nom_extendable=True,
|
||||||
capital_cost=costs.at["waste CHP CC", "fixed"]
|
capital_cost=costs.at["waste CHP CC", "fixed"]
|
||||||
* costs.at["waste CHP CC", "efficiency"],
|
* costs.at["waste CHP CC", "efficiency"]
|
||||||
|
+ costs.at["biomass CHP capture", "fixed"]
|
||||||
|
* costs.at["oil", "CO2 intensity"],
|
||||||
marginal_cost=costs.at["waste CHP CC", "VOM"],
|
marginal_cost=costs.at["waste CHP CC", "VOM"],
|
||||||
efficiency=costs.at["waste CHP CC", "efficiency"],
|
efficiency=costs.at["waste CHP CC", "efficiency"],
|
||||||
efficiency2=costs.at["waste CHP CC", "efficiency-heat"],
|
efficiency2=costs.at["waste CHP CC", "efficiency-heat"],
|
||||||
|
Loading…
Reference in New Issue
Block a user