Follow-Up: Unsustainable Biomass (#1254)
* add oil bus; extend global biomass limit; set unsustainable potentials to zero for overnight * keep sustainable potentials for switzerland * remove potential distinction for overnight; additional global constraint for unsustainable solid biomass * add unsustainable generator suffix * added unsustainable solid biomass bus; changed global constraints to equality; removed forced emptying of unsustainable solid biomass store * restored equality constraint for sustainable solid biomass; restored forced emptying of unsustainable store * remove directory change for debugger * added tech_color for unsustainable solid biomass * modified spatial namespaces and removed suffixes
This commit is contained in:
parent
a7bb478865
commit
53f84f7eea
@ -1127,6 +1127,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'
|
||||||
|
unsustainable solid biomass: '#998622'
|
||||||
unsustainable bioliquids: '#32CD32'
|
unsustainable bioliquids: '#32CD32'
|
||||||
electrobiofuels: 'red'
|
electrobiofuels: 'red'
|
||||||
BioSNG: '#123456'
|
BioSNG: '#123456'
|
||||||
|
0
rules/build_sector.smk
Normal file → Executable file
0
rules/build_sector.smk
Normal file → Executable file
6
scripts/build_biomass_potentials.py
Normal file → Executable file
6
scripts/build_biomass_potentials.py
Normal file → Executable file
@ -330,7 +330,7 @@ def add_unsustainable_potentials(df):
|
|||||||
)
|
)
|
||||||
|
|
||||||
share_sus = params.get("share_sustainable_potential_available").get(investment_year)
|
share_sus = params.get("share_sustainable_potential_available").get(investment_year)
|
||||||
df *= share_sus
|
df.loc[df_wo_ch.index] *= share_sus
|
||||||
|
|
||||||
df = df.join(df_wo_ch.filter(like="unsustainable")).fillna(0)
|
df = df.join(df_wo_ch.filter(like="unsustainable")).fillna(0)
|
||||||
|
|
||||||
@ -345,8 +345,8 @@ if __name__ == "__main__":
|
|||||||
snakemake = mock_snakemake(
|
snakemake = mock_snakemake(
|
||||||
"build_biomass_potentials",
|
"build_biomass_potentials",
|
||||||
simpl="",
|
simpl="",
|
||||||
clusters="37",
|
clusters="38",
|
||||||
planning_horizons=2020,
|
planning_horizons=2050,
|
||||||
)
|
)
|
||||||
|
|
||||||
configure_logging(snakemake)
|
configure_logging(snakemake)
|
||||||
|
57
scripts/prepare_sector_network.py
Normal file → Executable file
57
scripts/prepare_sector_network.py
Normal file → Executable file
@ -63,7 +63,8 @@ def define_spatial(nodes, options):
|
|||||||
|
|
||||||
if options.get("biomass_spatial", options["biomass_transport"]):
|
if options.get("biomass_spatial", options["biomass_transport"]):
|
||||||
spatial.biomass.nodes = nodes + " solid biomass"
|
spatial.biomass.nodes = nodes + " solid biomass"
|
||||||
spatial.biomass.bioliquids = nodes + " bioliquids"
|
spatial.biomass.nodes_unsustainable = nodes + " unsustainable solid biomass"
|
||||||
|
spatial.biomass.bioliquids = nodes + " unsustainable bioliquids"
|
||||||
spatial.biomass.locations = nodes
|
spatial.biomass.locations = nodes
|
||||||
spatial.biomass.industry = nodes + " solid biomass for industry"
|
spatial.biomass.industry = nodes + " solid biomass for industry"
|
||||||
spatial.biomass.industry_cc = nodes + " solid biomass for industry CC"
|
spatial.biomass.industry_cc = nodes + " solid biomass for industry CC"
|
||||||
@ -71,6 +72,7 @@ def define_spatial(nodes, options):
|
|||||||
spatial.msw.locations = nodes
|
spatial.msw.locations = nodes
|
||||||
else:
|
else:
|
||||||
spatial.biomass.nodes = ["EU solid biomass"]
|
spatial.biomass.nodes = ["EU solid biomass"]
|
||||||
|
spatial.biomass.nodes_unsustainable = ["EU unsustainable solid biomass"]
|
||||||
spatial.biomass.bioliquids = ["EU unsustainable bioliquids"]
|
spatial.biomass.bioliquids = ["EU unsustainable bioliquids"]
|
||||||
spatial.biomass.locations = ["EU"]
|
spatial.biomass.locations = ["EU"]
|
||||||
spatial.biomass.industry = ["solid biomass for industry"]
|
spatial.biomass.industry = ["solid biomass for industry"]
|
||||||
@ -2493,14 +2495,21 @@ def add_biomass(n, costs):
|
|||||||
e_max_pu=e_max_pu,
|
e_max_pu=e_max_pu,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
n.madd(
|
||||||
|
"Bus",
|
||||||
|
spatial.biomass.nodes_unsustainable,
|
||||||
|
location=spatial.biomass.locations,
|
||||||
|
carrier="unsustainable solid biomass",
|
||||||
|
unit="MWh_LHV",
|
||||||
|
)
|
||||||
|
|
||||||
e_max_pu = pd.DataFrame(1, index=n.snapshots, columns=spatial.biomass.nodes)
|
e_max_pu = pd.DataFrame(1, index=n.snapshots, columns=spatial.biomass.nodes)
|
||||||
e_max_pu.iloc[-1] = 0
|
e_max_pu.iloc[-1] = 0
|
||||||
|
|
||||||
n.madd(
|
n.madd(
|
||||||
"Store",
|
"Store",
|
||||||
spatial.biomass.nodes,
|
spatial.biomass.nodes_unsustainable,
|
||||||
suffix=" unsustainable",
|
bus=spatial.biomass.nodes_unsustainable,
|
||||||
bus=spatial.biomass.nodes,
|
|
||||||
carrier="unsustainable solid biomass",
|
carrier="unsustainable solid biomass",
|
||||||
e_nom=unsustainable_solid_biomass_potentials_spatial,
|
e_nom=unsustainable_solid_biomass_potentials_spatial,
|
||||||
marginal_cost=costs.at["fuelwood", "fuel"],
|
marginal_cost=costs.at["fuelwood", "fuel"],
|
||||||
@ -2509,6 +2518,16 @@ def add_biomass(n, costs):
|
|||||||
e_max_pu=e_max_pu,
|
e_max_pu=e_max_pu,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
n.madd(
|
||||||
|
"Link",
|
||||||
|
spatial.biomass.nodes_unsustainable,
|
||||||
|
bus0=spatial.biomass.nodes_unsustainable,
|
||||||
|
bus1=spatial.biomass.nodes,
|
||||||
|
carrier="unsustainable solid biomass",
|
||||||
|
efficiency=1,
|
||||||
|
p_nom=unsustainable_solid_biomass_potentials_spatial,
|
||||||
|
)
|
||||||
|
|
||||||
n.madd(
|
n.madd(
|
||||||
"Bus",
|
"Bus",
|
||||||
spatial.biomass.bioliquids,
|
spatial.biomass.bioliquids,
|
||||||
@ -2525,7 +2544,6 @@ def add_biomass(n, costs):
|
|||||||
n.madd(
|
n.madd(
|
||||||
"Store",
|
"Store",
|
||||||
spatial.biomass.bioliquids,
|
spatial.biomass.bioliquids,
|
||||||
suffix=" unsustainable",
|
|
||||||
bus=spatial.biomass.bioliquids,
|
bus=spatial.biomass.bioliquids,
|
||||||
carrier="unsustainable bioliquids",
|
carrier="unsustainable bioliquids",
|
||||||
e_nom=unsustainable_liquid_biofuel_potentials_spatial,
|
e_nom=unsustainable_liquid_biofuel_potentials_spatial,
|
||||||
@ -2535,6 +2553,8 @@ def add_biomass(n, costs):
|
|||||||
e_max_pu=e_max_pu,
|
e_max_pu=e_max_pu,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
add_carrier_buses(n, "oil")
|
||||||
|
|
||||||
n.madd(
|
n.madd(
|
||||||
"Link",
|
"Link",
|
||||||
spatial.biomass.bioliquids,
|
spatial.biomass.bioliquids,
|
||||||
@ -2663,6 +2683,29 @@ def add_biomass(n, costs):
|
|||||||
constant=biomass_potentials["solid biomass"].sum(),
|
constant=biomass_potentials["solid biomass"].sum(),
|
||||||
type="operational_limit",
|
type="operational_limit",
|
||||||
)
|
)
|
||||||
|
if biomass_potentials["unsustainable solid biomass"].sum() > 0:
|
||||||
|
n.madd(
|
||||||
|
"Generator",
|
||||||
|
spatial.biomass.nodes_unsustainable,
|
||||||
|
bus=spatial.biomass.nodes_unsustainable,
|
||||||
|
carrier="unsustainable solid biomass",
|
||||||
|
p_nom=10000,
|
||||||
|
marginal_cost=costs.at["fuelwood", "fuel"]
|
||||||
|
+ bus_transport_costs * average_distance,
|
||||||
|
)
|
||||||
|
# Set last snapshot of e_max_pu for unsustainable solid biomass to 1 to make operational limit work
|
||||||
|
unsus_stores_idx = n.stores.loc[
|
||||||
|
n.stores.carrier == "unsustainable solid biomass"
|
||||||
|
].index
|
||||||
|
n.stores_t.e_max_pu.loc[n.snapshots[-1], unsus_stores_idx] = 1
|
||||||
|
n.add(
|
||||||
|
"GlobalConstraint",
|
||||||
|
"unsustainable biomass limit",
|
||||||
|
carrier_attribute="unsustainable solid biomass",
|
||||||
|
sense="==",
|
||||||
|
constant=biomass_potentials["unsustainable solid biomass"].sum(),
|
||||||
|
type="operational_limit",
|
||||||
|
)
|
||||||
|
|
||||||
if options["municipal_solid_waste"]:
|
if options["municipal_solid_waste"]:
|
||||||
# Add municipal solid waste
|
# Add municipal solid waste
|
||||||
@ -4285,10 +4328,10 @@ if __name__ == "__main__":
|
|||||||
"prepare_sector_network",
|
"prepare_sector_network",
|
||||||
simpl="",
|
simpl="",
|
||||||
opts="",
|
opts="",
|
||||||
clusters="37",
|
clusters="38",
|
||||||
ll="vopt",
|
ll="vopt",
|
||||||
sector_opts="",
|
sector_opts="",
|
||||||
planning_horizons="2050",
|
planning_horizons="2030",
|
||||||
)
|
)
|
||||||
|
|
||||||
configure_logging(snakemake)
|
configure_logging(snakemake)
|
||||||
|
Loading…
Reference in New Issue
Block a user