Skip to content

Commit 5f7c5f0

Browse files
Michapre-commit-ci[bot]
andauthored
Constrain every efuel trade link individually (#42)
* more specific import bans instead of export bans * remove duplicate code * .png -> .pdf * [GW] in title of Stromnetzausbau * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * temporarily fix pypsa version, because of inconsistency with DC projects --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
1 parent f67423d commit 5f7c5f0

File tree

5 files changed

+59
-369
lines changed

5 files changed

+59
-369
lines changed

Snakefile

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -583,9 +583,9 @@ rule plot_ariadne_variables:
583583
transmission_investment_csv=RESULTS + "ariadne/transmission_investment.csv",
584584
trassenlaenge_csv=RESULTS + "ariadne/trassenlaenge.csv",
585585
Kernnetz_Investment_plot=RESULTS + "ariadne/Kernnetz_Investment_plot.png",
586-
elec_trade=RESULTS + "ariadne/elec-trade-DE.png",
587-
h2_trade=RESULTS + "ariadne/h2-trade-DE.png",
588-
trade_balance=RESULTS + "ariadne/trade-balance-DE.png",
586+
elec_trade=RESULTS + "ariadne/elec-trade-DE.pdf",
587+
h2_trade=RESULTS + "ariadne/h2-trade-DE.pdf",
588+
trade_balance=RESULTS + "ariadne/trade-balance-DE.pdf",
589589
log:
590590
RESULTS + "logs/plot_ariadne_variables.log",
591591
script:
@@ -687,11 +687,11 @@ rule plot_ariadne_report:
687687
),
688688
output:
689689
elec_price_duration_curve=RESULTS
690-
+ "ariadne/report/elec_price_duration_curve.png",
691-
elec_price_duration_hist=RESULTS + "ariadne/report/elec_price_duration_hist.png",
692-
backup_capacity=RESULTS + "ariadne/report/backup_capacity.png",
693-
backup_generation=RESULTS + "ariadne/report/backup_generation.png",
694-
elec_prices_spatial_de=RESULTS + "ariadne/report/elec_prices_spatial_de.png",
690+
+ "ariadne/report/elec_price_duration_curve.pdf",
691+
elec_price_duration_hist=RESULTS + "ariadne/report/elec_price_duration_hist.pdf",
692+
backup_capacity=RESULTS + "ariadne/report/backup_capacity.pdf",
693+
backup_generation=RESULTS + "ariadne/report/backup_generation.pdf",
694+
elec_prices_spatial_de=RESULTS + "ariadne/report/elec_prices_spatial_de.pdf",
695695
results=directory(RESULTS + "ariadne/report"),
696696
elec_transmission=directory(RESULTS + "ariadne/report/elec_transmission"),
697697
h2_transmission=directory(RESULTS + "ariadne/report/h2_transmission"),
@@ -710,6 +710,6 @@ rule plot_ariadne_report:
710710
rule ariadne_report_only:
711711
input:
712712
expand(
713-
RESULTS + "ariadne/report/elec_price_duration_curve.png",
713+
RESULTS + "ariadne/report/elec_price_duration_curve.pdf",
714714
run=config_provider("run", "name"),
715715
),

config/config.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -432,7 +432,7 @@ solving:
432432
H2 pipeline retrofitted: 0.05
433433
fractional_last_unit_size: true
434434
constraints:
435-
efuel_export_ban: true
435+
efuel_export_ban: false
436436
limits_capacity_max:
437437
Generator:
438438
onwind:

envs/environment.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ dependencies:
1717
- jpype1
1818

1919
# Inhouse packages
20-
- pypsa>=0.32
20+
- pypsa<=0.31
2121
- atlite>=0.2.9
2222
- linopy
2323
- powerplantmatching>=0.5.15,<0.6

scripts/pypsa-de/additional_functionality.py

Lines changed: 31 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -640,33 +640,42 @@ def add_h2_derivate_limit(n, investment_year, limits_volume_max):
640640
]
641641
].index
642642

643-
incoming_p = (
644-
n.model["Link-p"].loc[:, incoming] * n.snapshot_weightings.generators
645-
).sum()
646-
outgoing_p = (
647-
n.model["Link-p"].loc[:, outgoing] * n.snapshot_weightings.generators
648-
).sum()
643+
carrier_idx_dict = {
644+
"renewable_oil": 0,
645+
"methanol": 1,
646+
"renewable_gas": 2,
647+
"H2_derivate": [0, 1, 2],
648+
}
649+
for carrier, idx in carrier_idx_dict.items():
650+
cname = f"{carrier}_import_limit-{ct}"
651+
652+
incoming_p = (
653+
n.model["Link-p"].loc[:, incoming[idx]]
654+
* n.snapshot_weightings.generators
655+
).sum()
656+
outgoing_p = (
657+
n.model["Link-p"].loc[:, outgoing[idx]]
658+
* n.snapshot_weightings.generators
659+
).sum()
649660

650-
lhs = incoming_p - outgoing_p
661+
lhs = incoming_p - outgoing_p
651662

652-
cname = f"H2_derivate_import_limit-{ct}"
663+
n.model.add_constraints(lhs <= limit, name=f"GlobalConstraint-{cname}")
653664

654-
n.model.add_constraints(lhs <= limit, name=f"GlobalConstraint-{cname}")
665+
if cname in n.global_constraints.index:
666+
logger.warning(
667+
f"Global constraint {cname} already exists. Dropping and adding it again."
668+
)
669+
n.global_constraints.drop(cname, inplace=True)
655670

656-
if cname in n.global_constraints.index:
657-
logger.warning(
658-
f"Global constraint {cname} already exists. Dropping and adding it again."
671+
n.add(
672+
"GlobalConstraint",
673+
cname,
674+
constant=limit,
675+
sense="<=",
676+
type="",
677+
carrier_attribute="",
659678
)
660-
n.global_constraints.drop(cname, inplace=True)
661-
662-
n.add(
663-
"GlobalConstraint",
664-
cname,
665-
constant=limit,
666-
sense="<=",
667-
type="",
668-
carrier_attribute="",
669-
)
670679

671680
# Export bans on efuels are implemented in modify_prenetwork by restricting p_max_pu of the DE -> EU links
672681

0 commit comments

Comments
 (0)