Skip to content
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

Update of description of heat pumps #44

Open
wants to merge 17 commits into
base: main
Choose a base branch
from
Open

Conversation

eott-siz
Copy link
Member

  • Update model description of heat pumps and chillers
  • Update component parameters for HeatPump
  • Remove attribute model from all component parameters (it was never implemented)
  • Expand on description of how functions should be given as inputs. These are used in heat pumps specifically, but may be reused for other components in the future.
  • Add description of control module temperature_sorting

Copy link
Member

@hsteinacker-siz hsteinacker-siz left a comment

Choose a reason for hiding this comment

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

What a complicated beast this heat pump has developed into... oO


* `const`: Takes one number and uses it as a constant COP. E.g. `const:3.1`.
* `carnot`: Calculates the COP as fraction of the Carnot-COP. E.g. `carnot:0.4`.
* `field`: Two-dimensional field values with bi-linear interpolation between the support values. See explanation below for how the definition should be given. The minimal and maximal variables values are interpreted as the inclusive boundaries of the field. Variables values outside of the boundaries lead to errors and are not extrapolated. The support values should be equally spaced along the dimensions for numerical stability, although the interpolation algorithm does not check and works with varying spacing too.
Copy link
Member

Choose a reason for hiding this comment

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

"variables values" --> "variable values"? Or just "values"? Occurs twice, not sure how it is meant.

These refer to the temperature-dependent part.

* `const`: Takes one number and uses it as a constant COP. E.g. `const:3.1`.
* `carnot`: Calculates the COP as fraction of the Carnot-COP. E.g. `carnot:0.4`.
Copy link
Member

Choose a reason for hiding this comment

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

Description of the second part of the function definition is missing:
...with the reduction factor of the calculated Carnot COP, which is indicated after the :.

10,15,15,10, 7;
20,15,15,15,11"
```
The first row are the grid points along the \(T_{sink,out}\) dimension, with the first value being ignored. The points cover a range from 0 °C to 30 °C with a spacing of 10 K. The first column are the grid points along the \(T_{source,in}\) dimension, with the first value being ignored. The points cover a range from 0 °C to 20 °C with a spacing of 10 K. The support values are the COP (at \(\kappa = 1\)), for example a value of 10 for \(T_{source,in} = 10, \ T_{sink,out} = 20\).
Copy link
Member

Choose a reason for hiding this comment

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

What is kappa at this point?

@@ -118,6 +150,18 @@ This module is implemented for the following component types: `CHPP`, `Electroly
| **min_run_time** | Minimum run time for the "on" state. Absolute value in seconds. Defaults to `1800`.
| **storage_uac** | The UAC of the storage component linked to the module.

#### Temperature sorting
Controls a component so that the availabe energies of the inputs/outputs during calculation of the `potential` and `process` steps are sorted by the temperatures they provide/request. This is useful for components where the temperature differences matter for the calculation. For example a heat pump can use the heat source with the highest temperature first for improved efficiency.

Copy link
Member

Choose a reason for hiding this comment

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

Maybe we should add a warning that this will override the order specified in the bus?

| **input_temps** | Sets if the inputs are sorted by minimum or maximum temperature. Should be `max` (default) or `min`.
| **input_order** | Sets the direction in which the inputs are sorted. Should be `asc` or `desc` (default).
| **output_temps** | Sets if the outputs are sorted by minimum or maximum temperature. Should be `max` or `min` (default).
| **output_order** | Sets the direction in which the outputs are sorted. Should be `asc` (default) or `desc`.
Copy link
Member

Choose a reason for hiding this comment

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

Maybe we should add an example for how to use the control modules? From the explanation here, I don't know how I can use the features (applies for the control modules in general).


