Skip to content
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

Open
wants to merge 9 commits into
base: master
Choose a base branch
from

Conversation

TomKae00
Copy link

@TomKae00 TomKae00 commented Dec 5, 2024

Changes proposed in this Pull Request

This pull request introduces the following adjustments to the prepare_sector_network script:

  • Added PTES.
  • Transitioned stores to storage units for ltes, enabling the implementation of an energy-to-power ratio for these components.

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.

storage_unit_analysis

Effect of Changes: Results Analysis

  1. Storage Sizing: stores vs. storage units

The transition from stores to storage units results in larger storage sizing:

energy_supply_comparison

  1. Charging and Discharging Dynamics

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:

charging_discharging_urban_central_water_tanks

Urban Central Water Pits:

charging_discharging_urban_central_water_pits

  1. Energy Balances

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:

energy_balance_comparison_urban_central_heat

Urban Decentral Heat:

energy_balance_comparison_urban_decentral_heat

  1. Impact on Total System Costs

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:

total_cost_comparison

Checklist

  • [✓] I tested my contribution locally and it works as intended.
  • [✓] Code and workflow changes are sufficiently documented.
  • [✓] Changed dependencies are added to envs/environment.yaml.
  • [✓] Changes in configuration options are added in config/config.default.yaml.
  • [✓] Changes in configuration options are documented in doc/configtables/*.csv.
  • [✓] Sources of newly added data are documented in doc/data_sources.rst.
  • [✓] A release note doc/release_notes.rst is added.

@cpschau cpschau self-requested a review December 5, 2024 12:16
Comment on lines 2275 to 2294
"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,
)
Copy link
Contributor

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.

Copy link
Contributor

@cpschau cpschau left a 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

  1. 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),
  2. ask @lkstrp to bump a new technology-data release, as soon as it is merged,
  3. 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.

@amos-schledorn
Copy link
Contributor

amos-schledorn commented Dec 18, 2024

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

1. 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),

2. ask @lkstrp to bump a new technology-data release, as soon as it is merged,

3. 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 technology-data release?

carrier=f"{heat_system} water tanks",
efficiency_store=costs.at["water tank charger", "efficiency"],
max_hours=costs.at[
Copy link
Contributor

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.

Copy link
Contributor

@cpschau cpschau left a 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[
Copy link
Contributor

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"],
Copy link
Contributor

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.

@fneum fneum self-requested a review December 19, 2024 16:37
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants