feat: resistive_heaters and air_sourced_hp for ptes temperature boosting
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:
-
Energy supplied by the PTES (source) Q_source = Ṽ·ρ·cₚ·(T_max,store − T_return)
-
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:
-
PTES output per unit electricity Q_source / P_el = η / α
-
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—
- Standard heating: raising district-heating return temperature up to forward temperature, and
-
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
- System-cost comparison
- With supplemental heating: System cost = 141.071 trillion
- With supplemental heating disabled: System cost = 141.054 trillion
- 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.
- 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.
- 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)
With supplemental heating and booster technologies for PL 01 (HP)
With supplemental heating and booster technologies for DE 01 (resistive heaters)
With supplemental heating and booster technologies for DE 01 (HP)
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.rstis added.