pypsa-eur icon indicating copy to clipboard operation
pypsa-eur copied to clipboard

feat: resistive_heaters and air_sourced_hp for ptes temperature boosting

Open TomKae00 opened this issue 7 months ago • 0 comments

Changes proposed in this Pull Request

This feature introduces resistive heaters and air-sourced heat pumps as temperature boosting technologies for PTES. The boosting methodology is based on a temperature_boost_ratio, which calculates the additional temperature lift required between the store’s current top temperature and the target forward temperature. This is done relative to the lift already achieved within the store, using the return temperature of the district heating system as a reference.


1. Boosting-ratio derivation

Let

  • Ṽ = volumetric flow rate (constant),
  • ρ = fluid density (constant),
  • cₚ = specific heat capacity (constant),
  • T_return = district heating return temperature,
  • T_max,store = temperature in the PTES,
  • T_forward = forward temperature.

We define two heat-transfer rates:

  1. Energy supplied by the PTES (source) Q_source = Ṽ·ρ·cₚ·(T_max,store − T_return)

  2. Additional energy required (boost)
    Q_boost = Ṽ·ρ·cₚ·(T_forward − T_max,store)

The total heating demand is
Q_total = Q_source + Q_boost

Define the boosting ratio α as the lift-ratio between what the pump must add versus what the PTES already delivers:
α = (T_forward − T_max,store) / (T_max,store − T_return) = Q_boost / Q_source

In other words,
Q_boost = α·Q_source

Proceeding from Q_boost = P_el·η, one finds
Q_source = (P_el·η) / α Q_total = Q_source + Q_boost = (P_el·η)/α + P_el·η = P_el·η·(1/α + 1)

Thus:

  1. PTES output per unit electricity Q_source / P_el = η / α

  2. Total output per unit electricity Q_total / P_el = η·(1/α + 1)


2. COP calculation adjustment for heat pumps

Previously, we calculated the heat-pump COP using the district heating forward/return temperatures. To accurately model air-sourced ptes heat pumps, the COP is now based on the pump’s sink inlet and outlet temperatures. This change ensures consistency whenever an external heat source (e.g., ambient air) is used for boosting.


3. Passing heat-pump parameters correctly

Prior, heat-pump parameters (set in config) were not used and default value instead. Now, all provided parameters are properly passed through the config and used.


4. Improved handling in logarithmic_mean

The function logarithmic_mean(t_hot, t_cold) failed (division-by-zero) when t_hot = t_cold. It now returns t_hot in that case (L’Hôpital’s rule), instead of throwing an error. This specifically handles instances where the PTES temperature equals the forward temperature.


5. @amos-schledorn discussion about heat-source flags

Because the air-sourced heat pump is now used in two contexts—

  1. Standard heating: raising district-heating return temperature up to forward temperature, and
  2. Boosting: raising PTES outlet temperature up to forward temperature—
    both cases would have “heat source = Air”, but this would break the logic we have at the moment. Therefore I still used “heat source = ptes” to manually distinguish the two scenarios. It might be cleaner to introduce a separate identifier for “boosting heat source.” Do you have a quick suggestion on how best to differentiate these two cases in the codebase?

Testing

scenario:
  clusters:
    - 8

planning_horizons:
  - 2030

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

clustering:
  temporal:
    resolution_sector: 12h

Results

  1. System-cost comparison
  • With supplemental heating: System cost = 141.071 trillion
  • With supplemental heating disabled: System cost = 141.054 trillion
  1. supplemental heating

Ran the analysis for DE and PL, both of which require relatively high forward temperatures (over 90°C). Since the PTES maximum storage temperature is 90 °C, supplemental boosting is necessary whenever the forward temperature exceeds that limit.

  1. Preferred boosting technology

In both countries, resistive heaters were chosen over air-sourced heat pumps for boosting. The main reasons are:

  • The air heat pump’s COP at high outlet temperatures is relatively low.
  • Resistive heaters have much lower capital costs.
  • The full-load hours for each booster technology are limited, favoring resistive heaters.
  1. Interpretation of the plots
  • The blue line shows electricity consumption for boosting (either by resistive heater or heat pump).
  • The combined heat output is Q_total = Q_store + P_el·η
  • The boosting_ratio determines how much extra energy (blue area) must be added beyond what the PTES alone can supply to achieve the forward temperature

With supplemental heating and booster technologies for PL 01 (resistive heaters)

overview6plots_resitive_PL0_1

With supplemental heating and booster technologies for PL 01 (HP)

overview6plots_hp_PL0_1

With supplemental heating and booster technologies for DE 01 (resistive heaters)

overview6plots_resitive_DE0_1

With supplemental heating and booster technologies for DE 01 (HP)

overview6plots_hp_DE0_1

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.

TomKae00 avatar Jun 05 '25 15:06 TomKae00