feat:add support for aquifer thermal energy storage (ATES)#1665
feat:add support for aquifer thermal energy storage (ATES)#1665amos-schledorn merged 32 commits intomasterfrom
Conversation
…ATES calculations
…ES potentials rule
* Update test.yaml * Update test.yaml
There was a problem hiding this comment.
Pull Request Overview
This PR adds support for aquifer thermal energy storage (ATES) by extending existing TES components and configuration options. Key changes include updating regex patterns in TES charger/discharger constraints, adding new network components (carrier, bus, links, and storage) for ATES in the heat sector, and introducing new ATES configuration options and plotting colors.
Reviewed Changes
Copilot reviewed 6 out of 10 changed files in this pull request and generated no comments.
Show a summary per file
| File | Description |
|---|---|
| scripts/solve_network.py | Updated TES charger/discharger regex patterns to include ATES terms |
| scripts/prepare_sector_network.py | Added new ATES components (carrier, bus, links, and store) into heat |
| config/plotting.default.yaml | Added plotting colors for aquifer storage elements |
| config/config.default.yaml | Introduced new ATES configuration parameters |
| .github/workflows/test.yaml | Added a command to uninstall inhouse packages before installation |
Files not reviewed (4)
- doc/configtables/sector.csv: Language not supported
- doc/release_notes.rst: Language not supported
- rules/build_sector.smk: Language not supported
- rules/retrieve.smk: Language not supported
There was a problem hiding this comment.
Pull Request Overview
This PR introduces support for aquifer thermal energy storage (ATES) into the network model. The changes add new string patterns in the TES charger ratio constraints, include new ATES parameters in the sector network preparation, and update plotting and configuration files accordingly.
- Updated TES charger and discharger index matching to include “aquifer storage”
- Added new parameters and network components (bus, link, store) to support ATES in the heat sector
- Introduced corresponding plotting colors and default configuration values for ATES
Reviewed Changes
Copilot reviewed 5 out of 10 changed files in this pull request and generated no comments.
| File | Description |
|---|---|
| scripts/solve_network.py | Modified TES constraints to support aquifer storage naming patterns |
| scripts/prepare_sector_network.py | Added network components and parameters to support ATES |
| config/plotting.default.yaml | Added plotting colors for aquifer storage components |
| config/config.default.yaml | Introduced new ATES configuration options |
Files not reviewed (5)
- doc/configtables/sector.csv: Language not supported
- doc/data-retrieval.rst: Language not supported
- doc/release_notes.rst: Language not supported
- rules/build_sector.smk: Language not supported
- rules/retrieve.smk: Language not supported
Comments suppressed due to low confidence (2)
scripts/solve_network.py:906
- Ensure that the addition of the 'aquifer storage charger' pattern conforms with the naming convention used for dischargers so that the pairing logic in TES constraints functions correctly. Consider adding unit tests to verify that corresponding charger and discharger identifiers align as expected.
n.links.index.str.contains("water tanks charger|water pits charger|aquifer storage charger")
scripts/prepare_sector_network.py:3209
- [nitpick] Confirm that dividing the geothermal heat source capital cost by 2 for ATES chargers and dischargers is the intended design choice, and add an inline comment to explain the rationale for future maintainability.
capital_cost=costs.at["central geothermal heat source", "capital_cost"] * ates_capex_as_fraction_of_geothermal_heat_source / 2,
|
The CI is failing rather oddly. Maybe this is related to the changes in import paths? |
|
|
Looks good to me! My only suggestion is to introduce a maximum storage temperature, similar to how PTES handles it, and calculate capacity dynamically to avoid unrealistic storage behavior or overestimating potential. But this could also be part in follow up PR. |
Thanks for the review! I've noted that down and I'd suggest solving this generically for all TES technologies in a future feature. |
cpschau
left a comment
There was a problem hiding this comment.
Amazing job @amos-schledorn! I think this is a great feature to finally get a first draft of ATES into the model. Overall, the code looks very clean with very descriptive variable names, thorough data checks, and logging. Only have some minor suggestions, most of them are rather stylistic and debatable.
- Introduced supplemental heating options for pit thermal energy storage (PTES) in district heating configurations. - Updated configuration files to include parameters for enabling supplemental heating and booster heat pumps. - Enhanced plotting configurations to visualize PTES heat pump data. - Implemented PTES temperature approximator to calculate top temperatures and determine supplemental heating needs. - Refactored scripts to integrate PTES operations and capacity calculations. - Updated heat system definitions to accommodate PTES as a heat source. - Modified sector network preparation to include PTES direct utilization profiles and supplemental heating logic. - Removed obsolete TES capacity scripts in favor of the new PTES implementation.
There was a problem hiding this comment.
Pull Request Overview
This PR introduces aquifer thermal energy storage (ATES) support for district heating, adding both simulation components and configuration options.
- Added ATES components (charger, discharger, store) in the network model.
- Extended configuration files, data retrieval rules, and documentation to support ATES parameters and data.
- Updated plotting and pre-commit configurations to reflect the new ATES nomenclature.
Reviewed Changes
Copilot reviewed 14 out of 14 changed files in this pull request and generated 2 comments.
Show a summary per file
| File | Description |
|---|---|
| scripts/solve_network.py | Extended regex filters to include ATES charger and discharger links. |
| scripts/prepare_sector_network.py | Added network components (Carrier, Bus, Link, Store) for ATES. |
| rules/retrieve.smk | Introduced a new rule for retrieving aquifer shapefile data from BGR. |
| rules/build_sector.smk | Added a new rule to build ATES potentials based on aquifer data. |
| doc/release_notes.rst | Documented the new ATES feature with usage notes. |
| doc/data-retrieval.rst | Updated data retrieval details for aquifer data. |
| doc/configtables/sector.csv | Added configuration entries for ATES parameters. |
| config/* | Updated various configuration files to activate ATES by default. |
| config/plotting.default.yaml | Added plotting colors for ATES elements. |
| config/config.default.yaml | Introduced default settings for ATES. |
| .pre-commit-config.yaml | Adjusted codespell ignore list to include additional keywords. |
Comments suppressed due to low confidence (1)
scripts/prepare_sector_network.py:3146
- Ensure that the CSV file loaded via 'ates_e_nom_max' consistently provides the 'ates_potential' column for all nodes to prevent potential key lookup errors during network construction.
e_nom_max=pd.read_csv(ates_e_nom_max, index_col=0)["ates_potential"][nodes]
…n add_heat function
cpschau
left a comment
There was a problem hiding this comment.
LGTM, from my side this is ready to be merged!
Fantastic, thanks for the review! |
Changes proposed in this Pull Request
This PR adds support for ATES.
storesare not associated with investment costs but limited by the available storage potentials.Notes
Todos in addition to checklist
Checklist
envs/environment.yaml.config/config.default.yaml.doc/configtables/*.csv.doc/data_sources.rst.doc/release_notes.rstis added.Testing
config (DE, DK, NL; 5h-12c)
DH dispatch
without ATES
####with ATES

System costs
Without ATES
195.676 bn Eur
With ATES
193.235 bn Eur
ATES potential
(this nicely fits with the fact that most ATES systems worldwide are installed in the Netherlands)