Skip to content

Couple TES temperatures to district heating supply temperatures #1612

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

Merged
merged 65 commits into from
Mar 31, 2025

Conversation

cpschau
Copy link
Contributor

@cpschau cpschau commented Mar 25, 2025

Changes proposed in this Pull Request

This PR implicitly couples the top and bottom layer of PTES with the forward and return flow temperature of the local district heating network. Assuming a direct integration of the storage system, the bottom temperature equals the return flow temperature. The top temperature equals the forward flow temperature in the domain up to 90°C. At forward flow temperatures above 90°C the top temperature of the storage is kept at this operational limit of 90°C.

The variations of the network temperature lead to a dynamic storage capacity, that is described by the e_max_pu parameter/attribute of the Store component. According to Equation (1) in Sorknaes (2018), the dynamic storage capacity linearly depends on the deltaT between top and bottom temperature. The DEA catalogue indicates a deltaT of 55 K (top temperature of 90 and bottom temperature of 35 °C) as reference for the model. These reference values can be varied in the config settings sector:district_heating:ptes:max_top_temperature and sector:district_heating:ptes:min_bottom_temperature . As the spread between forward and return flow is smaller for a majority of systems, especially in summer, the effective storage capacity is smaller than the optimal value for the decision variable e_nom_opt.

2050, all countries (39 nodes), 8H resolution
image

The dynamic variation of the pit storage capacity can be turned off by setting the config parameter sector:district_heating:ptes:dynamic_capacity to false. The comparison of the SOC between a storage with a static and a dynamic storage capacity from an aggregated European perspective shows, that in the latter case the maximum SOC does never come close to the nominal value of the energetic capacity. It remains below 50%.

2050, all countries (39 nodes), 8H resolution
image

The changes in the storage operation are also characterized by a higher amount of cycles. Overall, the reduction in average PTES capacity makes it less attractive, leading to a reduction in PTES investments and an increase in total system costs.

System Costs [bn€/yr] PTES Capacity [TWh] PTES Charger Capacity [GW] PTES Cycles [1/yr]
Static 668.998 136.687 911.246 4.0134
Dynamic 674.144 97.2345 648.23 5.93258
Difference [%] 0.769166 -28.8633 -28.8633 47.8193

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.

TomKae00 and others added 30 commits February 12, 2025 16:52
…nto ltes_stores # Bitte geben Sie eine Commit-Beschreibung ein, um zu erklären, warum dieser # Merge erforderlich ist, insbesondere wenn es einen aktualisierten # Upstream-Branch mit einem Thema-Branch zusammenführt. # # Zeilen,

die mit '#' beginnen, werden ignoriert, # und eine leere Beschreibung bricht den Commit ab.
@cpschau cpschau requested a review from amos-schledorn March 25, 2025 14:05
@amos-schledorn
Copy link
Contributor

Great feature and very useful plots! Striking by how much the storage capacity drops in summer.
Not sure I understand the time series plots. What does e_max_py (weighted) on the secondary y-axis mean exactly?

Code-wise, I would suggest to

  • move this to a separate rule that either returns flat ones or the dynamic e_max_pu
  • make 90/35C config settings or technology-data entries
  • rename the first e_max_pu in the if-clause to delta_t or similar (or just remove it and use e_max_pu = (t_top - t_bottom) / (t_top_nom - t_bottom_nom)
  • add the Sorknaes paper and other relevant sources as references

Could you also add release notes and update the docs?

@cpschau
Copy link
Contributor Author

cpschau commented Mar 26, 2025

Great feature and very useful plots! Striking by how much the storage capacity drops in summer. Not sure I understand the time series plots. What does e_max_py (weighted) on the secondary y-axis mean exactly?

Code-wise, I would suggest to

* move this to a separate rule that either returns flat ones or the dynamic `e_max_pu`

* make 90/35C config settings or `technology-data` entries

* rename the first `e_max_pu` in the if-clause to `delta_t` or similar (or just remove it and use `e_max_pu = (t_top - t_bottom) / (t_top_nom  - t_bottom_nom)`

* add the Sorknaes paper and other relevant sources as references

Could you also add release notes and update the docs?

I addressed all of your points @amos-schledorn. In the plot you asked about, the e_max_pu timeseries of the pit components are weighted by their optimal capacity values to aggregate them to a value between 0 and 1.

@cpschau cpschau requested a review from fneum March 26, 2025 14:07
Copy link
Contributor

@amos-schledorn amos-schledorn left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks really good! I just have a few minor comments. Crazy by how much p_max_pu is reduced - we should look into validating DH supply temperatures.

…o prevent call of snakemake object within function, revert mock_snakemake arguments
@cpschau cpschau requested a review from amos-schledorn March 27, 2025 14:37
Copy link
Member

@fneum fneum left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks great! Just a few style comments.

Copy link
Contributor

@amos-schledorn amos-schledorn left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for the changes! Can be merged once Fabian's comments are addressed, imo.

@fneum fneum merged commit 6e25d96 into master Mar 31, 2025
18 of 19 checks passed
@fneum fneum deleted the e_max_pu_ptes branch March 31, 2025 11:42
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.

4 participants