Skip to content

Add PTES and introduce PTES/TES energy-to-power ratios#1546

Merged
amos-schledorn merged 58 commits intoPyPSA:masterfrom
TomKae00:ltes_stores
Mar 14, 2025
Merged

Add PTES and introduce PTES/TES energy-to-power ratios#1546
amos-schledorn merged 58 commits intoPyPSA:masterfrom
TomKae00:ltes_stores

Conversation

@TomKae00
Copy link
Copy Markdown
Contributor

Changes proposed in this Pull Request

This pull request introduces the following adjustments to the prepare_sector_network and solve_network scripts, replacing PR #1444 (which did not work with the HiGHS solver):

  • Added PTES.
  • Introduced a constraint to enforce the energy-to-power ratio (etpr).
  • Implemented a constraint to ensure that the charger and discharger of the thermal energy stores are sized equally.

The following config data has been used:

scenario:
  clusters:
    - 6

planning_horizons:
  - 2030

foresight: overnight
countries: ['DE', 'DK']

clustering:
  temporal:
    resolution_sector: 12h

Constraints

The etpr ratio constraint and the constraint enforcing equal sizing of the charger and discharger are working as intended, as shown in the figure below. In particular, the size of the store divided by 150 equals the size of both the charger and the discharger.

charger_discharger_profile_comparison

The annual charging and discharging process for an exemplary PTES store is illustrated in the figure below:

charger_discharger_size_comparison

System Costs

System costs have increased slightly with the newly introduced constraints. This is logical given the larger capacities required when the charger and discharger can no longer be chosen independently.

total_cost_comparison

Checklist

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

Copy link
Copy Markdown
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 great! Just a few small comments. When the CI runs through, I'll test this locally.

@TomKae00
Copy link
Copy Markdown
Contributor Author

@amos-schledorn thanks for the review! I've implemented your suggestions. Moreover, i added error handling to ensure that the TES constraints are only applied when intended.

@TomKae00
Copy link
Copy Markdown
Contributor Author

Hi @fneum and @amos-schledorn,

Currently, the CI is failing when running:

snakemake make_summary_perfect --configfile config/test/config.perfect.yaml

Reason for CI Failure:
In the master, the water tank charger and discharger are included in costs.csv with an efficiency of 0.9. Because of this, they can be used as heat vents, allowing energy to be released from the system.

With this PR, the efficiency of both the central/decentral chargers and dischargers has been set to 1.0 according to the DEA catalogue. As a result, they can no longer act as heat vents, which prevents energy from being released. Additionally, chargers are now directly tied to the store size via the energy-to-power ratio, meaning they cannot be used independently.

Possible Solution:
Since energy can no longer be released through the chargers/dischargers, the system costs are now higher. A potential solution could be to allow heat vents to be built for all heat systems, as it is done for urban central heating systems in prepare_sector_network.py line 2437.

Is there a specific reason why heat vents are currently only allowed for urban central heating? Or are there any concerns against extending this option to all systems?

@fneum fneum requested a review from Copilot March 3, 2025 09:26
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

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

PR Overview

This PR implements new PTES and TES constraints to ensure a fixed energy-to-power ratio and equal sizing for TES charger/discharger pairs in the network, replacing the previous implementation incompatible with the HiGHS solver. Key changes include:

  • Updating the prepare_sector_network.py to dynamically reference cost parameters for water tank and water pit components.
  • Adding two new TES constraint functions (energy-to-power ratio and charger ratio) in solve_network.py.
  • Updating the configuration file to include new color mappings for water pits in visualizations.

Reviewed Changes

File Description
scripts/prepare_sector_network.py Updates to water tanks/pits component cost/efficiency and related linking.
scripts/solve_network.py New TES constraint functions added and integrated into network setup.
config/config.default.yaml New plotting color options added for water pits.

Copilot reviewed 4 out of 4 changed files in this pull request and generated 1 comment.

Comments suppressed due to low confidence (1)

scripts/solve_network.py:886

  • The TES charger ratio constraint assumes a one-to-one ordering between charger and discharger indices. Ensure that these indices are explicitly paired to enforce that each TES unit’s charger and discharger are correctly matched.
lhs = ( n.model["Link-p_nom"].loc[indices_charger_p_nom_extendable] - n.model["Link-p_nom"].loc[indices_discharger_p_nom_extendable] * eff_discharger )

Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

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

PR Overview

