-
Notifications
You must be signed in to change notification settings - Fork 251
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Transition from stores to storage units for LTES, introducing energy-to-power ratio #1444
base: master
Are you sure you want to change the base?
Conversation
for more information, see https://pre-commit.ci
scripts/prepare_sector_network.py
Outdated
"StorageUnit", | ||
nodes + f" {heat_system} water tanks", | ||
bus=nodes + f" {heat_system} water tanks", | ||
e_cyclic=True, | ||
e_nom_extendable=True, | ||
bus=nodes + f" {heat_system} heat", | ||
carrier=f"{heat_system} water tanks", | ||
efficiency_store=costs.at["water tank charger", "efficiency"], | ||
max_hours=costs.at[ | ||
"central water tank storage", "energy to power ratio" | ||
], | ||
efficiency_dispatch=costs.at["water tank discharger", "efficiency"], | ||
p_nom_extendable=True, | ||
standing_loss=1 - np.exp(-1 / 24 / tes_time_constant_days), | ||
capital_cost=costs.at[ | ||
heat_system.central_or_decentral + " water tank storage", "fixed" | ||
], | ||
lifetime=costs.at[ | ||
heat_system.central_or_decentral + " water tank storage", "lifetime" | ||
], | ||
e_nom_extendable=True, | ||
e_cyclic=True, | ||
) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
We might need another case distinction for different sizes of water tanks (DEA's "large hot water tank" for urban central heat and "small scale hot water tank" for urban decentral and rural heat), as the DEA provides different energy-to-power-ratio and costs. This would require additional changes in technology-data.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yes, I was thinking that as well. Assuming a single E2P ratio might be very restrictive.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Hi @TomKae00,
the implementation looks fine to me. However, the data behind it seems to contain some wrong assumptions that probably sneaked in with the recent changes in the technology-data repository, namely #144 and #152. In my opinion, we should assume (dis-)charger efficiencies of 1, as they are stated in the DEA catalogue. The indicated round-trip-efficiency-losses are probably chosen to give a proxy for the average standing losses. The standing losses, however, are already represented in our model by the configurable parameter tes_tau
. Therefore, we would withdraw them twice according to the current implementation. These losses are probably also the reason, why PTES expansion decreases so heavily in your comparison between former "Store" and "StorageUnit" implementation and the total system costs change so much. To fix this issue, I would suggest to
- submit a new PR in technology-data that refers the right charger- and discharger efficiencies for tanks and pits (maybe keep the round-trip efficiency as extra-row for people using technology-data without modelling standing losses separately),
- ask @lkstrp to bump a new technology-data release, as soon as it is merged,
- and finally reference the newly release version in the
config.default.yaml
.
As mentioned in the in-line review, it could also make sense to add the small scale hot water tanks to the technology-data to serve as decentral heat storage option, unless there are arguments against it @amos-schledorn
EDIT: decentral water tank storage are already part of the costs tables, taken from the PyPSA cost assumptions, so no need to add them.
Agreed, well done @TomKae00! I've opened an issue for the standing losses: #1459, so we can tackle that separately. This is good-to-go from my side as soon as the requested changes by @cpschau are addressed. @lkstrp any chance we could we get that |
carrier=f"{heat_system} water tanks", | ||
efficiency_store=costs.at["water tank charger", "efficiency"], | ||
max_hours=costs.at[ |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
TTES in district heating and decentral water tanks do not have the same EtP ratio.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I noticed one more thing that needs to be adjusted.
heat_system.central_or_decentral + " water tank discharger", | ||
"efficiency", | ||
], | ||
p_nom_extendable=True, | ||
standing_loss=1 - np.exp(-1 / 24 / tes_time_constant_days), | ||
capital_cost=costs.at[ |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Capital costs are related to power not to energy capacity --> Conversion from €/MWh to €/MW using energy to power ratio.
], | ||
p_nom_extendable=True, | ||
standing_loss=1 - np.exp(-1 / 24 / tes_time_constant_days), | ||
capital_cost=costs.at["central water pit storage", "fixed"], |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Same here. Capital costs need to be converted according to unit.
The argument for this change is that the E2P ratio cannot be freely optimized, implying that extremely high/low ratios would not be technically feasible, right? This should make the total system costs slightly higher if all unit/efficiency/cost calculations are done correctly. I was first a bit surprised by the lower cost with StorageUnit solution. As @cpschau pointed out, giving the model only one E2P option might be very restrictive. One could add multiple (e.g. three E2P options as separate StorageUnits). An alternative -- which I am not sure I would recommend -- would be to keep Store/Link combination and allow ranges of E2P ratios. |
Changes proposed in this Pull Request
This pull request introduces the following adjustments to the prepare_sector_network script:
The following config data has been used:
scenario:
clusters:
- 6
planning_horizons:
- 2030
foresight: overnight
countries: ['DE', 'DK']
clustering:
temporal:
resolution_sector: 12h
costs:
version: master
max_hours control:
The following figure illustrates the ratio of the state of charge compared to charging and discharging for the exemplary "DE0 0 urban central water pits". Additionally, the maximum hours are shown in relation to the ratio of the maximum state of charge to charging/discharging, demonstrating that the energy-to-power ratio is followed.
Effect of Changes: Results Analysis
The transition from stores to storage units results in larger storage sizing:
The implementation of the energy-to-power ratio limits the charging and discharging rates relative to storage size. This is illustrated in the following plots:
Urban Central Water Tanks:
Urban Central Water Pits:
The changes in charging and discharging dynamics influence the energy balance, as shown for urban central and urban decentral systems in the plots below:
Urban Central Heat:
Urban Decentral Heat:
The shift from stores to storage units impacts the total system costs slightly, resulting in a small decrease in costs for the storage units compared to stores:
Checklist
envs/environment.yaml
.config/config.default.yaml
.doc/configtables/*.csv
.doc/data_sources.rst
.doc/release_notes.rst
is added.