[^Socal2021]: Socal, Laurent (2021): Heat pumps: lost in standards, *REHVA Journal August 2021*.
[^Filliard2009]: Filliard, Bruno; Guiavarch, Alain; Peuportier, Bruno (2009): Performance evaluation of an air-to-air heat pump coupled with temperate air-sources integrated into a dwelling. *Eleventh International Building Simulation Conference 2009*, S. 2266–73, Glasgow.
[^Lachance2021]:Lachance, Alex; Tamasauskas, Justin; Breton, Stéphanie; Prud’homme, Solange (2021): Simulation based assessment on representativeness of a new performance rating procedure for cold climate air source heat pumps. *E3S Web Conf. 246, S. 6004.* doi: [10.1051/e3sconf/202124606004](https://doi.org/10.1051/e3sconf/202124606004).

##### Cycling losses, start-up ramps and cooldown
The general effect of energy system components experiencing reduced output power and/or efficiency during a starting phase of operation is described in [this section](resie_transient_effects.md#part-load-ratio-dependent-efficiency). This effect is also observed for heat pumps and described in the literature. At the moment this effect is not included in the model and not implemented. This will be included in a future update as it is a vital part of a detailed operational simulation.
Copy link
Member

Choose a reason for hiding this comment

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

Cycling losses are represented by the PLF curves, no?

This function is not concerned with the power at which the heat pump can operate for the given slice and does not decide the PLR. The inputs to the function are available energies (or to be supplied for the heat output), temperatures and the PLR. They are specific to the slice in question.

#### Part load operation and optimisation of PLR
Given the slicing algorithm and the function `energies_for_one_slice` as described above, it is then the question of how much power is available for each slice and at which PLR each slice is performed. The minimum and maximum power for each slice depends only temperatures, however the PLR does affect the COP.
Copy link
Member

Choose a reason for hiding this comment

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

Typo: The minimum and maximum power for each slice depends only on temperatures,


Because the first pass is calculated with full power for each slice and the algorithm stops if the maximum power fraction has been reached, it is guaranteed that the heat pump can fulfill the slices as they have been calculated within the frame of the timestep. However if there is time "left over", it could be the case that recalculating the slices with lower \(\kappa\) for some or all slices leads to an improvement in the efficiency while still observing the power limitations. This leads to an optimisation problem if \(\kappa_{opt} < 1\), for example for inverter heat pumps (see [this section](resie_energy_system_components.md#part-load-efficiency)).

**Note:** At time of writing a proof-of-concept optimisation option has been implemented, however it leads to a hefty step down in performance and does not work very well in approaching the global optimum. It is recommended to only use it for detailed simulations of a heat pump when poor performance is not an issue.
Copy link
Member

Choose a reason for hiding this comment

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

Do I understand correctly that currently inverter heat pumps cannot be modelled with high efficiency, even if there is only one heat layer in the input and output?

\(T_{source,in}\) | evaporator inlet temperature | [°C]
\(COP\) | calculated COP | [-]
\(T_{in,mixed}\) | weighted-mean of chosen input temperatures | [°C]
\(T_{out,mixed}\) | weighted-mean of chosen output temperatures | [°C]
Copy link
Member

Choose a reason for hiding this comment

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

T_in,mixed and T_out,mixed are not used above. How are they calculated?



**State Variables of Heat Pump:**
\(\dot{Q}_{nominal}\) | nominal thermal energy output of heat pump | [W]
Copy link
Member

Choose a reason for hiding this comment

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

That is actually the maximum and not the nominal energy, isn't it?

| **System function** | `transformer` |
| **Medium** | |
| **Input media** | `m_el_in`/`m_e_ac_230v`, `m_heat_in`/`m_h_w_lt1` |
| **Output media** | `m_heat_out`/`m_h_w_ht1` |
| **Tracked values** | `IN`, `OUT`, `COP`, `Losses` |
| **Tracked values** | `IN`, `OUT`, `COP`, `MixingTemperature_Input`, `MixingTemperature_Output` |

Elevates supplied low temperature heat to a higher temperature with input electricity.

| Name | Type | R/D | Example | Description |
Copy link
Member

Choose a reason for hiding this comment

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

Units are missing!

| **System function** | `transformer` |
| **Medium** | |
| **Input media** | `m_el_in`/`m_e_ac_230v`, `m_heat_in`/`m_h_w_lt1` |
| **Output media** | `m_heat_out`/`m_h_w_ht1` |
| **Tracked values** | `IN`, `OUT`, `COP`, `Losses` |
| **Tracked values** | `IN`, `OUT`, `COP`, `MixingTemperature_Input`, `MixingTemperature_Output` |
Copy link
Member

Choose a reason for hiding this comment

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

Is there an easy way to track the total PLR in the current time step? That would be interesting for cross-checking the results...

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.

2 participants