This pull request introduces PTES and TES constraints to the network optimization scripts by enforcing an energy‐to‐power ratio for thermal energy stores and equal sizing between the charger and discharger linked to TES units. Key changes include:

  • Adding new constraints and variables in prepare_sector_network.py to support water tanks and water pits.
  • Implementing TES energy-to-power ratio and TES charger ratio constraints in solve_network.py with linopy for expression merging.
  • Updating configuration settings in config.default.yaml to include cost and plotting parameters for water pits.

Reviewed Changes

File Description
scripts/prepare_sector_network.py Adds PTES-related constraints and extends the modeling of water tanks and water pits.
scripts/solve_network.py Introduces TES energy-to-power ratio and charger ratio constraints and a new linopy import.
config/config.default.yaml Updates cost and plotting settings to support new water pits parameters and associated components.

Copilot reviewed 5 out of 5 changed files in this pull request and generated 2 comments.

Comments suppressed due to low confidence (1)

scripts/prepare_sector_network.py:2732

  • [nitpick] There is an inconsistency in how storage keys are referenced between water tanks and water pits. Consider constructing the key for water pit storage using heat_system.central_or_decentral to maintain consistency, if applicable.
lifetime=costs.at["central water pit storage", "lifetime"],

Copy link
Copy Markdown
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.

Hey @TomKae00,
only had a couple of questions, where I am not sure if they need to be addressed with new changes in the code. Did you discuss the addition of the "energy to power" column with @fneum?

@amos-schledorn amos-schledorn requested a review from fneum March 12, 2025 13:01
@amos-schledorn
Copy link
Copy Markdown
Contributor

For documentative purposes (with above DE/DK test config):

  • system costs decrease from 131,817,474,563 in the master to 130,662,599,842 in the feature, rather than decreasing as above. This is not surprising, as a) TTES is constraint but b) PTES is added
  • TTES disappears almost completely, PTES capacity is 4-5x previous TTES capacity

@amos-schledorn amos-schledorn changed the title Introduce PTES and TES constraints Add PTES and introduce PTES/TES energy-to-power ratios Mar 14, 2025
@amos-schledorn amos-schledorn merged commit 4b831b3 into PyPSA:master Mar 14, 2025
12 checks passed
tgilon added a commit to open-energy-transition/pypsa-eur that referenced this pull request Mar 18, 2025
* Revert "Transition from stores to storage units for LTES, introducing energy-…" (PyPSA#1520)

This reverts commit 0e6a8f8.

* use pypi `pycipopt` (PyPSA#1524)

* Update pinned environment files for all platforms (PyPSA#1523)

Co-authored-by: lkstrp <[email protected]>

* fix: ensure correct dtype of "reverse" column (PyPSA#1525)

* fix: ensure correct dtype of "reverse" column

* apply boolean dtype to reverse column in perfect-foresight

* reinsert objective check

* fix: improve selection of bidirectionals

* fix: relax condition on sanitizing "reversed" column

* revert some unneeded changes

* debug: print dataframes in summary (to be reverted)

* filter empty dfs in make summary

* use highs-simplex instead of highs-default for ci

---------

Co-authored-by: Lukas Trippe <[email protected]>

* fix(add_electricity): Fix nuclear p_max_pu time-series for greenfield nuclear (PyPSA#1519)

If nuclear is only part of extendable carriers, but not of convential carriers,
then the typical "conventional: nuclear: p_max_pu" setting writes the file name
all over the p_max_pu time-series, breaking the add_electricity rule.

Co-authored-by: Fabian Hofmann <[email protected]>

* solve_network: add customisable logging frequency (PyPSA#1521)

Co-authored-by: Fabian Hofmann <[email protected]>
Co-authored-by: Fabian Neumann <[email protected]>

* Configurable cutout directory (PyPSA#1515)

* make cutout dir configurable

* feat: add global cutout_directory to config

* add release notes

* feat: add description to configtables

---------

Co-authored-by: Fabian Neumann <[email protected]>

* remove `highspy` pin (PyPSA#1528)

* remove `highspy` pin

* Update environment.yaml

* Update environment.yaml

---------

Co-authored-by: Fabian Hofmann <[email protected]>

* Update pinned environment files for all platforms (PyPSA#1533)

Co-authored-by: lkstrp <[email protected]>

* Fixing snakemake shadow directory bug that occures with Windows/SMB drives (PyPSA#1535)

* Fixing snakemake shadow directory bug that occures with Windows/SMB/network drives

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

---------

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>

* [pre-commit.ci] pre-commit autoupdate (PyPSA#1526)

updates:
- [github.com/astral-sh/ruff-pre-commit: v0.9.3 → v0.9.4](astral-sh/ruff-pre-commit@v0.9.3...v0.9.4)
- [github.com/codespell-project/codespell: v2.4.0 → v2.4.1](codespell-project/codespell@v2.4.0...v2.4.1)

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Co-authored-by: Fabian Hofmann <[email protected]>

* Update validate.yaml (PyPSA#1536)

* Update validate.yaml

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* Update validate.yaml

---------

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>

* Consistent function scope (PyPSA#1537)

* start removing snakemake from functions

* move snakemake objects out of prepare_sector_functions

* continue with add_existing_baseyear

* continue with prepare_perfect_foresight

* apply it to add_electricity

* continue with solve network

* add pylint check to reusable functions

* iron out follow up issues

* adjust pylint check

* Update pinned environment files for all platforms (PyPSA#1538)

Co-authored-by: FabianHofmann <[email protected]>

* Increase default mem_mb for config.default scope (PyPSA#1541)

* Add a note to avoid updating pins without testing (PyPSA#1545)

* [pre-commit.ci] pre-commit autoupdate (PyPSA#1539)

updates:
- [github.com/astral-sh/ruff-pre-commit: v0.9.4 → v0.9.6](astral-sh/ruff-pre-commit@v0.9.4...v0.9.6)

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Co-authored-by: Fabian Neumann <[email protected]>

* Update pinned environment files for all platforms (PyPSA#1544)

Co-authored-by: lkstrp <[email protected]>

* Fix geothermal heat potentials (PyPSA#1516)

* feat: refactor build_heat_source_potentials into build_geothermal_heat_potential and and use ISI Excel output as data source

* feat: remove unnecessary snapshot index

* chore: refactor accordingly

* feat: fix scaling factor

* feat: remove obsolete retrieve

* docs: update docs

* docs: update release notes

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* feat: use retrieve separate retrieve rules

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* feat: remove conda env from new retrieve rules

* fix file names

* fix config passing

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* style: remove snakemake access in add_heat

---------

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>

* [pre-commit.ci] pre-commit autoupdate (PyPSA#1552)

* Change heat_vent config.default setting (PyPSA#1556)

* change central_heat_vent in config.default to true, since water tank charger and discharger cant be used as heat vent anymore with branch ltes_stores

* change release notes

* corrected release notes

* fix(benchmark): ignore keyboard interrupt in memory logging subprocess (PyPSA#1555)

ensures a C-c is not consumed by the logging child process, but instead
properly terminates the solver or main python process.

* feat(ci): Remove defaults channel from conda setup and use strict channel prio (PyPSA#1554)

* feat(ci): Remove defaults channel from conda setup and use strict channel prio

With the default settings the generated pinned environments may still contain
references to the defaults channel in certain cases (currently to zstandard),
and the test workflow does not fail because it also falls back to the
defaults channel.

* Use miniforge version

Avoids dependencies on proprietary anaconda pkgs channels

* Update pinned environment files for all platforms (PyPSA#1553)

Co-authored-by: coroa <[email protected]>

* Updated eia hydro generation and capacity csv file to include data up to 2023 (PyPSA#1543)

Updated the eia hydro generation and capacity up to 2023

Co-authored-by: Lukas Trippe <[email protected]>
Co-authored-by: Fabian Neumann <[email protected]>

* extend pre-built cutout years available (PyPSA#1559)

* fix(solve): Fix planning_horizons in solve_network (PyPSA#1560)

* fix: the planning_horizons params in CCL need to be string

* docs: Update the docstring for planning_horizons.

* fix: update planning_horizons parameter to use config_provider in perfect foresight

* fix(solve): Consolidate use of planning horizons

In perfect foresight, the planning_horizons param remains the list
of all planning horizons (to trigger re-runs).

The current planning horizons is always taken from the planning_horizons
wildcard and passed into extra_functionality as a partial kwarg.

* Add a specific not implemented AssertionError for CCL in perfect foresight

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

---------

Co-authored-by: yechenyan <[email protected]>
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>

* [pre-commit.ci] pre-commit autoupdate (PyPSA#1564)

updates:
- [github.com/astral-sh/ruff-pre-commit: v0.9.7 → v0.9.9](astral-sh/ruff-pre-commit@v0.9.7...v0.9.9)

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>

* refactor: Rename "fixed" to "capital_cost" for annualised investment … (PyPSA#1566)

* refactor: Rename "fixed" to "capital_cost" for annualised investment costs in sector-coupled networks

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

---------

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>

* Follow-up to PyPSA#1532 (PyPSA#1565)

* overwrite cost table attributes specified in config in prepare_costs and load_costs (#23)

* overwrite cost table attributes specified in config in prepare_costs and load_costs

* add custom fuel prices from EEE project

---------

Co-authored-by: Thomas Gilon <[email protected]>
(cherry picked from commit 926f763)

* Add logging to existing code

* Document the changes

* Fix issues with configuration

* Add example in the default configuration file

* Add release note

* Remove fuel cost suggestion

* feat(costs): Add support for overwriting investment, lifetime, FOM, VOM, efficiency, and fuel attributes in configuration

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* refactor(config): simplify overwrites structure in default configuration

* refactor(costs): streamline overwriting of marginal and capital costs in configuration

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* fix(prepare_sector_network): iterate over overwrites dictionary items for clarity

* fix(prepare_costs): ensure overwrites are applied only to existing costs

---------

Co-authored-by: Daniel Rüdt <[email protected]>
Co-authored-by: Thomas Gilon <[email protected]>
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>

* Allow heat-venting in all heating systems and impose small penalty for water tank chargers (PyPSA#1563)

* feat: add marginal cost for water tank chargers

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* docs: update add_retrofit_gas_boiler_constraint docs

* docs: update return type annotation for get_heat_system_type method

* feat: add heat vents for decentral and rural heating

* feat: remove unnecessary central_heat_vent config

* feat: pass heat vent marginal cost to prepare_sector_network

* refactor: rename marginal_cost_storage to marginal_cost_home_battery_storage

* docs: update configtables

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* docs: update release notes

* feat: use :config:cost:marginal_cost where possible

* Apply suggestions from code review

---------

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Co-authored-by: Fabian Neumann <[email protected]>

* [pre-commit.ci] pre-commit autoupdate (PyPSA#1569)

updates:
- [github.com/astral-sh/ruff-pre-commit: v0.9.9 → v0.9.10](astral-sh/ruff-pre-commit@v0.9.9...v0.9.10)

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>

* enh: enable running mock_snakemake from a separate workdir (PyPSA#1571)

* enh: enable running mock_snakemake from a separate workdir

Working directories are a simple mechanism of snakemake to have
multiple not competing runs of the same workflow.

Data, config and logfiles are expected relative to the directory
specified with `--directory`, while all the source files (mainly script
snakemake and environment definitions are resolved relative from the
current snakefile).

A new working directory can be quickly set up:
```shell
mkdir workdir
cp -lr -t workdir --parents cutouts $(git ls-files data)
cp -r config workdir
```

Running it then works in the repo root like
```shell
snakemake --directory workdir ...
```

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

---------

Co-authored-by: Jonas Hoersch <[email protected]>
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>

* Cluster network by shapes (NUTS0, NUTS1, NUTS2, NUTS3, and ADM1) (PyPSA#1502)

* Updated shapes to high-res 1M NUTS2024 shapes and geoboundaries for non-NUTS countries (UA, MD, BA).

* Updated nuts to 2021 and non-nuts to gadm.

* Updated non NUTS country adm 1 boundaries to OSM via Overpass (MD, BA, UA, XK

* Minor order update in rule.

* Updated eurostat population data

* Updated dataset to JRC ARDECO 2021, including UK, RS, CH

* Finished new implementation of build_shapes.

* Small fix.

* Running sector-coupling workflow

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* Updated build_shapes

* Added release nots and updated data-bundle docs.

* Added sandbox databundle for temporary CI testing.

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* Fix in build_shapes: Build only for selected countries in config.

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* Removed jrc-data from repo, use REST API instead. removed params from build_osm_boundaries.

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* Re-added shape/polygon simplification.

* Made build_osm_boundaries more robust, if wrong country components are retrieved. Reduced nuts shapes to 03m resolution.

* Updated build_shapes with simplifying europe function to remove remote islands.

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* Updated back to 01m resolution. takes longer.

* Removed test_build_shapes from testing, as outdated and not compatible with shapes PR

* Readded test_build_shapes.py, however reduced testing, as 'countries()' does not exist anymore, replaced by create_regions().

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* Fix for major Danish islands and Kopenhagen.

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* Initial working commit.

* Initial working commit.

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* Finalised PR.

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* Reversed default mock_snakemake params.

* Reversed prepare_network.py mock_snakemake

* Updated workflow: Voronoi cell generation within admin shapes.

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* Code clean in cluster_network.py

* Reverted mock snakemake to default.

* Fixed deprecated typing.

* Implemented robust merging algorith for clustering substation-less regions.

* Finalised: Updating x,y coordinates to internal point; Always aggregating London area.

* Bug fixes.

* Reversed mock_snakemake.

* Added in simplify_network: Stub-removal only within admin regions.

---------

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>

* Update common.smk (PyPSA#1577)

Wrong variable description in has_internet_access (mentioned Google and should be Zenodo)

* Windows snakefile (PyPSA#1575)

* Bugfix wdpa downloads on windows

Bugfix:
- add special handling to the rules download_wdpa and download_wdpa_marine in retrieve.smk, since Linux shell commands don't work on Windows.

* Remove unused lines of code

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* Switch wdpa downloads to shutil

Minor changes:
- change the download wdpa rules in rules/retrieve.smk to shutil to properly work on Windows

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

---------

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>

* clustering with NUTS3 in Spain breaks (PyPSA#1580)

* Update base_network.py

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* Minor bugfix in contains columns: Only unique IDs

* Dropped redundant else: ...

---------

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Co-authored-by: bobbyxng <[email protected]>
Co-authored-by: Bobby Xiong <[email protected]>

* match CH and any number of digits (PyPSA#1585)

* Add PTES and introduce PTES/TES energy-to-power ratios (PyPSA#1546)

* introduce etpr for TES using stores

* add constraints

* copleted implementation of constraints for TES stores

* updated release notes

* adjusted mock snakemake default

* library change

* update release notes

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* Delete .DS_Store

* change retrieval of etpr values in etpr_constraint

* changed TES constraints check based on the configs

* constraint checks

* enhance error handling for the tes constraints

* small changes

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* changed mock snakemake back to default settings

* feat: add marginal cost for water tank chargers

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* docs: update add_retrofit_gas_boiler_constraint docs

* docs: update return type annotation for get_heat_system_type method

* feat: add heat vents for decentral and rural heating

* feat: remove unnecessary central_heat_vent config

* feat: pass heat vent marginal cost to prepare_sector_network

* refactor: rename marginal_cost_storage to marginal_cost_home_battery_storage

* docs: update configtables

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* docs: update release notes

* add suggestions to ensure that charger and discharger align for charger ratio constraints and energy power constraints

* add lifetime to PTES and TTES charger/discharger, so that they are built with correct baseyear

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* feat: add small penalty on ptes charging

* feat: update fixed cost to capital cost str

* feat: remove unnecessary passing of obsolete config

* feat: remove unneeded config passing

* feat: remove unneeded config passing

* feat: remove unneeded config passing

* Update scripts/solve_network.py

* Update solve_network.py

* feat: re-add TES necessary parameters

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* Refactor string contains checks

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

---------

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Co-authored-by: Amos Schledorn <[email protected]>
Co-authored-by: Amos Schledorn <[email protected]>

* Update pinned environment files for all platforms (PyPSA#1588)

Co-authored-by: lkstrp <[email protected]>

* [pre-commit.ci] pre-commit autoupdate (PyPSA#1592)

updates:
- [github.com/astral-sh/ruff-pre-commit: v0.9.10 → v0.11.0](astral-sh/ruff-pre-commit@v0.9.10...v0.11.0)

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>

* Failing on 'warning' solving status (PyPSA#1591)

* Reduce pipeline entrypoints to country coverage / exclude RU+BY (PyPSA#1582)

* handle pipeline entrypoints for reduced country coverage

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

---------

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>

---------

Co-authored-by: Lukas Trippe <[email protected]>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: lkstrp <[email protected]>
Co-authored-by: Fabian Hofmann <[email protected]>
Co-authored-by: Jonas Hörsch <[email protected]>
Co-authored-by: Philipp Glaum <[email protected]>
Co-authored-by: Fabian Neumann <[email protected]>
Co-authored-by: Bobby Xiong <[email protected]>
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Co-authored-by: FabianHofmann <[email protected]>
Co-authored-by: Amos Schledorn <[email protected]>
Co-authored-by: TomKae00 <[email protected]>
Co-authored-by: Jonas Hörsch <[email protected]>
Co-authored-by: coroa <[email protected]>
Co-authored-by: Lukas <[email protected]>
Co-authored-by: yechenyan <[email protected]>
Co-authored-by: Daniel Rüdt <[email protected]>
Co-authored-by: Jonas Hoersch <[email protected]>
Co-authored-by: Markus Groissböck <[email protected]>
Co-authored-by: Eric Nitschke <[email protected]>
Co-authored-by: Cristóbal José Gallego Castillo <[email protected]>
Co-authored-by: bobbyxng <[email protected]>
Co-authored-by: pworschischek-aggmag <[email protected]>
Co-authored-by: Amos Schledorn <[email protected]>
@TomKae00 TomKae00 deleted the ltes_stores branch June 25, 2025 14:54
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