From c17f708d2640e1c45f5ddfc9c4a6539af718b7a0 Mon Sep 17 00:00:00 2001 From: Etienne Ott Date: Fri, 6 Sep 2024 09:38:25 +0200 Subject: [PATCH 01/17] Remove use of prefix HP for naming variables of a heat pump. --- docs/fig/221006_HeatPump_Energyflow.svg | 4 +- docs/fig/221018_HeatPump_system_chart.svg | 4 +- .../221006_HeatPump_Energyflow.drawio | 110 +++++++++++- .../221018_HeatPump_system_chart.drawio | 161 +++++++++++++++++- docs/resie_energy_system_components.md | 112 ++++++------ 5 files changed, 329 insertions(+), 62 deletions(-) diff --git a/docs/fig/221006_HeatPump_Energyflow.svg b/docs/fig/221006_HeatPump_Energyflow.svg index 27f7c30..474fddd 100644 --- a/docs/fig/221006_HeatPump_Energyflow.svg +++ b/docs/fig/221006_HeatPump_Energyflow.svg @@ -1,4 +1,4 @@ - + -
Heat Pump (HP)
Heat Pump (HP)
QHP,in
QHP,in
QHP,out
QHP,out
Pel,HP
Pel,HP
.
.
.
.
THP,source,in
THP,sou...
THP,source,out
THP,sou...
THP,sink,out
THP,sin...
THP,sink,in
THP,sin...
power electronics
power electro...
Pel,HP,supply
Pel,HP,...
Pel,HP,loss
Pel,HP,...
Text is not SVG - cannot display
\ No newline at end of file +
Heat Pump (HP)
Heat Pump (HP)
Qin
Qin
Qout
Qout
Pel
Pel
.
.
Tsource,in
Tsource...
Tsource,out
Tsource...
Tsink,out
Tsink,o...
Tsink,in
Tsink,in
power electronics
power electro...
Pel,supply
Pel,sup...
Pel,loss
Pel,loss
.
.
Text is not SVG - cannot display
\ No newline at end of file diff --git a/docs/fig/221018_HeatPump_system_chart.svg b/docs/fig/221018_HeatPump_system_chart.svg index 0a86dbb..621f241 100644 --- a/docs/fig/221018_HeatPump_system_chart.svg +++ b/docs/fig/221018_HeatPump_system_chart.svg @@ -1,4 +1,4 @@ - + -
Compressor
Compr...
Expansion Valve
Expansion Valve
Condenser
Condenser
Evaporator
Evaporator
Qin, THP,source,in
Qin, THP,source,in
Qout, THP,sink,out
Qout, THP,sink,out
.
.
.
.
Pel,in
Pel,in
heat source (cold)
heat source (cold)
heat sink (hot)
heat sink (hot)
Text is not SVG - cannot display
\ No newline at end of file +
Compressor
Compr...
Expansion Valve
Expansion Valve
Condenser
Condenser
Evaporator
Evaporator
Qin, Tsource,in
Qin, Tsource,in
Qout, Tsink,out
Qout, Tsink,out
.
.
Pel,in
Pel,in
heat source (cold)
heat source (cold)
heat sink (hot)
heat sink (hot)
.
.
Text is not SVG - cannot display
\ No newline at end of file diff --git a/docs/fig/source_files/221006_HeatPump_Energyflow.drawio b/docs/fig/source_files/221006_HeatPump_Energyflow.drawio index 7ced176..6020208 100644 --- a/docs/fig/source_files/221006_HeatPump_Energyflow.drawio +++ b/docs/fig/source_files/221006_HeatPump_Energyflow.drawio @@ -1 +1,109 @@ -7Vtdc5s4FP01ntl9iAckPh8dp272YWfcSTttnjpaUGxtMaIgant//QojAUI4SR1s7In9EKMr6Urcc3SMrsgITlebjylKln/TEEcjYISbEbwbAeB7Jv9bGLalwfGc0rBISViazNrwQP7DwmgIa05CnCkNGaURI4lqDGgc44ApNpSmdK02e6KROmqCFlgzPAQo0q1fSciWpdUDbm2/x2SxlCObjl/WrJBsLO4kW6KQrhsm+GEEpymlrLxabaY4KmIn41L2m+2prSaW4pi9psNf/35B+ZdP3z2WfJt8/XwzC25/3ggvv1CUixseASfi/m6fKHfLZ822IhTOz5zKiptsB9SENzCdhGN9W9fzq0XxfY9R4WCerxL+9cf9/E/pms+x9F42FOGpBgIpzeMQF9M2ePV6SRh+SFBQ1K45ybhtyVYRL5liOoI2plN5a4ZF3iNOGd40TCJMHzFdYZZueRNRC21YdhGchaZdltc1A0xXwLpsom8IIxKsW1S+a2D4hcDmN3CCHTi1oobjcFIQnpeCCGUZCdRAqVHl0Um335qFx6IwBrYs322atXdbUcpYSn9UawFUlimNaLqbCXRtdzKb/Q42OFRWoY5MI/J2R+ClLcURYuSXuna7wBAjzCnZsXwf8H4Lz4zmaYBFr+ZaazkCxguOGEoXmGmOdtyobvtwuliXRJeZa9iGfYF0sUELZetAujjuC46OTBf7kujCyXJ3keqioXyoumi8O7G6OGdMlycSRQ2yPHkBDoJu1Sk+gkZN+8yaWJMLpJf2m3OoGmm/gidWI7dveukSsvt086eFek3Nsa2Q8wVm4g1hjW689CjmVlzXnYqC7LOXYSVyz4RMCkKJzDMNz4uyFvQUpgG3L0U0T0tZ/ziUPUjYKnJfmoCZbd1xrLF9GB8AbLuyT8oHSb8rId70wKSheDAhXHNgQuiJlk8yHZLl/7wt0TIfgSmJG9mVncc9yRWGN0wlmkqYmMa4xS5hQhFZxAVbOV0wt98WGRUSoGgiKlYkDIthOlM2Kp2PkLXx2k8tYhPc4KrTwVV4rJSNqeds+oWc5uy9Y+7KLhXo3sCgd2VeBOYJit8E+rwv9hQZ+un9fB95autuxu+NU5bc7siHUkmgwTil77fH7wcOx1JXOBh6hXvvGg3fVeGAYGA49K3X515/ZcXe+/qEBYr9ugq+MTD4QN9mHQn867OWjr4/sBIDfU/VM/ok/nHFfrehd85t5YPTYH8VfQ36wZd917sQyjsrQZX7qqGVWTAN7YSuedSBgSMccMRiEmQneU9l37FTD5BB+Y6VgMz09R2MaVg6Zs7RMOv9hPniz3TOJMdqQXdsq6cwJnRUL69Nsnb58lsz2pNn5cijbaNZUjTInpt2axzbaZG09NhrEhd0HXyfbXJnmuVJEm2vWZ7uLI/RIpAxcJYHdr2KOZxECqmT4vaoyF631IUoW+4GN5+D6NVn2WcikI7hj/3mR6WNd+iJtZyezDKClqOehNIG3eMcVShlUuhChDKiWXaVyVc9/QNDfxW6J5nkxfpl+JKJ9X8UwA//Aw== \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/fig/source_files/221018_HeatPump_system_chart.drawio b/docs/fig/source_files/221018_HeatPump_system_chart.drawio index 4966b30..964d9ce 100644 --- a/docs/fig/source_files/221018_HeatPump_system_chart.drawio +++ b/docs/fig/source_files/221018_HeatPump_system_chart.drawio @@ -1 +1,160 @@ -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 \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/resie_energy_system_components.md b/docs/resie_energy_system_components.md index 1dd3aa3..39cc5bd 100644 --- a/docs/resie_energy_system_components.md +++ b/docs/resie_energy_system_components.md @@ -18,7 +18,7 @@ Components: - Energy flows into a component are positive, energy flows out of a component are negative - Components are single units like a heat pump, a buffer tank, a battery or a photovoltaic power plant while energy systems are interconnected components -- The maximum power that a component can consume or produce is called the nominal power or design power. This is typically defined by one of the inputs or outputs of the component, for example as the electric power draw of an electrolyser or the heat production of a gas boiler. +- The maximum power that a component can consume or produce is called the nominal power or design power or rated power. This is typically defined by one of the inputs or outputs of the component, for example as the electric power draw of an electrolyser or the heat production of a gas boiler. - The fraction of utilised power divided by nominal power at a given point in time is called the part load ratio (PLR), or operation point, or power fraction, and can be signified with \(\kappa\) for the sake of brevity ## Heat pump (HP) @@ -27,37 +27,37 @@ As heat pumps, electrically driven variable-speed and on-off compressor heat pum ![General System chart of a heat pump](fig/221018_HeatPump_system_chart.svg) -The energy balance at the heat pump is built up from the incoming electricity \(P_{el,HP}\), the incoming heat at a low temperature level \(T_{HP,source,in}\) and the outgoing heat flow at a higher temperature level \(T_{HP,sink,out}\). +The energy balance at the heat pump is built up from the incoming electricity \(P_{el}\), the incoming heat at a low temperature level \(T_{source,in}\) and the outgoing heat flow at a higher temperature level \(T_{sink,out}\). The energy balance of the heat pump model is shown in the following figure: ![Energy flow of heat pump](fig/221006_HeatPump_Energyflow.svg) -Using the electrical power \(P_{el,HP, supply}\), reduced by the losses of the power electronics \(P_{el,HP, loss}\), an energy flow \(\dot{Q}_{HP,in}\) with temperature \(T_{HP,source,in}\) is transformed to the energy flow \(\dot{Q}_{HP,out}\) with temperature \(T_{HP,sink,out}\). The efficiency of the heat pump is defined by the coefficient of performance (COP). The COP determines the electrical power \(P_{el,HP}\) required to raise the temperature of a mass flow from the lower temperature level \(T_{HP,source,in}\) to \(T_{HP,sink,out}\): +Using the electrical power \(P_{el,supply}\), reduced by the losses of the power electronics \(P_{el,loss}\), an energy flow \(\dot{Q}_{in}\) with temperature \(T_{source,in}\) is transformed to the energy flow \(\dot{Q}_{out}\) with temperature \(T_{sink,out}\). The efficiency of the heat pump is defined by the coefficient of performance (COP). The COP determines the electrical power \(P_{el}\) required to raise the temperature of a mass flow from the lower temperature level \(T_{source,in}\) to \(T_{sink,out}\): -$$ COP_{HP} = \frac{\dot{Q}_{HP,out}}{P_{el,HP}} \quad \leq \quad COP_{Carnot} = \frac{T_{HP,sink,out}[K]}{T_{HP,sink,out}-T_{HP,source,in} } $$ +$$ COP = \frac{\dot{Q}_{out}}{P_{el}} \quad \leq \quad COP_{Carnot} = \frac{T_{sink,out}[K]}{T_{sink,out}-T_{source,in} } $$ -$$ COP_{HP} = \eta_{Carnot} \ COP_{Carnot} \quad \text{with} \quad 0 \leq \eta_{Carnot} \leq 1 $$ +$$ COP = \eta_{Carnot} \ COP_{Carnot} \quad \text{with} \quad 0 \leq \eta_{Carnot} \leq 1 $$ The COP is always smaller than the maximum possible Carnot coefficient of performance (\(COP_{Carnot}\)), which is calculated from the condenser outlet and evaporator inlet temperature. The maximum possible COP calculated by Carnot is reduced by the carnot efficiency factor \(\eta_{Carnot}\), which is according to [Arpagaus2018][^Arpagaus2018] around 45 % for high temperature heat pumps and around 40 % for conventional heat pumps. The energy balance (or power balance) of the heat pump can be drawn up on the basis of the latter figure and on the ratio between supplied and dissipated heat power, expressed as the COP: -$$\dot{Q}_{HP,out} = \frac{COP_{HP}}{COP_{HP} -1} \ \dot{Q}_{HP,in} \mathrm{\quad with \quad} \dot{Q}_{HP,out} = \dot{Q}_{HP,in} + P_{HP,el} $$ +$$\dot{Q}_{out} = \frac{COP}{COP -1} \ \dot{Q}_{in} \mathrm{\quad with \quad} \dot{Q}_{out} = \dot{Q}_{in} + P_{el} $$ The power of the heat pump's electric supply, including the losses of the power electronics, is given as: -$$P_{el,HP,supply} = \frac{P_{el,HP}}{\eta_{HP,LE}}$$ +$$P_{el,supply} = \frac{P_{el}}{\eta_{LE}}$$ Since the temperatures of the heat flows entering and leaving the heat pump, which have not been considered so far, may also be relevant for connected components, the heat outputs can be calculated on the basis of the respective mass flow \(\dot{m}\) and the physical properties of the heat transfer medium (specific heat capacity \(c_{p}\) and, if applicable, the density \(\rho\)) by rearranging the following equation: $$ \dot{Q} = \dot{m} \ c_{p} \ (T_{max} - T_{min}) $$ -As a chiller follows the same principle as a heat pump, the same component can be used to simulate both technologies. The difference is the definition of the efficiency, as for a chiller the useful energy is not \(\dot{Q}_{HP,out}\) but \(\dot{Q}_{HP,in}\). This leads to the definition of the energy efficiency ratio (EER) for chillers as +As a chiller follows the same principle as a heat pump, the same component can be used to simulate both technologies. The difference is the definition of the efficiency, as for a chiller the useful energy is not \(\dot{Q}_{out}\) but \(\dot{Q}_{in}\). This leads to the definition of the energy efficiency ratio (EER) for chillers as -$$ EER = \frac{\dot{Q}_{HP,in}}{P_{el,HP}} = \frac{\dot{Q}_{HP,out} - P_{el,HP}}{P_{el,HP}} = COP - 1 $$ +$$ EER = \frac{\dot{Q}_{in}}{P_{el}} = \frac{\dot{Q}_{out} - P_{el}}{P_{el}} = COP - 1 $$ -As shown, the COP can be transferred to the EER. In the following, the description is made for heat pumps. The only adaption that has to be done for chillers is the change of the useful energy. Also, the efficiency function needs to be changed to EER (\(T_{HP,source,in}\), \(T_{HP,sink,out}\)) (if used) and for nonlinear part load efficiency the useful energy \(\dot{Q}_{HP,in}\) is assumed to be the linear reference energy instead of \(\dot{Q}_{HP,out}\) as for heating mode. +As shown, the COP can be transferred to the EER. In the following, the description is made for heat pumps. The only adaption that has to be done for chillers is the change of the useful energy. Also, the efficiency function needs to be changed to EER (\(T_{source,in}\), \(T_{sink,out}\)) (if used) and for nonlinear part load efficiency the useful energy \(\dot{Q}_{in}\) is assumed to be the linear reference energy instead of \(\dot{Q}_{out}\) as for heating mode. ### Modelling approaches for HP: Overview According to [Blervaque2015][^Blervaque2015], four different categories are described in the literature when it comes to the simulation of heat pumps: @@ -124,11 +124,11 @@ In order to address the early planning stage, general, market-averaged polynomia **ToDo**: Add method of calculating market-averaged polynomials! Biquadratic polynomials according to TRNSYS Type 401 -$$ \dot{Q}_{HP,max} = c_{q1} + c_{q2} \ \bar{T}_{HP,source,in} + c_{q3} \ \bar{T}_{HP,sink,out} + c_{q4} \ \bar{T}_{HP,source,in} \ \bar{T}_{HP,sink,out} + \cdot \cdot \cdot \\ - \ c_{q5} \ \bar{T}_{HP,source,in}^2 + c_{q6} \ \bar{T}_{HP,sink,out}^2 $$ +$$ \dot{Q}_{max} = c_{q1} + c_{q2} \ \bar{T}_{source,in} + c_{q3} \ \bar{T}_{sink,out} + c_{q4} \ \bar{T}_{source,in} \ \bar{T}_{sink,out} + \cdot \cdot \cdot \\ + \ c_{q5} \ \bar{T}_{source,in}^2 + c_{q6} \ \bar{T}_{sink,out}^2 $$ -$$ P_{el,HP,max} = c_{p1} + c_{p2} \ \bar{T}_{HP,source,in} + c_{p3} \ \bar{T}_{HP,sink,out} + c_{p4} \ \bar{T}_{HP,source,in} \ \bar{T}_{HP,sink,out} + \cdot \cdot \cdot \\ - \ c_{p5} \ \bar{T}_{HP,source,in}^2 + c_{p6} \ \bar{T}_{HP,sink,out}^2 $$ +$$ P_{el,max} = c_{p1} + c_{p2} \ \bar{T}_{source,in} + c_{p3} \ \bar{T}_{sink,out} + c_{p4} \ \bar{T}_{source,in} \ \bar{T}_{sink,out} + \cdot \cdot \cdot \\ + \ c_{p5} \ \bar{T}_{source,in}^2 + c_{p6} \ \bar{T}_{sink,out}^2 $$ where all temperatures have to be normed according to $$ \bar{T} = \frac{T \ [°C]}{273.15} + 1 $$ @@ -140,13 +140,13 @@ The second method to adjust the electrical and thermal energy would be a linear - the electrical power is dependent on the sink temperature, but independent on the source temperature (the higher the sink temperature the higher is the electrical power consumption) This gives the possibility to linearly adjust the available thermal power with the change of the source temperature and the electrical power demand with the change of the temperature of the sink. Which power needs to be adjusted depends on the choice of the control strategy - thermally or electrically controlled. -The gradients of the power de- or increase with a change of the temperature, \(f_{HP,\dot{Q} reduction}\) and \(f_{HP,P_{el} reduction}\), needs to be specified. Both factors can have a value of, for example, 0.02, which means a change of 2 % of the rated power per Kelvin of temperature shift with respect to the rated temperatures. The two factors are defined as follows: +The gradients of the power de- or increase with a change of the temperature, \(f_{\dot{Q} reduction}\) and \(f_{P_{el} reduction}\), needs to be specified. Both factors can have a value of, for example, 0.02, which means a change of 2 % of the rated power per Kelvin of temperature shift with respect to the rated temperatures. The two factors are defined as follows: $$ -\dot{Q}_{HP,out,temp. \ dependent} = \dot{Q}_{HP,out,rated} (1 + f_{HP,\dot{Q} reduction} \ (T_{HP,source,in,current} - T_{HP,source,in,rated})) +\dot{Q}_{out,temp. \ dependent} = \dot{Q}_{out,rated} (1 + f_{\dot{Q} reduction} \ (T_{source,in,current} - T_{source,in,rated})) $$ $$ -P_{el,HP,temp. \ dependent} = P_{el,HP,rated} (1 + f_{HP,P_{el} reduction} \ (T_{HP,sink,out,current} - T_{HP,sink,out,rated})) +P_{el,temp. \ dependent} = P_{el,rated} (1 + f_{P_{el} reduction} \ (T_{sink,out,current} - T_{sink,out,rated})) $$ With this method, the actual temperature-dependent relation of thermal and electrical power need to be determined using the temperature-dependent COP described earlier. @@ -177,7 +177,7 @@ Taking the correction factor curve from the figure above for inverter heat pumps The figure above shows also the difference of the part load factor comparing on-off and inverter heat pumps as well as the defined on-off losses in DIN EN 14825 for the calculation of the seasonal coefficient of performance (SCOP). -As described in the section "General description of HP", the COP is defined as the ratio of the heat output \(\dot{Q}_{HP,out}\) and the electrical input power \(P_{el,HP}\). The shown curves for the part load factor affects only the ratio of heat output to electrical input power and there is no information available on the actual change of the two dimensions. Therefore, the heat output of the heat pump itself is assumed to be linear in part load operation between \(\dot{Q}_{HP,out,min}\) at \(PLF_{HP,min}\) and \(\dot{Q}_{HP,out,max}\) at PLR = 1.0 as shown in the figure below. This leads to a non-linear relation of the power input to the part load ratio that was found more realistic as for inverter heat pumps, the observed efficiency change is mostly due to an efficiency change of the frequency converter and motor of the compressor. (QUELLE ToDo) +As described in the section "General description of HP", the COP is defined as the ratio of the heat output \(\dot{Q}_{out}\) and the electrical input power \(P_{el}\). The shown curves for the part load factor affects only the ratio of heat output to electrical input power and there is no information available on the actual change of the two dimensions. Therefore, the heat output of the heat pump itself is assumed to be linear in part load operation between \(\dot{Q}_{out,min}\) at \(PLF_{min}\) and \(\dot{Q}_{out,max}\) at PLR = 1.0 as shown in the figure below. This leads to a non-linear relation of the power input to the part load ratio that was found more realistic as for inverter heat pumps, the observed efficiency change is mostly due to an efficiency change of the frequency converter and motor of the compressor. (QUELLE ToDo) ![Thermal power of heatpump in partload](fig/221018_HeatPump_partload_thermal_power.svg) @@ -194,12 +194,12 @@ During preprocessing, the given curve of the PLF in dependence of the PLR (see o In every timestep, the two precomputed and normalized value tables of the thermal output and electrical input power are scaled up to the current maximum power, limited by the heat pump current full-load operation state. There, the actual COP at the current timestep is represented in the ration of both values. The two scaled value tables can then be used to determine the actual PLF that is necessary to cover the current demand or to limit the operation state due to the limited available electrical power (interpolation on value table with known power, or interpolation in preprocessing). For the thermal output power, this is trivial as the ratio of the maximum thermal power output to the thermal power demand is equal to the PLF. To calculate the PLF for the thermal input power, if this is a limited source according to the operational strategy, the two scaled value tables need to be subtracted from each other to get a third table: $$ -\dot{Q}_{HP,in}(PLF) = \dot{Q}_{HP,out}(PLF) - P_{el,HP,in}(PLF) +\dot{Q}_{in}(PLF) = \dot{Q}_{out}(PLF) - P_{el,in}(PLF) $$ This third value table, generated in each timestep, can then be used to determine the maximum possible PLF according to the available thermal input power from a limited thermal power source. -All three PLF (from thermal input and output as well as electrical input power) are then compared and the smallest one is chosen as operating state in the current timestep. If this value is smaller than the minimal allowed PLF of the heat pump \(PLF_{HP,min}\), the heat pump will not be in operation in the current timestep. +All three PLF (from thermal input and output as well as electrical input power) are then compared and the smallest one is chosen as operating state in the current timestep. If this value is smaller than the minimal allowed PLF of the heat pump \(PLF_{min}\), the heat pump will not be in operation in the current timestep. This method avoids the need to invert polynomial functions at each timestep and is computationally more efficient. @@ -229,17 +229,17 @@ For on-off heat pumps, \(a\) is set to 1 and the domain of the first equation ab To account for icing losses of heat pumps with air as source medium, the approach presented in TRNSYS Type 401 is used[^Wetter1996]. When considering icing-losses, make sure that icing losses are not already included in the polynomials for thermal and electrical power! -For the calculation of icing losses, five coefficients are needed: \(c_{HP,ice,A}\), \(c_{HP,ice,B}\), \(c_{HP,ice,C}\), \(c_{HP,ice,D}\) and \(c_{HP,ice,E}\). According to the Type 401, icing losses are calculated using a superposition of a gaussian curve with its maximum between 0 °C and 5 °C representing the maximum likelihood of frost within the heat pump (high absolute humidity) and a linear curve, representing the higher sensible energy effort to heat-up the components of the heat pump for defrosting. Exemplary curves are shown in the following figure (linear, gauss and superposition): +For the calculation of icing losses, five coefficients are needed: \(c_{ice,A}\), \(c_{ice,B}\), \(c_{ice,C}\), \(c_{ice,D}\) and \(c_{ice,E}\). According to the Type 401, icing losses are calculated using a superposition of a gaussian curve with its maximum between 0 °C and 5 °C representing the maximum likelihood of frost within the heat pump (high absolute humidity) and a linear curve, representing the higher sensible energy effort to heat-up the components of the heat pump for defrosting. Exemplary curves are shown in the following figure (linear, gauss and superposition): ![Heat pump icing losses of COP](fig/230108_Icing_Losses.png) -The exemplary coefficients for the curves in the figure above are \(c_{HP,ice,A} = 3\), \(c_{HP,ice,B} = -0.42\), \(c_{HP,ice,C}=15\), \(c_{HP,ice,D}=2\), \(c_{HP,ice,E}=30\). +The exemplary coefficients for the curves in the figure above are \(c_{ice,A} = 3\), \(c_{ice,B} = -0.42\), \(c_{ice,C}=15\), \(c_{ice,D}=2\), \(c_{ice,E}=30\). The resulting superposition, which represents the percentage loss of the COP due to icing as a function of ambient temperature, is expressed by the following formula, where the coefficients are reduced to the last letter for better readability: $$ \Delta COP_{ice,loss} = \begin{cases} - A + B \ T_{HP,source,in} + C \ exp^{-\frac{(T_{HP,source,in}-D)^2}{E}} &\text{for } A + B \ T_{HP,source,in} > 0\ \\[5pt] - C \ exp^{-\frac{(T_{HP,source,in}-D)^2}{E}} &\text{for } A + B \ T_{HP,source,in} \leq 0\ \\ + A + B \ T_{source,in} + C \ exp^{-\frac{(T_{source,in}-D)^2}{E}} &\text{for } A + B \ T_{source,in} > 0\ \\[5pt] + C \ exp^{-\frac{(T_{source,in}-D)^2}{E}} &\text{for } A + B \ T_{source,in} \leq 0\ \\ \end{cases} \\ $$ @@ -249,19 +249,19 @@ $$ COP_{ice,corrected} = COP \ (1-\Delta COP_{ice,loss}) $$ According to the results found in Wei2021[^Wei2021], it is assumed that the decrease of the COP due to icing losses will only increase the power input of the heat pump. It will not affect the thermal power output. -[^Wei2021]: Wei, Wenzhe et al. (2021): Investigation on the regulating methods of air source heat pump system used for district heating: Considering the energy loss caused by frosting and on–off. In: *Energy and Buildings 235*, S. 110731. doi: [10.1016/j.enbuild.2021.110731]((https://doi.org/10.1016/j.enbuild.2021.110731). +[^Wei2021]: Wei, Wenzhe et al. (2021): Investigation on the regulating methods of air source heat pump system used for district heating: Considering the energy loss caused by frosting and on–off. In: *Energy and Buildings 235*, S. 110731. doi: [10.1016/j.enbuild.2021.110731](https://doi.org/10.1016/j.enbuild.2021.110731). ### Steps to perform in the simulation model of the heat pump The calculation is based on TRNSYS Type 401[^Wetter1996] that is almost similar to Type 204[^Alfjei1996] (Type 204 provides an english documentation). The cycling losses of the heat pump in both TRNSYS models are calculated using an exponential function to describe the thermal capacity effects during heat-up and cool-down. Here, these cycling losses will only be used during start and stop of the heat pump - actual cycling losses from on-off heatpumps will be considered separately in the process to allow the consideration of modulating heat pumps as well. -There are two different possibilities in calculating the full load power of the heat pump in dependence of \(T_{HP,sink,out}\) and \(T_{HP,source,in}\). An overview of the simulation steps and the required inputs are given in the following figure. A detailed description of the process shown in the figure is given below. Each of the main steps is described in more detail in the previous chapter. +There are two different possibilities in calculating the full load power of the heat pump in dependence of \(T_{sink,out}\) and \(T_{source,in}\). An overview of the simulation steps and the required inputs are given in the following figure. A detailed description of the process shown in the figure is given below. Each of the main steps is described in more detail in the previous chapter. ![Heat pump calculation steps](fig/230110_HeatPump_calculation_steps.svg) Steps to calculate the electrical and thermal energy in- and outputs of HP using a polynomial fit of the thermal and electrical power (compare to left side of figure above): -- using polynomial fits to calculate stationary thermal in- and output and electrical full-load power at given temperatures of \(T_{HP,sink,out}\) and \(T_{HP,source,in}\) for given nominal thermal power +- using polynomial fits to calculate stationary thermal in- and output and electrical full-load power at given temperatures of \(T_{sink,out}\) and \(T_{source,in}\) for given nominal thermal power - differing source and sink medium: - air-water - water-water @@ -272,7 +272,7 @@ Steps to calculate the electrical and thermal energy in- and outputs of HP using - polynomial fits have to be normalized to rated power at specified temperatures! Rated power has to be related always to the same temperature lift according to DIN EN 14511 --> different fits for normal (B10/W35, W10/W35, A10/W35) and high temperature (B35/W85, W35/W85) heat pumps - reduce thermal power output due to transient capacity effects during start-up as average over current timestep and calculate COP\(_{transient}\) at full load with calculated thermal and electrical power - may adjust COP\(_{transient}\) by icing losses for air-water and air-air heat pumps; calculate COP\(_{transient,ice}\), recalculate electrical input power -- get demand/availability of thermal or electrical energy (mind \(\eta_{HP,PE}\)!), differing if thermal and/or electric energy related operation strategy is chosen +- get demand/availability of thermal or electrical energy (mind \(\eta_{PE}\)!), differing if thermal and/or electric energy related operation strategy is chosen - calculate smallest non-linear part-load ratio (PLR) with current demand and temperature-dependent, transient full-load power and precalculated value tables from PLF-curve, in dependency of heat pump type (inverter, on-off) - calculate part-load thermal and electrical energy, recalculate COP\(_{transient,ice,partload}\) @@ -280,14 +280,14 @@ If universal data table or the Carnot-COP reduced by an efficiency factor should - Get power at current temperatures - using nominal power without a temperature-dependency or - - using polynomial fits to calculate stationary thermal **or** electrical full-load power at given temperatures of \(T_{HP,sink,out}\) and \(T_{HP,source,in}\), depending on control strategy (see above) -- get stationary full-load COP at given temperatures of \(T_{HP,sink,out}\) and \(T_{HP,source,in}\) either from + - using polynomial fits to calculate stationary thermal **or** electrical full-load power at given temperatures of \(T_{sink,out}\) and \(T_{source,in}\), depending on control strategy (see above) +- get stationary full-load COP at given temperatures of \(T_{sink,out}\) and \(T_{source,in}\) either from - COP data table (fitted to polynomials in pre-calculation) or - Carnot-COP reduced by an efficiency factor - determine the unknown, non-controlled full load power (electrical or thermal) with known, controlled power and COP - continue with transient capacity effects as described above -Contrary to the TRNSYS Type 401, the mass flow here is variable and not constant within two time steps, therefore the \(T_{HP,sink,out}\) and \(\dot{Q}_{HP,sink,out}\) can be calculated directly without the need of iteration as implemented in Type 401. Here, the \(T_{HP,sink,out}\) is a fixed, user-specified value in the presented simplified model. +Contrary to the TRNSYS Type 401, the mass flow here is variable and not constant within two time steps, therefore the \(T_{sink,out}\) and \(\dot{Q}_{sink,out}\) can be calculated directly without the need of iteration as implemented in Type 401. Here, the \(T_{sink,out}\) is a fixed, user-specified value in the presented simplified model. The polynomials describing the temperature-depended thermal and electrical power of the heat pump need to be normalized to the power consumption at the rated operation point in order to be able to auto-scale the size in parameter variation studies. Therefore, the following steps are necessary: @@ -304,45 +304,45 @@ The polynomials describing the temperature-depended thermal and electrical power Symbol | Description | Unit -------- | -------- | -------- -\(\dot{Q}_{HP,in}\) | heat flow supplied to the HP (heat source) | [W] -\(\dot{Q}_{HP,out}\) | heat flow leaving the HP (heat sink) | [W] -\(P_{el,HP}\) | electric power demand of the HP | [W] -\(P_{el,HP,supply}\) | electric power demand of the HP incl. losses of the power electronics | [W] -\(T_{HP,sink,in}\) | condenser inlet temperature - not used | [°C] -\(T_{HP,sink,out}\) | condenser outlet temperature | [°C] -\(T_{HP,source,in}\) | evaporator inlet temperature | [°C] -\(T_{HP,source,out}\) | evaporator outlet temperature - not used | [°C] +\(\dot{Q}_{in}\) | heat flow supplied to the HP (heat source) | [W] +\(\dot{Q}_{out}\) | heat flow leaving the HP (heat sink) | [W] +\(P_{el}\) | electric power demand of the HP | [W] +\(P_{el,supply}\) | electric power demand of the HP incl. losses of the power electronics | [W] +\(T_{sink,in}\) | condenser inlet temperature - not used | [°C] +\(T_{sink,out}\) | condenser outlet temperature | [°C] +\(T_{source,in}\) | evaporator inlet temperature | [°C] +\(T_{source,out}\) | evaporator outlet temperature - not used | [°C] **Parameter of the Heat Pump:** Symbol | Description | Unit -------- | -------- | -------- -\(\dot{Q}_{HP,rated}\) | rated thermal energy output of heat pump at specified conditions | [W] -\(\dot{Q}_{HP,max}(T_{HP,sink,out}, T_{HP,source,in})\) | (normalized) polynomial of maximum full load thermal heat output at given temperatures | [W] -\(P_{el,HP,max}(T_{HP,sink,out}, T_{HP,source,in})\) | (normalized) polynomial of maximum full load electrical power output at given temperatures | [W] +\(\dot{Q}_{rated}\) | rated thermal energy output of heat pump at specified conditions | [W] +\(\dot{Q}_{max}(T_{sink,out}, T_{source,in})\) | (normalized) polynomial of maximum full load thermal heat output at given temperatures | [W] +\(P_{el,max}(T_{sink,out}, T_{source,in})\) | (normalized) polynomial of maximum full load electrical power output at given temperatures | [W] or || -\(f_{HP,\dot{Q} reduction}\) | linear reduction factor for nominal full load thermal output power with respect to \(T_{HP,source,in}\) | [%/°C] -\(f_{HP,P_{el} reduction}\) | linear reduction factor for nominal full load electrical input power with respect to \(T_{HP,sink,out}\) | [%/°C] -\(COP_{HP}(T_{HP,sink,out}, T_{HP,source,in})\) | coefficient of performance (COP) of the heat pump depending on \(T_{HP,sink,out}\) and \(T_{HP,source,in}\) | [-] +\(f_{\dot{Q} reduction}\) | linear reduction factor for nominal full load thermal output power with respect to \(T_{source,in}\) | [%/°C] +\(f_{P_{el} reduction}\) | linear reduction factor for nominal full load electrical input power with respect to \(T_{sink,out}\) | [%/°C] +\(COP(T_{sink,out}, T_{source,in})\) | coefficient of performance (COP) of the heat pump depending on \(T_{sink,out}\) and \(T_{source,in}\) | [-] \(\eta_{Carnot}\) | efficiency factor of heat pump, reduces the Carnot-COP | [-] and | | -\(PL_{HP,min}\) | minimum possible part load of the heat pump | [%] -\(PLR_{HP,max}\) | part load ratio at point of maximum efficiency (inverter only) | [-] -\(PLF_{HP,max}\) | part load factor at point of maximum efficiency (inverter only) | [-] -\(PLF_{HP,PLR=1}\) | part load factor at part load ratio = 1 (inverter only) | [-] -\(cc_{HP}\) | coefficient for part load curve according to DIN EN 14825 | [-] -\(c_{HP,ice,A} \ : \ c_{HP,ice,E}\) | five coefficients for curve with icing losses according to TRNSYS Type 401 (air heat pump only) | [-] -\(\eta_{HP,PE}\) | efficiency of power electronics of heat pump | [-] -\(MOT_{HP}\) | minimum operating time of heat pump | [min] -\(SUT_{HP}\) | start-up time of the HP until full heat supply (linear curve) | [min] -\(CDT_{HP}\) | cool-down time of the HP from full heat supply to ambient (linear curve) | [min] +\(PL_{min}\) | minimum possible part load of the heat pump | [%] +\(PLR_{max}\) | part load ratio at point of maximum efficiency (inverter only) | [-] +\(PLF_{max}\) | part load factor at point of maximum efficiency (inverter only) | [-] +\(PLF_{PLR=1}\) | part load factor at part load ratio = 1 (inverter only) | [-] +\(cc\) | coefficient for part load curve according to DIN EN 14825 | [-] +\(c_{ice,A} \ : \ c_{ice,E}\) | five coefficients for curve with icing losses according to TRNSYS Type 401 (air heat pump only) | [-] +\(\eta_{PE}\) | efficiency of power electronics of heat pump | [-] +\(MOT\) | minimum operating time of heat pump | [min] +\(SUT\) | start-up time of the HP until full heat supply (linear curve) | [min] +\(CDT\) | cool-down time of the HP from full heat supply to ambient (linear curve) | [min] **State Variables of Heat Pump:** Symbol | Description | Unit -------- | -------- | -------- -\(x_{HP}\) | current operating state (on, off, part load) | [%] +\(x\) | current operating state (on, off, part load) | [%] From 37bb725da32b7530b4bc02a54f80401b6c46c273 Mon Sep 17 00:00:00 2001 From: Etienne Ott Date: Fri, 6 Sep 2024 15:31:13 +0200 Subject: [PATCH 02/17] Update section on general description of heat pumps. --- docs/resie_energy_system_components.md | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/docs/resie_energy_system_components.md b/docs/resie_energy_system_components.md index 39cc5bd..9f3b205 100644 --- a/docs/resie_energy_system_components.md +++ b/docs/resie_energy_system_components.md @@ -22,8 +22,10 @@ Components: - The fraction of utilised power divided by nominal power at a given point in time is called the part load ratio (PLR), or operation point, or power fraction, and can be signified with \(\kappa\) for the sake of brevity ## Heat pump (HP) -### General description of HP -As heat pumps, electrically driven variable-speed and on-off compressor heat pumps can be integrated into the simulation model of ReSiE. Their general system chart with the denotation of the in- and outputs is shown in the figure below. In general, a gaseous refrigerant is compressed by the compressor requiring electrical energy, resulting in a high temperature of the refrigerant. The refrigerant is then condensed in the condenser and it releases the energy to the condenser liquid at a high temperature level. After that, the refrigerant is expanded and completely liquefied in the expansion valve. In the following evaporator, the refrigerant is then evaporated at a low temperature level with the help of a low-temperature heat source, after which it is fed back into the compressor. +Heat pumps use thermodynamic cycles to elevate a medium on one side of the cycle to a higher temperature by lowering the temperature of the medium on the other side, which requires an input of electricity to run the sub-components. The electricity used becomes part of the heat being moved. Heat pump technologies include plants to provide buildings or heat networks with heat for room heating and DHW, as well as other uses such as refrigeration components or Peltier elements. While there are also heat pumps using chemical fuels instead of electricity, these are not included in the model within ReSiE. The two most common technologies, electrically driven variable-speed and on-off compressor heat pumps, are the best fit for the heat pump model described in the following. + +### General description +The general system chart of a heat pump with the denotation of the in- and outputs is shown in the figure below. In general, a gaseous refrigerant is compressed by the compressor requiring electrical energy, resulting in a high temperature of the refrigerant. The refrigerant is then condensed in the condenser and it releases the energy to the condenser liquid at a high temperature level. After that, the refrigerant is expanded and completely liquefied in the expansion valve. In the following evaporator, the refrigerant is then evaporated at a low temperature level with the help of a low-temperature heat source, after which it is fed back into the compressor. ![General System chart of a heat pump](fig/221018_HeatPump_system_chart.svg) @@ -47,17 +49,21 @@ $$\dot{Q}_{out} = \frac{COP}{COP -1} \ \dot{Q}_{in} \mathrm{\quad with \quad} \d The power of the heat pump's electric supply, including the losses of the power electronics, is given as: -$$P_{el,supply} = \frac{P_{el}}{\eta_{LE}}$$ +$$P_{el,supply} = \frac{P_{el}}{\eta_{PS}}$$ + +However, as the efficiency of a heat pump becomes quite complicated to calculate and is often determined from data sheets or measurements, the efficiency of the power supply by itself is difficult to determine. Thus it is not considered separately from the other factors and not included in the model within ReSiE as a separate factor. + +While ReSiE deals in energy values and energy flow (power), if required the following equation can be used to determine other variables of the heat input or output: -Since the temperatures of the heat flows entering and leaving the heat pump, which have not been considered so far, may also be relevant for connected components, the heat outputs can be calculated on the basis of the respective mass flow \(\dot{m}\) and the physical properties of the heat transfer medium (specific heat capacity \(c_{p}\) and, if applicable, the density \(\rho\)) by rearranging the following equation: +$$ \dot{Q} = \dot{m} \ c_{p} \ (T_{in} - T_{out}) $$ -$$ \dot{Q} = \dot{m} \ c_{p} \ (T_{max} - T_{min}) $$ +where \(\dot{m}\) is the mass flow of the medium and \(c_{p}\) its specific heat capacity. -As a chiller follows the same principle as a heat pump, the same component can be used to simulate both technologies. The difference is the definition of the efficiency, as for a chiller the useful energy is not \(\dot{Q}_{out}\) but \(\dot{Q}_{in}\). This leads to the definition of the energy efficiency ratio (EER) for chillers as +As a chiller follows the same principle as a heat pump, where the lowering of temperature is the desired outcome. The difference is the definition of the efficiency, as for a chiller the useful energy is not \(\dot{Q}_{out}\) but \(\dot{Q}_{in}\). This leads to the definition of the energy efficiency ratio (EER) for chillers as -$$ EER = \frac{\dot{Q}_{in}}{P_{el}} = \frac{\dot{Q}_{out} - P_{el}}{P_{el}} = COP - 1 $$ +$$ EER = \frac{\dot{Q}_{in}}{P_{el}} = \frac{\dot{Q}_{out} - P_{el}}{P_{el}} = COP - 1 $$ -As shown, the COP can be transferred to the EER. In the following, the description is made for heat pumps. The only adaption that has to be done for chillers is the change of the useful energy. Also, the efficiency function needs to be changed to EER (\(T_{source,in}\), \(T_{sink,out}\)) (if used) and for nonlinear part load efficiency the useful energy \(\dot{Q}_{in}\) is assumed to be the linear reference energy instead of \(\dot{Q}_{out}\) as for heating mode. +Because cooling demands in ReSiE are modeled as fixed sources of heat, no changes in the heat pump definition is required and the EER is not needed for the calculations. ### Modelling approaches for HP: Overview According to [Blervaque2015][^Blervaque2015], four different categories are described in the literature when it comes to the simulation of heat pumps: From 3ae3a5e667011c401cc88814cdd8306b61f25317 Mon Sep 17 00:00:00 2001 From: Etienne Ott Date: Tue, 10 Sep 2024 11:16:03 +0200 Subject: [PATCH 03/17] Update sections on detailed description of heat pump and COP. --- docs/resie_energy_system_components.md | 25 +++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/docs/resie_energy_system_components.md b/docs/resie_energy_system_components.md index 9f3b205..bdd4c91 100644 --- a/docs/resie_energy_system_components.md +++ b/docs/resie_energy_system_components.md @@ -65,7 +65,7 @@ $$ EER = \frac{\dot{Q}_{in}}{P_{el}} = \frac{\dot{Q}_{out} - P_{el}}{P_{el}} = C Because cooling demands in ReSiE are modeled as fixed sources of heat, no changes in the heat pump definition is required and the EER is not needed for the calculations. -### Modelling approaches for HP: Overview +### Modelling approaches: Overview According to [Blervaque2015][^Blervaque2015], four different categories are described in the literature when it comes to the simulation of heat pumps: - **quasi-static empirical models**: equation-fit models based on discretized manufacturer or certification data fitted to polynomials, used for example in EnergyPlus or TRNSYS @@ -83,12 +83,12 @@ There are several aspects to be considered when simulating a heat pump based on The COP of a heat pump, representing the efficiency in a current timestep, depends highly on the temperature of the source and the requested temperature of the heat demand. Generally speaking, the efficiency and thus the COP decreases with larger temperature differences between source and sink. -Additionally, the maximum thermal power of the heat pump is not constant for different operation temperatures. The available thermal power is decreasing with lower source temperature, an effect that mainly occurs in heat pumps with air as the source medium. The rated power given for a specific heat pump is only valid for a specified combination of sink and source temperature. The specification for the declaration of the rated power is described in DIN EN 14511[^DINEN14511]. +Additionally, the maximum thermal power of the heat pump is not constant for different operational temperatures. The available thermal power is decreasing with lower source temperature, an effect that mainly occurs in heat pumps with air as the source medium. The rated power given for a specific heat pump is only valid for a specified combination of sink and source temperature. The specification for the declaration of the rated power is described in DIN EN 14511[^DINEN14511]. [^DINEN14511]: DIN EN 14511:2018 (2018): Air conditioner, liquid chilling packages and heat pumps for space heating and cooling and process chillers, with electrically driven compressors. DIN e.V., Beuth-Verlag, Berlin. -Furthermore, the efficiency and therefor the COP is changing in part load operation. In the past, mostly on-off heat pump where used, regulating the total power output in a given time span by alternating the current state between on and off. This causes efficiency losses mostly due to thermal capacity effects and initial compression power needed at each start, or rather the compression losses at each shutdown. [Socal2021][^Socal2021] -In the last years, modulating heat pumps are more common, using a frequency inverter at the electrical power input to adjust the speed of the compression motor and therefor affecting the thermal power output. Interestingly, this method leads to an efficiency increase in part load operation with a peak in efficiency at around 30 to 60 % of the nominal power output. In the literature, many research groups have investigated this effect, compare for example to Bettanini2003[^Bettanini2003], Toffanin2019[^Toffanin2019], Torregrosa-Jaime2008[^Torregrosa-Jaime2008], Fuentes2019[^Fuentes2019], Blervaque2015[^Blervaque2015] or Fahlen2012[^Fahlen2012]. +Furthermore, the efficiency and therefore the COP is changing in part load operation. In the past, mostly on-off heat pump were used, regulating the total power output in a given time span by alternating the current state between on and off. This causes efficiency losses mostly due to thermal capacity effects and initial compression power needed at each start, or rather the compression losses at each shutdown. [Socal2021][^Socal2021] +In the last few years, modulating heat pumps have become more common, using a frequency inverter at the electrical power input to adjust the speed of the compression motor and therefore affect the thermal power output. Interestingly, this method leads to an efficiency increase in part load operation with a peak in efficiency at around 30 to 60 % of the nominal power output. In the literature, many research groups have investigated this effect, compare for example to Bettanini2003[^Bettanini2003], Toffanin2019[^Toffanin2019], Torregrosa-Jaime2008[^Torregrosa-Jaime2008], Fuentes2019[^Fuentes2019], Blervaque2015[^Blervaque2015] or Fahlen2012[^Fahlen2012]. When heat pumps with air as source medium are used, the losses due to icing effects need to be considered as well. @@ -104,21 +104,26 @@ When heat pumps with air as source medium are used, the losses due to icing effe [^Fahlen2012]: Fahlén, Per (2012): Capacity control of heat pumps. *REHVA Journal Oktober 2012*, S. 28–31. -For a most realistic representation, all four discussed effects need to be considered - temperature-dependent COP, temperature-dependent power, part-load-dependent COP and icing losses. The calculation of these dependencies will be described below. +For a more realistic representation, all four discussed effects need to be considered - temperature-dependent COP, temperature-dependent power, part-load-dependent COP and icing losses. The calculation of these dependencies will be described below. -### Modelling approaches for HP: Detail +### Modelling approaches: Detail #### Temperature-dependent COP The temperature-dependent COP can be calculated from different methods: -- using the \(COP_{Carnot}\) with the carnot efficiency factor \(\eta_{Carnot}\) as explained above (easy, simple and fast, but unreal high efficiency with small temperature differences of source and sink) -- looking up the COP in a look-up table in dependence of the condenser outlet and the evaporator inlet temperature (for computational efficiency, lookup-tables are fitted to polynomials in pre-processing) -- COP calculated as fraction of temperature-dependent electrical and thermal power, gained from generally developed polynomials. Here, the temperature-depended variation of the maximal power output of the heat pump can be directly taken into account. +- Using the \(COP_{Carnot}\) with the Carnot efficiency factor \(\eta_{Carnot}\) as explained above. This is easy, simple and fast, but leads to unrealistically high efficiency with small temperature differences between source and sink. +- Looking up the COP in a look-up table in dependence of the condenser outlet and the evaporator inlet temperature. These are usually taken from manufacturer data sheets and/or measurements and interpolated between support values. +- Calculating the COP fraction of temperature-dependent electrical and thermal power, gained from the maximum power output of the heat pump, which is itself a function of the inlet and outlet temperatures. This method however implies that the heat pump runs at full power, as the COP furthermore changes with the PLR (see following sections). -As example for a lookup-table COP (second bulletpoint above), the following figure from Steinacker2022[^Steinacker2022] shows a map of a high-temperature heat pump as a set of curves, depending on the evaporator inlet and condenser outlet temperature. In three dimensions, this figure would result in a surface that can be parameterized with a three-dimensional spline interpolation algorithm. +As example for a lookup-table COP (second bulletpoint above), the following figure from Steinacker2022[^Steinacker2022] shows a map of a high-temperature heat pump as a set of curves, depending on the evaporator inlet and condenser outlet temperature. In three dimensions, this figure would result in a surface that can be interpolated between the given support values. ![COP chart of heat pump](fig/COP_chart_example.png) +For ReSiE the first two were chosen as available methods, with the Carnot method mostly for cases in which little information on the heat pump is available or high performance is required. For the method using lookup-tables, bi-linear interpolation is done for values between the support values. + +##### By-pass +When the source temperature is equal or higher than the requested sink temperature, a heat pump does not have to go through the thermodynamic cycle and can instead carry the heat from the source to the sink acting like a heat exchanger. In real systems this still requires some electricity to run the pumps and the sensors. To model this, a constant high COP is chosen to approximate the work the pumps have to perform. + #### Maximum thermal and electrical power In order to address a change in maximum power output or input of the heat pump at different operating temperatures, two different approaches can be used. From 208768332b13c9bb0d9245fb6b50ea2d2f0ef6c4 Mon Sep 17 00:00:00 2001 From: Etienne Ott Date: Wed, 11 Sep 2024 11:21:33 +0200 Subject: [PATCH 04/17] Update sections of max/min power and part load efficiency of heat pumps. --- ...221018_HeatPump_partload_thermal_power.svg | 3 - docs/fig/230119_PartLoadPowerCurve.JPG | Bin 132152 -> 0 bytes .../230119_PartLoadPowerCurve_normalized.JPG | Bin 111819 -> 0 bytes ...018_HeatPump_partload_thermal_power.drawio | 1 - .../230119_PartLoadPowerCurves.xlsx | Bin 71358 -> 0 bytes docs/resie_energy_system_components.md | 102 ++++++------------ 6 files changed, 31 insertions(+), 75 deletions(-) delete mode 100644 docs/fig/221018_HeatPump_partload_thermal_power.svg delete mode 100644 docs/fig/230119_PartLoadPowerCurve.JPG delete mode 100644 docs/fig/230119_PartLoadPowerCurve_normalized.JPG delete mode 100644 docs/fig/source_files/221018_HeatPump_partload_thermal_power.drawio delete mode 100644 docs/fig/source_files/230119_PartLoadPowerCurves.xlsx diff --git a/docs/fig/221018_HeatPump_partload_thermal_power.svg b/docs/fig/221018_HeatPump_partload_thermal_power.svg deleted file mode 100644 index 8183b7c..0000000 --- a/docs/fig/221018_HeatPump_partload_thermal_power.svg +++ /dev/null @@ -1,3 +0,0 @@ - - -
part load ration (PLR)
part load ration (PLR)
0 %
0 %
100 %
100 %
50%
50%
thermal output power
of heat pump [kW]
thermal output power...
PLHP,min
PLHP,min
QHP,out,min
QHP,out,min
QHP,out,max
QHP,out,max
linear thermal power in part load operation
linear thermal power in part load operati...
.
.
.
.
Text is not SVG - cannot display
\ No newline at end of file diff --git a/docs/fig/230119_PartLoadPowerCurve.JPG b/docs/fig/230119_PartLoadPowerCurve.JPG deleted file mode 100644 index 546edd17b6f948b6b11cb8bec2b2e26f41095e69..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 132152 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

ZRjTH8V^eiD;ezSZO3VLq~KN?Aij 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 diff --git a/docs/fig/230119_PartLoadPowerCurve_normalized.JPG b/docs/fig/230119_PartLoadPowerCurve_normalized.JPG deleted file mode 100644 index ae2439b73d4d27a828c530edf20302c4b0f128cc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 111819 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

ccQZ?800?&TFiu0$nsl7%UX?%k?Cc8{P|L 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 diff --git a/docs/fig/source_files/221018_HeatPump_partload_thermal_power.drawio b/docs/fig/source_files/221018_HeatPump_partload_thermal_power.drawio deleted file mode 100644 index 218cfa0..0000000 --- a/docs/fig/source_files/221018_HeatPump_partload_thermal_power.drawio +++ /dev/null @@ -1 +0,0 @@ -7Zpdb9owFIZ/DdJ2URTbSYDLQj+mqZPYpmnbpSEuserEyHEo7NfPJjbEuC10hdCOqlUbHyfH8XleH39ACw2y+bXA0/QLTwhrwSCZt9BFC8JugNRfbVhUhiiMK8NE0KQygbXhO/1DjDEw1pImpHBulJwzSaeucczznIylY8NC8Hv3tlvO3FaneEI8w/cxZr71J01karoFO2v7J0InqW0ZxL2qJsP2ZtOTIsUJv6+Z0GULDQTnsrrK5gPCdOxsXKrnrh6pXb2YILnc5YFwNLvpnn2+zfqf2RX7kX47k7Mz42WGWWk6bF5WLmwESJ6c60CqUs5zZeynMmOqBNSl4GWeEN1CoEqFFPxuFSe4tGAh7eNjhouCjq35ijLrxu+LeTGSOHhMz64Jz4gUC3XD/RpKZAKd1nhYmyAMSzpzoWKjjcnK3aqFIafqTWBgZAysH6PiMHA9FLwUY2IeqjPY4gf2NhypuEyI9Bypi1qv16Yl4mfghu+4d8Edxlsw7c4bHJU38niroOv3YxwnOk4qSjxXFx+GN98+elqQZC5dAWBGJ7lmq8gRoQwzIiRV6fLcVGQ0SfTjfUEK+gePlq60WKa6j8teR/1WdKF9lZIXVcIHKzUNOONirb1bJZpNE8+lmScAekpM+tXI/Ek5mVqIXN7I5uya3MBDekPB49JyWD4XXOiBUy2p3+hkGQEUPjyUtqSEgyGKPEQgOHVIqPdI4qxBipuEFHuQopMGBOPO6xpFHQ+QTInIsH6Ql3Ja6tlqyu8VAj20YqYxjVQhnugrfrt8Uby8q8ymyo7VX9TPR4X+pxDc/dQQ3gRwwWU1IaOLs15wIAV0HQEAhHab6jaXvHtTQM9TgAfrRWvSnWP4ShafMNiY6MLQdbHr4jOEbjKOm1172h38QcCCB8AmuEiXt/tDrgXReV//qBqFXSx+aa/tsNexht96zAVtFXtjuJibhqvSol4aEkFVeHSWWBp3lRQMqpg/FbXoyNprdzfUB/9NfQ+46sBmBXjIw40XCPC1J6BteeNf80/Tm19wyNOO/5g/DKL9TEAg2uLo0ALwjz/eBdBgAgBh76gLEH+HPryxW4iiHNk9xKdhCw4ymtsq1Vit1lPMq9w5HOLApbN9L99pcqsI/M3818dwcr1vfIfqQY3dEamgekx7jTLtPpspnr8zdZm6RzoRPDJSf0PPaE6wPsBZn+3YIx09QgP3Qwk+JfZzibdItH6IEwbteE/ZOHIpA+Rn42bTMfT39+23SWz/eRV1PTioUTb+1vd02XSQO+fZdeH+4aji+vsc1TJ2/aUYdPkX \ No newline at end of file diff --git a/docs/fig/source_files/230119_PartLoadPowerCurves.xlsx b/docs/fig/source_files/230119_PartLoadPowerCurves.xlsx deleted file mode 100644 index f1e7b1e8a845656626f630374ac705e1360ffbef..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 71358 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 diff --git a/docs/resie_energy_system_components.md b/docs/resie_energy_system_components.md index bdd4c91..24466f7 100644 --- a/docs/resie_energy_system_components.md +++ b/docs/resie_energy_system_components.md @@ -124,54 +124,39 @@ For ReSiE the first two were chosen as available methods, with the Carnot method ##### By-pass When the source temperature is equal or higher than the requested sink temperature, a heat pump does not have to go through the thermodynamic cycle and can instead carry the heat from the source to the sink acting like a heat exchanger. In real systems this still requires some electricity to run the pumps and the sensors. To model this, a constant high COP is chosen to approximate the work the pumps have to perform. -#### Maximum thermal and electrical power +#### Maximum and minimum thermal output power -In order to address a change in maximum power output or input of the heat pump at different operating temperatures, two different approaches can be used. +With the COP of the heat pump determined by one of the methods described in the previous section, the maximum and minimum power of the heat pump can be modeled independently, but also in relation to the source and sink temperatures. The power is defined as the thermal output of the heat pump. -The more complex but also more accurate approach is the use of polynomial fits of temperature-dependent thermal and electrical power. These polynomials depend on the condenser outlet and the evaporator inlet temperature and they need to be calculated from manufacturer data or from measurements. +Comparing available data of many different heat pumps from Stiebel-Eltron[^Stiebel-EltronTool], specifically those with air as the source medium, three important observations can be made: -In order to address the early planning stage, general, market-averaged polynomials need to be created, representing an average heat pump. Additionally, one specific heat pump model can be used if the the required data is available. +* The minimum power of a heat pump also plays a role as this can be a significant fraction of the maximum power and in some cases even limit the heat pump to a single on-or-off operational state at a fixed power +* The maximum and minimum power values vary a lot across the possible source and sink temperatures +* The differences between heat pump systems necessitates that the curves, if this information is available, can be given as input to the simulation for improved accuracy compared to averaged curves -**ToDo**: Add method of calculating market-averaged polynomials! +If no specific curves are known for the heat pump, a model based on biquadratic polynomials is described in TRNSYS Type 401 and can be used as a best guess: -Biquadratic polynomials according to TRNSYS Type 401 -$$ \dot{Q}_{max} = c_{q1} + c_{q2} \ \bar{T}_{source,in} + c_{q3} \ \bar{T}_{sink,out} + c_{q4} \ \bar{T}_{source,in} \ \bar{T}_{sink,out} + \cdot \cdot \cdot \\ - \ c_{q5} \ \bar{T}_{source,in}^2 + c_{q6} \ \bar{T}_{sink,out}^2 $$ +$$ \dot{Q}_{out,max} = c_{q1} + c_{q2} \ \bar{T}_{source,in} + c_{q3} \ \bar{T}_{sink,out} + c_{q4} \ \bar{T}_{source,in} \ \bar{T}_{sink,out} \\ ++ \ c_{q5} \ \bar{T}_{source,in}^2 + c_{q6} \ \bar{T}_{sink,out}^2 $$ -$$ P_{el,max} = c_{p1} + c_{p2} \ \bar{T}_{source,in} + c_{p3} \ \bar{T}_{sink,out} + c_{p4} \ \bar{T}_{source,in} \ \bar{T}_{sink,out} + \cdot \cdot \cdot \\ - \ c_{p5} \ \bar{T}_{source,in}^2 + c_{p6} \ \bar{T}_{sink,out}^2 $$ -where all temperatures have to be normed according to +where all temperatures are normalised according to $$ \bar{T} = \frac{T \ [°C]}{273.15} + 1 $$ -If both the thermal output and electrical input power are given as a temperature-dependent polynomial, the temperature-dependent COP (see previous section) can be directly calculated from these polynomials. - -The second method to adjust the electrical and thermal energy would be a linear gradient that adjust the rated power in dependency of one temperature. Checking the available data of many different heat pumps from Stiebel-Eltron[^Stiebel-EltronTool], a simplified correlation can be observed: - -- the thermal power is dependent on the source temperature, but independent on the sink temperature (the lower the source temperature the lower is the heating power) -- the electrical power is dependent on the sink temperature, but independent on the source temperature (the higher the sink temperature the higher is the electrical power consumption) - -This gives the possibility to linearly adjust the available thermal power with the change of the source temperature and the electrical power demand with the change of the temperature of the sink. Which power needs to be adjusted depends on the choice of the control strategy - thermally or electrically controlled. -The gradients of the power de- or increase with a change of the temperature, \(f_{\dot{Q} reduction}\) and \(f_{P_{el} reduction}\), needs to be specified. Both factors can have a value of, for example, 0.02, which means a change of 2 % of the rated power per Kelvin of temperature shift with respect to the rated temperatures. The two factors are defined as follows: - -$$ -\dot{Q}_{out,temp. \ dependent} = \dot{Q}_{out,rated} (1 + f_{\dot{Q} reduction} \ (T_{source,in,current} - T_{source,in,rated})) -$$ -$$ -P_{el,temp. \ dependent} = P_{el,rated} (1 + f_{P_{el} reduction} \ (T_{sink,out,current} - T_{sink,out,rated})) -$$ - -With this method, the actual temperature-dependent relation of thermal and electrical power need to be determined using the temperature-dependent COP described earlier. - +Note that this does not include a formulation for minimum power, which is assumed to be zero. It is an open question if any set of coefficient exists, that can represent most heat pump technologies with reasonable accuracy. We would be glad to include these as default values. [^Stiebel-EltronTool]: Stiebel-Eltron Heat Pump Toolbox: [https://www.stiebel-eltron.com/toolbox/waermepumpe/](https://www.stiebel-eltron.com/toolbox/waermepumpe/) #### Part load efficiency -The COP of the modeled heat pump depends not only on the temperatures of the sink and the source but also on the current part load ratio (PLR). The COP can be corrected using a part load factor (PLF) that is dependent of the PLR. The definition of the PLR and the PLF is given below: +The COP of the modeled heat pump depends not only on the temperatures of the sink and the source but also on the current part load ratio (PLR). The COP can be corrected using a part load factor (PLF) that is dependent of the PLR: -PLR (part load ratio) \(= \frac{\text{power (el. or th.) of demand or availability in current timestep}}{\text{maximum power (el. or th.) of heat pump at current temperatures}} \) +\(COP(\kappa) = COP(1.0) \cdot PLF(\kappa) \) -PLF (part load factor = adjustment factor for COP): \(COP_{part-load} = COP_{full-load} * PLF(PLR) \) +The PLF curve is an input to the simulation and can be one of the following methods: + +* A constant value +* A polynomial of any order +* Linear interpolation between equidistant support values The literature provides different examples for the correlation of the COP to the PLR (see section "Overview" for literature examples). This relation is non-linear as shown for example in the following figure given the part-load-dependent COP of an inverter-driven ENRGI-Heatpump at different temperature levels (Source: Enrgi[^2]). @@ -183,54 +168,29 @@ The part-load behavior depends also on the type of the heat pump (on-off or inve ![Heat pump part load factor (PLF)](fig/Socal2021_PLFfromPLR.jpg) -Taking the correction factor curve from the figure above for inverter heat pumps, the maximum part load factor is reached at 50 % part load with an increase of the COP by about 10%. Contrary, in Toffanin2019[^Toffanin2019], the part load factor is assumed to be much higher, reaching its maximum at 25 % part load ratio with a part load factor of 2.1 (efficiency increase of 110 %). These discrepancies illustrate the wide range of literature data and the difficulty in finding a general part load curve. In Lachance2011[Lachance2021^], several part load curves are compared. - - -The figure above shows also the difference of the part load factor comparing on-off and inverter heat pumps as well as the defined on-off losses in DIN EN 14825 for the calculation of the seasonal coefficient of performance (SCOP). - -As described in the section "General description of HP", the COP is defined as the ratio of the heat output \(\dot{Q}_{out}\) and the electrical input power \(P_{el}\). The shown curves for the part load factor affects only the ratio of heat output to electrical input power and there is no information available on the actual change of the two dimensions. Therefore, the heat output of the heat pump itself is assumed to be linear in part load operation between \(\dot{Q}_{out,min}\) at \(PLF_{min}\) and \(\dot{Q}_{out,max}\) at PLR = 1.0 as shown in the figure below. This leads to a non-linear relation of the power input to the part load ratio that was found more realistic as for inverter heat pumps, the observed efficiency change is mostly due to an efficiency change of the frequency converter and motor of the compressor. (QUELLE ToDo) - -![Thermal power of heatpump in partload](fig/221018_HeatPump_partload_thermal_power.svg) +Taking the correction factor curve from the figure above for inverter heat pumps, the maximum part load factor is reached at 50 % part load with an increase of the COP by about 10%. Contrary, in Toffanin2019[^Toffanin2019], the part load factor is assumed to be much higher, reaching its maximum at 25 % part load ratio with a part load factor of 2.1 (efficiency increase of 110 %). These discrepancies illustrate the wide range of literature data and the difficulty in finding a general part load curve. In Lachance2021[^Lachance2021], several part load curves are compared. -It is also important to note, that the typical PLF-curve for inverter-driven heat pumps is not invertible and can therefore not be used directly to calculate the PLR from PLF. Although, this needed for an operation strategy that uses limited availability or demand of the electrical or thermal power. To handle this problem, the PLF-curve is not used directly: - -During preprocessing, the given curve of the PLF in dependence of the PLR (see orange curve in figure below as example) is discretized. Then, the electrical input power (yellow curve) is calculated at each discretization using the assumption of a linear thermal power output (grey curve) in part load operation. As the relation of the power input to the thermal power output is defined by the COP that is changing in every timestep, any COP can be chosen for this initial calculation during the preprocessing. For this example, a COP of 4 is chosen. This process results in two value tables for the electrical input power and the thermal output power. The latter one is, according to the assumption made above, a straight line as shown in the figure. - -![non-linear part load power curve of heat pump](fig/230119_PartLoadPowerCurve.JPG) - - Both value tables are then normalized to their maximum value as shown in the next figure. The thermal power input although can not be precalculated as it depends on the absolute difference of thermal output and electrical input power. - -![normalized non-linear part load power curve of heat pump](fig/230119_PartLoadPowerCurve_normalized.JPG) - -In every timestep, the two precomputed and normalized value tables of the thermal output and electrical input power are scaled up to the current maximum power, limited by the heat pump current full-load operation state. There, the actual COP at the current timestep is represented in the ration of both values. The two scaled value tables can then be used to determine the actual PLF that is necessary to cover the current demand or to limit the operation state due to the limited available electrical power (interpolation on value table with known power, or interpolation in preprocessing). For the thermal output power, this is trivial as the ratio of the maximum thermal power output to the thermal power demand is equal to the PLF. To calculate the PLF for the thermal input power, if this is a limited source according to the operational strategy, the two scaled value tables need to be subtracted from each other to get a third table: - -$$ -\dot{Q}_{in}(PLF) = \dot{Q}_{out}(PLF) - P_{el,in}(PLF) -$$ - -This third value table, generated in each timestep, can then be used to determine the maximum possible PLF according to the available thermal input power from a limited thermal power source. - -All three PLF (from thermal input and output as well as electrical input power) are then compared and the smallest one is chosen as operating state in the current timestep. If this value is smaller than the minimal allowed PLF of the heat pump \(PLF_{min}\), the heat pump will not be in operation in the current timestep. - -This method avoids the need to invert polynomial functions at each timestep and is computationally more efficient. - -The definition of the part load factor curve is user-defined and differentiated into inverter and on-off heat pumps. -The part load factor curve for inverter-driven heat pumps is based on Blervaque2015[^Blervaque2015] and Filliard2009[^Filliard2009]. There, the curve is defined in two separate sections. The section below the point of maximum efficiency is a function according to the part load factor calculation in DIN EN 14825 for water-based on-off heatpumps, differing from the cited paper but according to Fuentes2019[^Fuentes2019]. The section above the point of the maximum efficiency is approximated as straight curve. The definition of these curve can be done entering the cc-coefficient and the coordinates of the two points highlighted in the figure below. Here, cc is chosen as 0.95 and \(a\) is used to stretch the curve to meet the intersection point with the straight line. +A unified formulation for on-off and inverter heat pumps can be dervied from descriptions in the literature. The PLF curve for inverter-driven heat pumps is based on Blervaque2015[^Blervaque2015] and Filliard2009[^Filliard2009]. There, the curve is defined in two separate sections. The section below the point of maximum efficiency is a function according to the PLF calculation in DIN EN 14825 for water-based on-off heatpumps, differing from the cited paper but according to Fuentes2019[^Fuentes2019]. The section above the point of the maximum efficiency is approximated as linear. The definition of these curve can be done entering the coefficient \(c\) and the coordinates of the two points highlighted in the figure below. Here, \(c\) is chosen as 0.95 and \(a\) is used to stretch the curve to meet the intersection point with the straight line. ![Input curve for part load efficiency of inverter heat pump](fig/230119_PartLoadPowerCurve_input.JPG) -This results in the following equation to calculate the part load factor for inverter-driven heat pumps, defined by the coefficients cc and a according to DIN EN 14825, the point of maximum efficiency at (\(PLR_{max}\)/\(PLF_{max}\)) and the PLR_1 at PLF = 1: +This results in the following equation to calculate the part load factor for inverter-driven heat pumps, defined by the coefficients \(c\) and \(a\) according to DIN EN 14825 and the point of maximum efficiency at (\(\kappa_{opt}\),\(PLF_{opt}\)): $$ -PLF(PLR) = +PLF(\kappa) = \begin{cases} -a \ \frac{PLR}{cc \ PLR + (1 - cc)} & \text{ for } PLR < PLR_{max} \\ -\frac{PLF_1 - PLF_{max}}{1-PLR_{max}} \ ( PLR - PLR_{max} ) + PLF_{max} & \text{ for } PLR >= PLR_{max} +a \ \frac{\kappa}{c \ \kappa + 1 - c} & \text{ for } \kappa < \kappa_{opt} \\ +\frac{PLF(1.0) - PLF_{opt}}{1-\kappa_{opt}} \ (\kappa - \kappa_{opt} ) + PLF_{opt} & \text{ for } \kappa >= \kappa_{opt} \end{cases} \\ -\text{ with } a = \frac{PLF_{max}}{PLR_{max}} \left ( cc \ (PLR_{max}-1)+1 \right ) +\text{ with } a = \frac{PLF_{opt}}{\kappa_{opt}} \left ( c \ (\kappa_{opt}-1)+1 \right ) $$ -For on-off heat pumps, \(a\) is set to 1 and the domain of the first equation above is set to the whole range of the PLR. +For on-off heat pumps, \(a = 1\) and \(\kappa_{opt} = 1\). + +**Note:** If this formulation is chosen, for the moment it is required to enter it as a range of support values with linear interpolation between. A future update might implement this formulation directly. + +##### Calculating energies from the part-load-dependent efficiency +As described in the [corresponding section](resie_transient_effects.md#part-load-ratio-dependent-efficiency), it is possible to calculate the input and output energies from the efficiency as function on the PLR through numerical inversion in a pre-processing step. However because of reasons described in the section on the slicing algorithm, this does not work if there are multiple sources or multiple sinks to be considered. In addition, several multidimensional functions for various effects would have to be considered, which increases the complexity a lot. Therefore this is not implemented, which leads to a performance decrease for heat pumps with exactly one source and exactly one sink. A future update might address this problem. [^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. From 6697bdd860d65ecb4bcbd40db71defdfdbf358b4 Mon Sep 17 00:00:00 2001 From: Etienne Ott Date: Wed, 11 Sep 2024 15:06:39 +0200 Subject: [PATCH 05/17] Update section on icing losses for heat pump. --- docs/resie_energy_system_components.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/resie_energy_system_components.md b/docs/resie_energy_system_components.md index 24466f7..bfa3154 100644 --- a/docs/resie_energy_system_components.md +++ b/docs/resie_energy_system_components.md @@ -198,7 +198,7 @@ As described in the [corresponding section](resie_transient_effects.md#part-load #### Icing-losses of heat pumps with air as source medium -To account for icing losses of heat pumps with air as source medium, the approach presented in TRNSYS Type 401 is used[^Wetter1996]. When considering icing-losses, make sure that icing losses are not already included in the polynomials for thermal and electrical power! +To account for icing losses of heat pumps with air as source medium, the approach presented in TRNSYS Type 401 is used[^Wetter1996]. When enabling calculation of icing-losses it is necessary to ensure that the COP curves do not already take icing into consideration. For the calculation of icing losses, five coefficients are needed: \(c_{ice,A}\), \(c_{ice,B}\), \(c_{ice,C}\), \(c_{ice,D}\) and \(c_{ice,E}\). According to the Type 401, icing losses are calculated using a superposition of a gaussian curve with its maximum between 0 °C and 5 °C representing the maximum likelihood of frost within the heat pump (high absolute humidity) and a linear curve, representing the higher sensible energy effort to heat-up the components of the heat pump for defrosting. Exemplary curves are shown in the following figure (linear, gauss and superposition): @@ -216,7 +216,7 @@ $$ \(\Delta COP_{ice,loss}\) can then be used to reduce the COP for icing losses: -$$ COP_{ice,corrected} = COP \ (1-\Delta COP_{ice,loss}) $$ +$$ COP_{ice,corrected} = COP \ (1- \frac{1}{100} \ \Delta COP_{ice,loss}) $$ According to the results found in Wei2021[^Wei2021], it is assumed that the decrease of the COP due to icing losses will only increase the power input of the heat pump. It will not affect the thermal power output. From 944c99176f410c37426c6ce96491e7c93dd75bca Mon Sep 17 00:00:00 2001 From: Etienne Ott Date: Thu, 12 Sep 2024 14:55:46 +0200 Subject: [PATCH 06/17] Rewrite section on calculation steps of heat pump. --- .../fig/230110_HeatPump_calculation_steps.svg | 3 - .../240826_heat_pump_slicing_algorithm.svg | 4 + .../230110_HeatPump_calculation_steps.drawio | 1 - .../240826_heat_pump_slicing_algorithm.drawio | 208 ++++++++++++++++++ docs/resie_energy_system_components.md | 112 ++++++---- 5 files changed, 281 insertions(+), 47 deletions(-) delete mode 100644 docs/fig/230110_HeatPump_calculation_steps.svg create mode 100644 docs/fig/240826_heat_pump_slicing_algorithm.svg delete mode 100644 docs/fig/source_files/230110_HeatPump_calculation_steps.drawio create mode 100644 docs/fig/source_files/240826_heat_pump_slicing_algorithm.drawio diff --git a/docs/fig/230110_HeatPump_calculation_steps.svg b/docs/fig/230110_HeatPump_calculation_steps.svg deleted file mode 100644 index e4bf5e0..0000000 --- a/docs/fig/230110_HeatPump_calculation_steps.svg +++ /dev/null @@ -1,3 +0,0 @@ - - -




 or
or...
calculation of stationary thermal output and electrical input full load power for given temperatures (T_sink, T_source)
calculation of stationary...
polynomial fits of thermal output and electrical power for medium type (air-water, water-water, ...) and heat pump type (normal, high temperature)
polynomial fits of therma...
Polynmial fit of thermal
output and el. power
Polynmial fit of thermal...
COP-lookup table
or Carnot-COP
COP-lookup table...
Start
Start
reduction of thermal output power due to transient capacity effects during startup; (re)calculate COP = COP_transient
reduction of thermal output power due to...
start-up and shut-down ramp and time since the last change of operation state of heat pump
start-up and shut-down ramp and t...
calculation of stationary thermal input power using thermal output and electrical power
calculation of stationary...
compare given demand or availability to maximum available/needed power and calculate smallest non-linear part-load ratio (PLR); If PLR < PLR_min --> quit
compare given demand or availability to m...
demand of thermal output, thermal input and/or electrical power (reduced by power electronic losses!) according to given control strategy and non-linear part-load curves/value-tables in dependence of heat pump type (inverter, on-off)
demand of thermal output, thermal...
calculate COP_final using COP_transient,ice and PLF;
If COP<1 --> set COP=1 / quit;
 calculate unknown power (electrical+power_electronic_losses, thermal input, thermal output power)
calculate COP_final using COP_transient,i...
coefficients for the calculation of icing losses and T_amb = T_source
coefficients for the calculation...
Inputs required
Inputs required
T_sink, T_source
T_sink, T_source
Calculation steps
Calculation steps
get full load thermal input, thermal output or electrical power either from
get full load thermal input, thermal outp...
nominal power and reduce them with gradient in depen-dence of T_source
nominal power and re...
polynomial fits in dependence of
T_sink and T_source
polynomial fits in d...



 or
or...
get stationary COP_fullload either from
get stationary COP_fullload either from
COP datatable in dependence of
T_sink and T_source
COP datatable in dep...
Carnot-COP in de-pendence of T_sink, T_source, eta_Carnot
Carnot-COP in de-pen...
caculate the unknown, non-controlled full load power (thermal input, thermal output or
electrical power) 
caculate the unknown, non-controlled full lo...

or
or
nominal electrical, thermal input or thermal output power at specified T_source and gradient of power change (Delta power / Delta T_source)
nominal electrical, th...
polynomial fits of thermal or electrical power for medium type (air-water, water-water, ...) and heat pump type (normal, high temperature)
polynomial fits of ther...

carnot efficiency factor
carnot efficiency fa...
or
or
COP lookuptable fitted to polynome for medium type (air-water, water-water, ...) and heat pump type (normal, high temperature)
COP lookuptable fitted...
for air-xxx heat pumps only: calculate COP_transient,ice using icing losses; recalculate electrical input power
for air-xxx heat pumps only: calculate CO...
Text is not SVG - cannot display
\ No newline at end of file diff --git a/docs/fig/240826_heat_pump_slicing_algorithm.svg b/docs/fig/240826_heat_pump_slicing_algorithm.svg new file mode 100644 index 0000000..ec4fa24 --- /dev/null +++ b/docs/fig/240826_heat_pump_slicing_algorithm.svg @@ -0,0 +1,4 @@ + + + +
Source 1
25 °C
Source 1...
Source 2
15 °C
Source 2...
Sink 1
70 °C
Sink 1...
Sink 2
45 °C
Sink 2...
Source 1
25 °C
Source 1...
Source 2
15 °C
Source 2...
Sink 1
70 °C
Sink 1...
Sink 2
45 °C
Sink 2...
Source 2
15 °C
Source 2...
Sink 1
70 °C
Sink 1...
Sink 2
45 °C
Sink 2...
Source 2
15 °C
Source 2...
Sink 1
70 °C
Sink 1...
Sink 2
45 °C
Sink 2...
COP = 3.5
COP = 3.5
COP = 2.0
COP = 2.0
Source 2
15 °C
Source 2...
Sink 2
45 °C
Sink 2...
Source 2
15 °C
Source 2...
Sink 2
45 °C
Sink 2...
COP = 4.0
COP = 4.0
Source 2
15 °C
Source 2...
Electricity
Electricity
Electricity
Electricity
Electricity
Electricity
Electricity
Electricity
Electricity
Electricity
Electricity
Electricity
1
1
2
2
3
3
4
4
Electricity
Electricity
Text is not SVG - cannot display
\ No newline at end of file diff --git a/docs/fig/source_files/230110_HeatPump_calculation_steps.drawio b/docs/fig/source_files/230110_HeatPump_calculation_steps.drawio deleted file mode 100644 index 8e5369d..0000000 --- a/docs/fig/source_files/230110_HeatPump_calculation_steps.drawio +++ /dev/null @@ -1 +0,0 @@ -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 \ No newline at end of file diff --git a/docs/fig/source_files/240826_heat_pump_slicing_algorithm.drawio b/docs/fig/source_files/240826_heat_pump_slicing_algorithm.drawio new file mode 100644 index 0000000..5ec3f17 --- /dev/null +++ b/docs/fig/source_files/240826_heat_pump_slicing_algorithm.drawio @@ -0,0 +1,208 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/resie_energy_system_components.md b/docs/resie_energy_system_components.md index bfa3154..aff8575 100644 --- a/docs/resie_energy_system_components.md +++ b/docs/resie_energy_system_components.md @@ -224,52 +224,78 @@ According to the results found in Wei2021[^Wei2021], it is assumed that the decr ### Steps to perform in the simulation model of the heat pump -The calculation is based on TRNSYS Type 401[^Wetter1996] that is almost similar to Type 204[^Alfjei1996] (Type 204 provides an english documentation). The cycling losses of the heat pump in both TRNSYS models are calculated using an exponential function to describe the thermal capacity effects during heat-up and cool-down. Here, these cycling losses will only be used during start and stop of the heat pump - actual cycling losses from on-off heatpumps will be considered separately in the process to allow the consideration of modulating heat pumps as well. - -There are two different possibilities in calculating the full load power of the heat pump in dependence of \(T_{sink,out}\) and \(T_{source,in}\). An overview of the simulation steps and the required inputs are given in the following figure. A detailed description of the process shown in the figure is given below. Each of the main steps is described in more detail in the previous chapter. - -![Heat pump calculation steps](fig/230110_HeatPump_calculation_steps.svg) - -Steps to calculate the electrical and thermal energy in- and outputs of HP using a polynomial fit of the thermal and electrical power (compare to left side of figure above): - -- using polynomial fits to calculate stationary thermal in- and output and electrical full-load power at given temperatures of \(T_{sink,out}\) and \(T_{source,in}\) for given nominal thermal power - - differing source and sink medium: - - air-water - - water-water - - sole-water - - differing temperature range: - - normal heat pump - - high-temperature heat pump - - polynomial fits have to be normalized to rated power at specified temperatures! Rated power has to be related always to the same temperature lift according to DIN EN 14511 --> different fits for normal (B10/W35, W10/W35, A10/W35) and high temperature (B35/W85, W35/W85) heat pumps -- reduce thermal power output due to transient capacity effects during start-up as average over current timestep and calculate COP\(_{transient}\) at full load with calculated thermal and electrical power -- may adjust COP\(_{transient}\) by icing losses for air-water and air-air heat pumps; calculate COP\(_{transient,ice}\), recalculate electrical input power -- get demand/availability of thermal or electrical energy (mind \(\eta_{PE}\)!), differing if thermal and/or electric energy related operation strategy is chosen -- calculate smallest non-linear part-load ratio (PLR) with current demand and temperature-dependent, transient full-load power and precalculated value tables from PLF-curve, in dependency of heat pump type (inverter, on-off) -- calculate part-load thermal and electrical energy, recalculate COP\(_{transient,ice,partload}\) - -If universal data table or the Carnot-COP reduced by an efficiency factor should be used instead of the more accurate model described above, a different calculation approach is needed (compare right side in the figure above): - -- Get power at current temperatures - - using nominal power without a temperature-dependency or - - using polynomial fits to calculate stationary thermal **or** electrical full-load power at given temperatures of \(T_{sink,out}\) and \(T_{source,in}\), depending on control strategy (see above) -- get stationary full-load COP at given temperatures of \(T_{sink,out}\) and \(T_{source,in}\) either from - - COP data table (fitted to polynomials in pre-calculation) or - - Carnot-COP reduced by an efficiency factor -- determine the unknown, non-controlled full load power (electrical or thermal) with known, controlled power and COP -- continue with transient capacity effects as described above - -Contrary to the TRNSYS Type 401, the mass flow here is variable and not constant within two time steps, therefore the \(T_{sink,out}\) and \(\dot{Q}_{sink,out}\) can be calculated directly without the need of iteration as implemented in Type 401. Here, the \(T_{sink,out}\) is a fixed, user-specified value in the presented simplified model. - -The polynomials describing the temperature-depended thermal and electrical power of the heat pump need to be normalized to the power consumption at the rated operation point in order to be able to auto-scale the size in parameter variation studies. Therefore, the following steps are necessary: - -- fit data to polynomial for thermal and electrical energy -- calculate power at specified nominal temperatures with generated fitted polynomial -- normalize polynomial to calculated rated power at specific temperature using a fraction_factor +The following section shows the calculation steps that are performed in the heat pump model of ReSiE to determine operation. + +#### Slicing algorithm +A heat pump can be set up within an energy system such that multiple sources and/or multiple sinks are connected to it via busses. This corresponds to a real system providing heat for different demands (such as room heating and DHW) or being supplied with sources of different temperatures with the aim of preferably using higher source temperatures for increased efficiency. A real system would typically supply one sink at a time based on temperatures in pipes or tanks and similarly switch between sources based on their temperatures. In the model the heat pump cuts the current time step into slices such that exactly one source layer and exactly one sink layer is considered in each slice and the amount of time spent on each slice adds up to equal or less than the entire time step. + +![Slicing algorithm example for two sources and two sinks](fig/240826_heat_pump_slicing_algorithm.svg) + +The figure above shows how the algorithm works for an example with two sources and two sinks and a limited amount of electricity available. Both sources and sinks are sorted according to priorities, but the heat pump could also change the order based on [control modules](resie_operation_control.md#control-modules). The algorithm goes through four steps to calculate which source layer supplies how much heat to which sink layer and how much electricity is used overall: + +1. In the first step source 1 has 4 units of energy left at 25 °C to supply 7 units of heat at 70 °C and 4 units of electricity are available. With a COP of 4.0, the result is that the source layer is used up completely, which requires 2 units of electricity and produces 6 units of heat. +2. In the second step 1 unit of heat is left to be supplied at 70 °C. The second source layer supplies 0.5 units of heat and requires 0.5 units of electricity, for a COP of 2.0. +3. In the third step the second sink layer with 5 units of heat at 45 °C can be supplied from the remaining 5.5 units of the second source layer. With a COP of 4.0 this requires 1.25 units of electricity. If the remaining available electricity had been less than 1.5 units, some energy of the second sink layer would have been left unsupplied. +4. In the fourth step one of the inputs or outputs, namely the heat output, was used up completely and the algorithm finishes. + +Note that the algorithm also works with sources and sinks that can supply/request an infinite amount of energy as long as it is never the heat input *and* heat output that are infinite. + +#### Process of calculating energies for one slice +The following pseudo-code example shows how the energies for one slice are calculated: + +```pseudo +function energies_for_one_slice( + available_heat_in, + available_el_in, + available_heat_out, + T_source_in, + T_sink_out, + kappa +) returns + used_heat_in, + used_el_in, + used_heat_out +begin + + if (COP is constant) then + COP = COP_const() + else if (T_source_in >= T_sink_out) then + COP = COP_bypass() + else + COP = COP_dynamic(T_source_in, T_sink_out, kappa) + COP = COP * (1 - icing_losses(T_source_in) / 100) + end + + used_heat_in = available_heat_in + used_el_in = used_heat_in / (COP - 1) + used_heat_out = used_heat_in + used_el_in + + if (used_heat_out > available_heat_out) then + used_heat_out = available_heat_out + used_el_in = used_heat_out / COP + used_heat_in = used_el_in * (COP - 1) + end + + if (used_el_in > available_el_in) then + used_el_in = available_el_in + used_heat_in = used_el_in * (COP - 1) + used_heat_out = used_heat_in + used_el_in + end +end +``` +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. + +As a first pass the slicing algorithm is run with full power for each slice and the calculation stops when the power fraction concerning the energy sums over all slices reaches the maximum power fraction. Usually this is `1.0`, however this might be limited by [control modules](resie_operation_control.md#control-modules). Because the maximum power of each slices varies, so does how much time each slice takes to produce the calculated amount of energy of that slice. + +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. [^Wetter1996]: Wetter M., Afjei T.: TRNSYS Type 401 - Kompressionswärmepumpe inklusive Frost- und Taktverluste. Modellbeschreibung und Implementation in TRNSYS (1996). Zentralschweizerisches Technikum Luzern, Ingenieurschule HTL. URL: [https://trnsys.de/static/05dea6f31c3fc32b8db8db01927509ce/ts_type_401_de.pdf](https://trnsys.de/static/05dea6f31c3fc32b8db8db01927509ce/ts_type_401_de.pdf) -[^Alfjei1996]: Afjei T., Wetter M., Glass A. (1997): TRNSYS Type 204 - Dual-stage compressor heat pump including frost and cycle losses. Model description and implementation in TRNSYS, Versin 2. Zentralschweizerisches Technikum Luzern, Ingenieurschule HTL. URL: [https://simulationresearch.lbl.gov/wetter/download/type204_hp.pdf](https://simulationresearch.lbl.gov/wetter/download/type204_hp.pdf) - **Inputs und Outputs of the Heat Pump:** From 6f40686ba26e39fea86aa13facc57024e8460c43 Mon Sep 17 00:00:00 2001 From: Etienne Ott Date: Fri, 13 Sep 2024 13:52:05 +0200 Subject: [PATCH 07/17] Update section on inputs, outputs and parameters of heat pump and various fixes and adjustments. --- docs/abbreviations_list.md | 1 + docs/resie_energy_system_components.md | 70 +++++++++++--------------- includes/abbreviations.md | 4 +- 3 files changed, 31 insertions(+), 44 deletions(-) diff --git a/docs/abbreviations_list.md b/docs/abbreviations_list.md index 7a8f0e3..352562a 100644 --- a/docs/abbreviations_list.md +++ b/docs/abbreviations_list.md @@ -19,6 +19,7 @@ | COP | Coefficient of Performance | | CSV | Comma-Separated Values [data format] | | DC | Direct Current | +| DHW | Domestic Hot Water | | DWD | German weather service (Deutscher Wetterdienst) | | EED | Energy Earth Designer (software) | | EER | Energy Efficiency Ratio | diff --git a/docs/resie_energy_system_components.md b/docs/resie_energy_system_components.md index aff8575..95daa1e 100644 --- a/docs/resie_energy_system_components.md +++ b/docs/resie_energy_system_components.md @@ -35,7 +35,7 @@ The energy balance of the heat pump model is shown in the following figure: ![Energy flow of heat pump](fig/221006_HeatPump_Energyflow.svg) -Using the electrical power \(P_{el,supply}\), reduced by the losses of the power electronics \(P_{el,loss}\), an energy flow \(\dot{Q}_{in}\) with temperature \(T_{source,in}\) is transformed to the energy flow \(\dot{Q}_{out}\) with temperature \(T_{sink,out}\). The efficiency of the heat pump is defined by the coefficient of performance (COP). The COP determines the electrical power \(P_{el}\) required to raise the temperature of a mass flow from the lower temperature level \(T_{source,in}\) to \(T_{sink,out}\): +Using the electrical power \(P_{el,in}\), an energy flow \(\dot{Q}_{in}\) with temperature \(T_{source,in}\) is transformed to the energy flow \(\dot{Q}_{out}\) with temperature \(T_{sink,out}\). The efficiency of the heat pump is defined by the coefficient of performance (COP). The COP determines the electrical power \(P_{el}\) required to raise the temperature of a mass flow from the lower temperature level \(T_{source,in}\) to \(T_{sink,out}\): $$ COP = \frac{\dot{Q}_{out}}{P_{el}} \quad \leq \quad COP_{Carnot} = \frac{T_{sink,out}[K]}{T_{sink,out}-T_{source,in} } $$ @@ -83,12 +83,12 @@ There are several aspects to be considered when simulating a heat pump based on The COP of a heat pump, representing the efficiency in a current timestep, depends highly on the temperature of the source and the requested temperature of the heat demand. Generally speaking, the efficiency and thus the COP decreases with larger temperature differences between source and sink. -Additionally, the maximum thermal power of the heat pump is not constant for different operational temperatures. The available thermal power is decreasing with lower source temperature, an effect that mainly occurs in heat pumps with air as the source medium. The rated power given for a specific heat pump is only valid for a specified combination of sink and source temperature. The specification for the declaration of the rated power is described in DIN EN 14511[^DINEN14511]. +Additionally, the maximum thermal power of the heat pump is not constant for different operational temperatures. The available thermal power is decreasing with lower source temperature, an effect that mainly occurs in heat pumps with air as the source medium. The rated power given in the literature for a specific heat pump is usually only valid for a specified combination of sink and source temperature. The specification for the declaration of the rated power is described in DIN EN 14511[^DINEN14511]. [^DINEN14511]: DIN EN 14511:2018 (2018): Air conditioner, liquid chilling packages and heat pumps for space heating and cooling and process chillers, with electrically driven compressors. DIN e.V., Beuth-Verlag, Berlin. Furthermore, the efficiency and therefore the COP is changing in part load operation. In the past, mostly on-off heat pump were used, regulating the total power output in a given time span by alternating the current state between on and off. This causes efficiency losses mostly due to thermal capacity effects and initial compression power needed at each start, or rather the compression losses at each shutdown. [Socal2021][^Socal2021] -In the last few years, modulating heat pumps have become more common, using a frequency inverter at the electrical power input to adjust the speed of the compression motor and therefore affect the thermal power output. Interestingly, this method leads to an efficiency increase in part load operation with a peak in efficiency at around 30 to 60 % of the nominal power output. In the literature, many research groups have investigated this effect, compare for example to Bettanini2003[^Bettanini2003], Toffanin2019[^Toffanin2019], Torregrosa-Jaime2008[^Torregrosa-Jaime2008], Fuentes2019[^Fuentes2019], Blervaque2015[^Blervaque2015] or Fahlen2012[^Fahlen2012]. +In the last few years, modulating heat pumps have become more common, using a frequency inverter at the electrical power input to adjust the speed of the compression motor and therefore affect the thermal power output. Interestingly, this method leads to an efficiency increase in part load operation with a peak in efficiency at around 30 to 60 % of the maximum power output. In the literature, many research groups have investigated this effect, compare for example to Bettanini2003[^Bettanini2003], Toffanin2019[^Toffanin2019], Torregrosa-Jaime2008[^Torregrosa-Jaime2008], Fuentes2019[^Fuentes2019], Blervaque2015[^Blervaque2015] or Fahlen2012[^Fahlen2012]. When heat pumps with air as source medium are used, the losses due to icing effects need to be considered as well. @@ -109,24 +109,27 @@ For a more realistic representation, all four discussed effects need to be consi ### Modelling approaches: Detail #### Temperature-dependent COP -The temperature-dependent COP can be calculated from different methods: +The temperature-dependent \(COP_{dynamic}\) can be calculated from different methods: - Using the \(COP_{Carnot}\) with the Carnot efficiency factor \(\eta_{Carnot}\) as explained above. This is easy, simple and fast, but leads to unrealistically high efficiency with small temperature differences between source and sink. -- Looking up the COP in a look-up table in dependence of the condenser outlet and the evaporator inlet temperature. These are usually taken from manufacturer data sheets and/or measurements and interpolated between support values. -- Calculating the COP fraction of temperature-dependent electrical and thermal power, gained from the maximum power output of the heat pump, which is itself a function of the inlet and outlet temperatures. This method however implies that the heat pump runs at full power, as the COP furthermore changes with the PLR (see following sections). +- Looking up the \(COP_{dynamic}\) in a look-up table in dependence of the condenser outlet and the evaporator inlet temperature. These are usually taken from manufacturer data sheets and/or measurements and interpolated between support values. +- Calculating the \(COP_{dynamic}\) as fraction of temperature-dependent electrical and thermal power, gained from the maximum power output of the heat pump, which is itself a function of the inlet and outlet temperatures. This method however implies that the heat pump runs at full power, as the COP furthermore changes with the PLR (see following sections). -As example for a lookup-table COP (second bulletpoint above), the following figure from Steinacker2022[^Steinacker2022] shows a map of a high-temperature heat pump as a set of curves, depending on the evaporator inlet and condenser outlet temperature. In three dimensions, this figure would result in a surface that can be interpolated between the given support values. +As example for a lookup-table COP, the following figure from Steinacker2022[^Steinacker2022] shows a map of a high-temperature heat pump as a set of curves, depending on the evaporator inlet and condenser outlet temperature and assuming full power. In three dimensions, this figure would result in a surface that can be interpolated between the given support values. ![COP chart of heat pump](fig/COP_chart_example.png) For ReSiE the first two were chosen as available methods, with the Carnot method mostly for cases in which little information on the heat pump is available or high performance is required. For the method using lookup-tables, bi-linear interpolation is done for values between the support values. ##### By-pass -When the source temperature is equal or higher than the requested sink temperature, a heat pump does not have to go through the thermodynamic cycle and can instead carry the heat from the source to the sink acting like a heat exchanger. In real systems this still requires some electricity to run the pumps and the sensors. To model this, a constant high COP is chosen to approximate the work the pumps have to perform. +When the source temperature is equal or higher than the requested sink temperature, a heat pump does not have to go through the thermodynamic cycle and can instead carry the heat from the source to the sink acting like a heat exchanger. In real systems this still requires some electricity to run the pumps and the sensors. To model this, a constant, relatively high \(COP_{bypass}\) is chosen to approximate the work the pumps have to perform. + +##### Losses +All effects that are considered in the heat pump model and that could be interpreted as a loss of usable energy are modelled by reducing the efficiency of the heat pump. In addition the efficiency curves are often given by measurements or data sheets, which cannot infer losses as a seperate quantity. It is therefore difficult to definitely calculate the losses incurred by the operation of the heat pump. Instead the heat pump will require more electricity input compared to a model without these losses, but will not track losses as an output. #### Maximum and minimum thermal output power -With the COP of the heat pump determined by one of the methods described in the previous section, the maximum and minimum power of the heat pump can be modeled independently, but also in relation to the source and sink temperatures. The power is defined as the thermal output of the heat pump. +With the COP of the heat pump determined by one of the methods described in the previous section, the maximum and minimum power of the heat pump can be modeled independently, but also in relation to the source and sink temperatures. The power is defined as the thermal output of the heat pump. In the following the nominal power \(\dot{Q}_{nominal}\) of the heat pump is defined as the highest maximum power value over all possible temperature values and at \(\kappa_{opt}\). This is different than in real systems, where the nominal power is defined at a particular pair of temperature values. For the model it is important that \(\dot{Q}_{out} < \dot{Q}_{out,max}\) in all cases. Comparing available data of many different heat pumps from Stiebel-Eltron[^Stiebel-EltronTool], specifically those with air as the source medium, three important observations can be made: @@ -190,12 +193,15 @@ For on-off heat pumps, \(a = 1\) and \(\kappa_{opt} = 1\). **Note:** If this formulation is chosen, for the moment it is required to enter it as a range of support values with linear interpolation between. A future update might implement this formulation directly. ##### Calculating energies from the part-load-dependent efficiency -As described in the [corresponding section](resie_transient_effects.md#part-load-ratio-dependent-efficiency), it is possible to calculate the input and output energies from the efficiency as function on the PLR through numerical inversion in a pre-processing step. However because of reasons described in the section on the slicing algorithm, this does not work if there are multiple sources or multiple sinks to be considered. In addition, several multidimensional functions for various effects would have to be considered, which increases the complexity a lot. Therefore this is not implemented, which leads to a performance decrease for heat pumps with exactly one source and exactly one sink. A future update might address this problem. +As described in the [corresponding section](resie_transient_effects.md#part-load-ratio-dependent-efficiency), it is possible to calculate the input and output energies from the efficiency as function on the PLR through numerical inversion in a pre-processing step. However because of reasons described in [the section on the slicing algorithm](resie_energy_system_components.md#slicing-algorithm), this does not work if there are multiple sources or multiple sinks to be considered. In addition, several multidimensional functions for various effects would have to be considered, which increases the complexity a lot. Therefore this is not implemented, which leads to worse performance for heat pumps with exactly one source and exactly one sink as compared to the theoretical case. A future update might address this problem. [^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. + #### Icing-losses of heat pumps with air as source medium To account for icing losses of heat pumps with air as source medium, the approach presented in TRNSYS Type 401 is used[^Wetter1996]. When enabling calculation of icing-losses it is necessary to ensure that the COP curves do not already take icing into consideration. @@ -304,43 +310,25 @@ Symbol | Description | Unit \(\dot{Q}_{in}\) | heat flow supplied to the HP (heat source) | [W] \(\dot{Q}_{out}\) | heat flow leaving the HP (heat sink) | [W] \(P_{el}\) | electric power demand of the HP | [W] -\(P_{el,supply}\) | electric power demand of the HP incl. losses of the power electronics | [W] -\(T_{sink,in}\) | condenser inlet temperature - not used | [°C] \(T_{sink,out}\) | condenser outlet temperature | [°C] \(T_{source,in}\) | evaporator inlet temperature | [°C] -\(T_{source,out}\) | evaporator outlet temperature - not used | [°C] - -**Parameter of the Heat Pump:** +\(COP\) | calculated COP | [-] +\(T_{in,mixed}\) | weighted-mean of chosen input temperatures | [°C] +\(T_{out,mixed}\) | weighted-mean of chosen output temperatures | [°C] -Symbol | Description | Unit --------- | -------- | -------- -\(\dot{Q}_{rated}\) | rated thermal energy output of heat pump at specified conditions | [W] -\(\dot{Q}_{max}(T_{sink,out}, T_{source,in})\) | (normalized) polynomial of maximum full load thermal heat output at given temperatures | [W] -\(P_{el,max}(T_{sink,out}, T_{source,in})\) | (normalized) polynomial of maximum full load electrical power output at given temperatures | [W] -or || -\(f_{\dot{Q} reduction}\) | linear reduction factor for nominal full load thermal output power with respect to \(T_{source,in}\) | [%/°C] -\(f_{P_{el} reduction}\) | linear reduction factor for nominal full load electrical input power with respect to \(T_{sink,out}\) | [%/°C] -\(COP(T_{sink,out}, T_{source,in})\) | coefficient of performance (COP) of the heat pump depending on \(T_{sink,out}\) and \(T_{source,in}\) | [-] -\(\eta_{Carnot}\) | efficiency factor of heat pump, reduces the Carnot-COP | [-] -and | | -\(PL_{min}\) | minimum possible part load of the heat pump | [%] -\(PLR_{max}\) | part load ratio at point of maximum efficiency (inverter only) | [-] -\(PLF_{max}\) | part load factor at point of maximum efficiency (inverter only) | [-] -\(PLF_{PLR=1}\) | part load factor at part load ratio = 1 (inverter only) | [-] -\(cc\) | coefficient for part load curve according to DIN EN 14825 | [-] -\(c_{ice,A} \ : \ c_{ice,E}\) | five coefficients for curve with icing losses according to TRNSYS Type 401 (air heat pump only) | [-] -\(\eta_{PE}\) | efficiency of power electronics of heat pump | [-] -\(MOT\) | minimum operating time of heat pump | [min] -\(SUT\) | start-up time of the HP until full heat supply (linear curve) | [min] -\(CDT\) | cool-down time of the HP from full heat supply to ambient (linear curve) | [min] - - -**State Variables of Heat Pump:** +**Parameters of the Heat Pump:** Symbol | Description | Unit -------- | -------- | -------- -\(x\) | current operating state (on, off, part load) | [%] - +\(\dot{Q}_{nominal}\) | nominal thermal energy output of heat pump | [W] +\(\dot{Q}_{out,max}(T_{source,in}, T_{sink,out})\) | function for maximum thermal heat output at given temperatures | [W] +\(\dot{Q}_{out,min}(T_{source,in}, T_{sink,out})\) | function for minimum thermal heat output at given temperatures | [W] +\(COP_{dynamic}(T_{source,in}, T_{sink,out}, \kappa)\) | function for COP depending on \(T_{source,in}\), \(T_{sink,out}\) and \(\kappa\) | [-] +\(COP_{constant}\) | constant COP, if given overrides dynamic COP and bypass calculation | [-] +\(COP_{bypass}\) | COP during bypass operation | [-] +\(\kappa_{max}\) | maximum PLR, usually 1.0, but might differ depending on control | [-] +\(\kappa_{opt}\) | PLR at which efficiency is highest, if optimisation is enabled | [-] +\(c_{ice,A} \ : \ c_{ice,E}\) | five coefficients for curve with icing losses according to TRNSYS Type 401 (air-sourced heat pumps only) | [-] ## Hydrogen Electrolyser (HEL) diff --git a/includes/abbreviations.md b/includes/abbreviations.md index 955d4a4..6c174fc 100644 --- a/includes/abbreviations.md +++ b/includes/abbreviations.md @@ -70,6 +70,4 @@ *[MB]: Middle Bus *[MT]: Middle Transformer *[PB]: Parallel Branch - - - +*[DHW]: Domestic Hot Water From dd96f5dac223ca153cdc55d949d148dc7e6ad699 Mon Sep 17 00:00:00 2001 From: Etienne Ott Date: Fri, 13 Sep 2024 15:51:24 +0200 Subject: [PATCH 08/17] Move section on chillers and update text to match description of heat pumps. --- docs/fig/230207_Chiller_simple_energyflow.svg | 3 - .../230207_Chiller_simple_energyflow.drawio | 1 - docs/resie_energy_system_components.md | 79 +++++-------------- 3 files changed, 19 insertions(+), 64 deletions(-) delete mode 100644 docs/fig/230207_Chiller_simple_energyflow.svg delete mode 100644 docs/fig/source_files/230207_Chiller_simple_energyflow.drawio diff --git a/docs/fig/230207_Chiller_simple_energyflow.svg b/docs/fig/230207_Chiller_simple_energyflow.svg deleted file mode 100644 index 9199fe7..0000000 --- a/docs/fig/230207_Chiller_simple_energyflow.svg +++ /dev/null @@ -1,3 +0,0 @@ - - -
Simple compression chiller (SCC)
Simple compression ch...
QSSC,in
QSSC,in
QSSC,out
QSSC,out
.
.
.
.
TSSC,source,in
TSSC,sou...
TSSC,source,out
TSSC,sou...
TSSC,sink,out
TSSC,sin...
TSSC,sink,in
TSSC,sin...
Pel,SCC,supply
Pel,SCC,...
QSSC,loss
QSSC,loss
.
.
=
=
Text is not SVG - cannot display
\ No newline at end of file diff --git a/docs/fig/source_files/230207_Chiller_simple_energyflow.drawio b/docs/fig/source_files/230207_Chiller_simple_energyflow.drawio deleted file mode 100644 index bcc552d..0000000 --- a/docs/fig/source_files/230207_Chiller_simple_energyflow.drawio +++ /dev/null @@ -1 +0,0 @@ -7Zpbk5MwFMc/TWf0YXeAlEsfW2rVGR116q765CCkJS4lbAi29dObQLiEUNftdet2H3bJCTkJ5//LScjSA+5i9Zp4SfgeBzDqGVqw6oFxzzAGtsZ+c8O6MJiOUxjmBAWFSa8NU/QbCqNoN89QAFPpRopxRFEiG30cx9Cnks0jBC/l22Y4kntNvDlUDFPfi1TrFxTQsLA6hl3b30A0D8uedWtQ1Cy88mbxJGnoBXjZMIFXPeASjGlxtVi5MOKxK+NStJtsqK0GRmBM/6XB2583Xnbz6btDk6/DL5+vJv7o/kp4+eVFmXjgnmFFzN9ohplbNmq6FqGw7jNcVlyluVBDdoNuJUzrUV3Prub87xQtEtaUS7NICExThGNeClEUQcKuXkxd92XZHRt30WPRWISs6twgOIsDyB9FY9XLEFE4TTyf1y4ZeMwW0kXESroYokBJtypvzVCVzw0JhauGSYTuNcQLSMma3SJqgWEWTQTHQBflZU2FXsIeNonQhNETJM4r37VY7ELo9QjtQId2rajBOBjyScBKfuQxCXw5UHJUWXTI+muz8I0Xrtmji/J41awdr0UppQTfVfPDqCwujjDJRwJs0x5OJo/RBgbSzFSVaUTe7Ah8aSMw8ij6Jc/nLjFEDx8xysnfJPygpWeKM+JD0ao5/1qOdPsBR9Qjc0gVRzkb1WNvj0v/nHCZ2JqpmWeIS3/QUrm/JS5W/wFHB8bFPCdcGCzjs8wuisrbZheFuyNnF+sJ4zJjO44GLDPHh77fnXX4j8CoaZ/0h/3hGeKlrDnbZiNlFTxyNrL3jZeaQvKfbn5aqtdoXpsSnA+QCVeINpqx0jcxNn5dN+KFss1GwoqA/yVkT4vEfvlCJwCq/O6c6PTjkjg4DIlb5auK2bPLS+10YvWvze14MLS2K/OoPJT4XYDYaR+kqLg1EJZzYiDUM5VP5SlHmv3Y7UxlysbkorhxapK73HBoQuGKyqTJxMQ4hi28hMmL0DzmuDJeILOP+EkJ8r1oKCoWKAh4N51HMTLPBziNMdu7EfFy24DV6oAVHOooRlfPYvasOc7ocxfdGjiy6sA5serqS8/185EDyBs6YJxaDec5q2FZrclRbkNOJoe6Uf6835RYbAgu6yHfBOutBVE7sfqGuis+lPqXlVGVf3DiXGyoe+B9y4/iu4v4+V4YPLW5bxxJ/EveV7Q/+cTv+j+AkD7x4p20/7gviPgXKu7UzUnKkiRab8KotuZjf250AceS6Ko+yjkCXeP13e2bd+l9ePPu1n47+7C8M4cdX6vs+S07wmn6H+QUReIOEDaqbmu6nFOs4+WUTtXV5eS83ut2UkN5rzOPt7p3qtHx1ZFI83/X49/jTCCbr96P3BWPasJPavPHMEc9c8x9ZRSnIs6PkPoQk8VqTRZgK/KA/cjDivXHgsVhdf3FJXj1Bw== \ No newline at end of file diff --git a/docs/resie_energy_system_components.md b/docs/resie_energy_system_components.md index 95daa1e..a89fd98 100644 --- a/docs/resie_energy_system_components.md +++ b/docs/resie_energy_system_components.md @@ -59,12 +59,6 @@ $$ \dot{Q} = \dot{m} \ c_{p} \ (T_{in} - T_{out}) $$ where \(\dot{m}\) is the mass flow of the medium and \(c_{p}\) its specific heat capacity. -As a chiller follows the same principle as a heat pump, where the lowering of temperature is the desired outcome. The difference is the definition of the efficiency, as for a chiller the useful energy is not \(\dot{Q}_{out}\) but \(\dot{Q}_{in}\). This leads to the definition of the energy efficiency ratio (EER) for chillers as - -$$ EER = \frac{\dot{Q}_{in}}{P_{el}} = \frac{\dot{Q}_{out} - P_{el}}{P_{el}} = COP - 1 $$ - -Because cooling demands in ReSiE are modeled as fixed sources of heat, no changes in the heat pump definition is required and the EER is not needed for the calculations. - ### Modelling approaches: Overview According to [Blervaque2015][^Blervaque2015], four different categories are described in the literature when it comes to the simulation of heat pumps: @@ -331,6 +325,25 @@ Symbol | Description | Unit \(c_{ice,A} \ : \ c_{ice,E}\) | five coefficients for curve with icing losses according to TRNSYS Type 401 (air-sourced heat pumps only) | [-] +## Chiller +Various technologies exist to provide cooling power on a scale of buildings or for industrial processes. All of them function similar to [heat pumps](resie_energy_system_components.md#heat-pump-hp) in that they transfer heat from one end of a thermodynamic cycle to the other. The difference is that for a chiller the useful energy is not \(\dot{Q}_{out}\) but \(\dot{Q}_{in}\). + +Regarding the efficiency of a chiller, a common concept is the energy efficiency ratio (EER) defined as: + +$$ EER = \frac{\dot{Q}_{in}}{P_{el}} = \frac{\dot{Q}_{out} - P_{el}}{P_{el}} = COP - 1 $$ + +Because cooling demands in ReSiE are modeled as fixed sources of heat, no changes in the heat pump definition is required and the EER is not needed for calculation. This should be taken into account when consulting literature to determine the efficiency as sometimes the EER value is listed, but labeled as COP. + +The example ["Heating and cooling demands"](resie_exemplary_energy_systems.md#heating-and-cooling-demands) shows how a cooling demand can be handled using a heat pump. + +### Compression chiller (CC) +Compression chillers are modeled as compression [heat pumps](resie_energy_system_components.md#heat-pump-hp). The produced waste heat, at a higher temperature then the cooling demand, can be removed from the system by a generic bounded sink. + +### Absorption/adsorption chiller (AAC) + +Absorption/adsorption chillers are not implemented yet. + + ## Hydrogen Electrolyser (HEL) Implements traits: [PLR-dependent efficiency](resie_transient_effects.md#part-load-ratio-dependent-efficiency) @@ -984,60 +997,6 @@ Symbol | Description | Unit \(V_{i,j}\) | control volume | [\(m^3\)] -## Chiller -### Simple model of compression chiller (SCC) -A simple model of an air cooled compression chiller is implemented to account for rather irrelevant cooling demands without significant changes in temperatures of the energy to be cooled. This model is a rough approximation, but offers a fast and easy calculation. It is based on a constant seasonal energy efficiency ratio (SEER) as yearly average of the energy efficiency ratio (EER) without part-load dependent or temperature dependent efficiency. The energy flow chart is given below. The displayed temperature are only for illustration and will not be considered in this simple model. - -![Energy flow of simple compression chiller](fig/230207_Chiller_simple_energyflow.svg) - -The SEER is defined as - -\( SEER = \text{yearly average of} \ \frac{\text{cooling power} \ \dot{Q}_{SCC,in}}{\text{electricity demand} \ P_{el,SCC,supply}} \) - -Comparing the definition of the EER to the COP given in the chapter of heat pumps, the following relation of the two efficiencies for heat pumps and compression chillers can be obtained - -\(EER = COP - 1 \) - -In this simple model, a constant SEER is given and set equivalent to the EER in every timestep to calculate the electrical power \(P_{el,SCC,supply}\) needed to cool down a given amount of thermal energy \(Q_{SCC,in}\) in every timestep: - -\(P_{el,SCC,supply} = \frac{\dot{Q}_{SCC,in}}{EER} \) - -The thermal output power, calculated from the energy balance of the chiller - -\(\dot{Q}_{SCC,out} = P_{el,SCC,supply} + \dot{Q}_{SCC,in} = \dot{Q}_{SCC,loss}\), - -is transferred to the environment by an air cooler and labeled as losses. - -**Inputs and Outputs of the SCC:** - -Symbol | Description | Unit --------- | -------- | -------- -\(\dot{Q}_{SCC,out}\) | thermal power output of the SCC to the ambient air (= \(\dot{Q}_{SCC,losses}\)) | [W] -\(\dot{Q}_{SCC,in}\) | thermal power input into the SSC, equals the thermal cooling power | [W] -\(P_{el,SCC,in}\) | electrical energy power input in the SCC | [W] - -**Parameter of the SCC:** - -Symbol | Description | Unit --------- | -------- | -------- -\(SEER_{SSC}\) | Seasonal energy efficiency ratio (SEER) of the compressor chiller (= constant for all temperatures and part-load)| [-] -\(Q_{SCC,in,rated}\) | rated thermal power input of the SCC under full load | [W] -\(PL_{SSC,min}\) | minimum allowed partial load of the SCC with respect to \(\dot{Q}_{SCC,in}\) | [-] - -**State variables of the SSC:** - -Symbol | Description | Unit --------- | -------- | -------- -\(x_{SSC}\) | current operating state of the SSC (on, off, part load) | [%] - -### General model for compression chiller (CC) -The general model of a compression chiller, including a part-load dependent and temperature dependent efficiency, is modeled in the same way as the heat pump described in the chapter "Heat pump". Instead of defining the thermal energy output as useful energy, the thermal energy input is defined as useful energy. Accordingly, the efficiency is described differently, as EER for the compression chiller instead of COP for heat pumps (see also the section above on the definition of EER). - -### General model for absorption/adsorption chiller (AAC) - -Absorption/adsorption chiller are not implemented yet (ToDo). - - ## Short-term thermal energy storage (STTES) ![Energy flow of STTES](fig/221028_STTES.svg) From 7816b65737c3bcf35113f43ec9368b13bd9bec9a Mon Sep 17 00:00:00 2001 From: Etienne Ott Date: Mon, 16 Sep 2024 09:31:35 +0200 Subject: [PATCH 09/17] Some typo fixes etc. in description of heat pumps. --- docs/resie_energy_system_components.md | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/docs/resie_energy_system_components.md b/docs/resie_energy_system_components.md index a89fd98..84729aa 100644 --- a/docs/resie_energy_system_components.md +++ b/docs/resie_energy_system_components.md @@ -123,7 +123,7 @@ All effects that are considered in the heat pump model and that could be interpr #### Maximum and minimum thermal output power -With the COP of the heat pump determined by one of the methods described in the previous section, the maximum and minimum power of the heat pump can be modeled independently, but also in relation to the source and sink temperatures. The power is defined as the thermal output of the heat pump. In the following the nominal power \(\dot{Q}_{nominal}\) of the heat pump is defined as the highest maximum power value over all possible temperature values and at \(\kappa_{opt}\). This is different than in real systems, where the nominal power is defined at a particular pair of temperature values. For the model it is important that \(\dot{Q}_{out} < \dot{Q}_{out,max}\) in all cases. +With the COP of the heat pump determined by one of the methods described in the previous section, the maximum and minimum power of the heat pump can be modeled independently, but also in relation to the source and sink temperatures. The power is defined as the thermal output of the heat pump. In the following the nominal power \(\dot{Q}_{nominal}\) of the heat pump is defined as the highest maximum power value over all possible temperature values and at \(\kappa_{opt}\). This is different than in real systems, where the nominal power is defined at a particular pair of temperature values. For the model it is important that \(\dot{Q}_{out} \leq \dot{Q}_{nominal}\) in all cases. Comparing available data of many different heat pumps from Stiebel-Eltron[^Stiebel-EltronTool], specifically those with air as the source medium, three important observations can be made: @@ -131,6 +131,11 @@ Comparing available data of many different heat pumps from Stiebel-Eltron[^Stieb * The maximum and minimum power values vary a lot across the possible source and sink temperatures * The differences between heat pump systems necessitates that the curves, if this information is available, can be given as input to the simulation for improved accuracy compared to averaged curves +The curves are used in the calculation of maximum and minimum power and should return values in \([0,1]\): + +$$ \dot{Q}_{out,max} = f_{max}(T_{source,in},T_{sink,out}) \cdot \dot{Q}_{nominal}$$ +$$ \dot{Q}_{out,min} = f_{min}(T_{source,in},T_{sink,out}) \cdot \dot{Q}_{nominal}$$ + If no specific curves are known for the heat pump, a model based on biquadratic polynomials is described in TRNSYS Type 401 and can be used as a best guess: $$ \dot{Q}_{out,max} = c_{q1} + c_{q2} \ \bar{T}_{source,in} + c_{q3} \ \bar{T}_{sink,out} + c_{q4} \ \bar{T}_{source,in} \ \bar{T}_{sink,out} \\ @@ -139,7 +144,7 @@ $$ \dot{Q}_{out,max} = c_{q1} + c_{q2} \ \bar{T}_{source,in} + c_{q3} \ \bar{T}_ where all temperatures are normalised according to $$ \bar{T} = \frac{T \ [°C]}{273.15} + 1 $$ -Note that this does not include a formulation for minimum power, which is assumed to be zero. It is an open question if any set of coefficient exists, that can represent most heat pump technologies with reasonable accuracy. We would be glad to include these as default values. +Note that this does not include a formulation for minimum power, which is assumed to be zero. It is an open question if any set of coefficients exists, that can represent most heat pump technologies with reasonable accuracy. We would be glad to include these as default values. [^Stiebel-EltronTool]: Stiebel-Eltron Heat Pump Toolbox: [https://www.stiebel-eltron.com/toolbox/waermepumpe/](https://www.stiebel-eltron.com/toolbox/waermepumpe/) @@ -167,7 +172,7 @@ The part-load behavior depends also on the type of the heat pump (on-off or inve Taking the correction factor curve from the figure above for inverter heat pumps, the maximum part load factor is reached at 50 % part load with an increase of the COP by about 10%. Contrary, in Toffanin2019[^Toffanin2019], the part load factor is assumed to be much higher, reaching its maximum at 25 % part load ratio with a part load factor of 2.1 (efficiency increase of 110 %). These discrepancies illustrate the wide range of literature data and the difficulty in finding a general part load curve. In Lachance2021[^Lachance2021], several part load curves are compared. -A unified formulation for on-off and inverter heat pumps can be dervied from descriptions in the literature. The PLF curve for inverter-driven heat pumps is based on Blervaque2015[^Blervaque2015] and Filliard2009[^Filliard2009]. There, the curve is defined in two separate sections. The section below the point of maximum efficiency is a function according to the PLF calculation in DIN EN 14825 for water-based on-off heatpumps, differing from the cited paper but according to Fuentes2019[^Fuentes2019]. The section above the point of the maximum efficiency is approximated as linear. The definition of these curve can be done entering the coefficient \(c\) and the coordinates of the two points highlighted in the figure below. Here, \(c\) is chosen as 0.95 and \(a\) is used to stretch the curve to meet the intersection point with the straight line. +A unified formulation for on-off and inverter heat pumps can be derived from descriptions in the literature. The PLF curve for inverter-driven heat pumps is based on Blervaque2015[^Blervaque2015] and Filliard2009[^Filliard2009]. There, the curve is defined in two separate sections. The section below the point of maximum efficiency is a function according to the PLF calculation in DIN EN 14825 for water-based on-off heatpumps, differing from the cited paper according to Fuentes2019[^Fuentes2019]. The section above the point of the maximum efficiency is approximated as linear. The definition of these curve can be done entering the coefficient \(c\) and the coordinates of the two points highlighted in the figure below. Here, \(c\) is chosen as 0.95 and \(a\) is used to stretch the curve to meet the intersection point with the straight line. ![Input curve for part load efficiency of inverter heat pump](fig/230119_PartLoadPowerCurve_input.JPG) @@ -235,8 +240,8 @@ The figure above shows how the algorithm works for an example with two sources a 1. In the first step source 1 has 4 units of energy left at 25 °C to supply 7 units of heat at 70 °C and 4 units of electricity are available. With a COP of 4.0, the result is that the source layer is used up completely, which requires 2 units of electricity and produces 6 units of heat. 2. In the second step 1 unit of heat is left to be supplied at 70 °C. The second source layer supplies 0.5 units of heat and requires 0.5 units of electricity, for a COP of 2.0. -3. In the third step the second sink layer with 5 units of heat at 45 °C can be supplied from the remaining 5.5 units of the second source layer. With a COP of 4.0 this requires 1.25 units of electricity. If the remaining available electricity had been less than 1.5 units, some energy of the second sink layer would have been left unsupplied. -4. In the fourth step one of the inputs or outputs, namely the heat output, was used up completely and the algorithm finishes. +3. In the third step the second sink layer with 5 units of heat at 45 °C can be supplied from the remaining 5.5 units of the second source layer. With a COP of 4.0 this requires 1.25 units of electricity. If the remaining available electricity had been less than 1.25 units, some energy of the second sink layer would have been left unsupplied. +4. In the fourth step it is detected that one of the inputs or outputs, namely the heat output, was used up completely and the algorithm finishes. Note that the algorithm also works with sources and sinks that can supply/request an infinite amount of energy as long as it is never the heat input *and* heat output that are infinite. From 7a9994cf61aa5fc7fe049f3742ae675e5d3d89b2 Mon Sep 17 00:00:00 2001 From: Etienne Ott Date: Mon, 16 Sep 2024 11:36:34 +0200 Subject: [PATCH 10/17] Update section on function input definitions for new functions from heat pump model. --- docs/resie_component_parameters.md | 49 +++++++++++++++++++++++++----- 1 file changed, 42 insertions(+), 7 deletions(-) diff --git a/docs/resie_component_parameters.md b/docs/resie_component_parameters.md index 6f75264..70b8fc3 100644 --- a/docs/resie_component_parameters.md +++ b/docs/resie_component_parameters.md @@ -51,23 +51,58 @@ This would result in the output of the source not being used to fill storages. T Similarly, components can be configured to be dis-/allowed to draw energy from storages with the corresponding `unload_storages medium` parameter. Any input/output not specified in this way is assumed to be allowed to un-/load storages. -### Efficiency functions -Various components, particularly transformers, require an efficiency function to determine how much energy is produced from a given input and vice-versa. This is described in more detail in [the chapter on general effects and traits](resie_transient_effects.md#part-load-ratio-dependent-efficiency). In the simplest case this can be a constant factor, such as a 1:1 ratio, however in the mathematical models of the components this can be almost any continuous function mapping a part-load ratio on [0,1] to an efficiency factor. +### Function definitions +Various components, particularly transformers, require an input of functions to determine efficiency, available power and other variables. The definition of a function in the project file is a string and should look like `function_model:values` with `function_model` refering to one of the implemented function prototypes (see specific sub-sections below) and `values` being data required to parameterise the prototype. Various function prototypes are implemented for different purposes. + +In general `:` is used as seperator between model and values and `,` as seperator for numbers with `.` as decimal point. Some component parameters take in two functions, which are concatenated with `:` again. For example `poly:0.1,2.4:const:0.7`. + +#### Efficiency functions +Used to determine an efficiency factor of how much energy is produced from a given input and vice-versa. This is described in more detail in [the chapter on general effects and traits](resie_transient_effects.md#part-load-ratio-dependent-efficiency). In the simplest case this can be a constant factor, such as a 1:1 ratio, however in the mathematical models of the components this can be almost any continuous function mapping \(\kappa \in [0,1]\) to an efficiency factor. Because the efficiency must always be defined in relation on input or output of the component, the functionality supports this interface being defined as linear. This means that the amount of energy on this interface is strictly linear to the PLR multiplied with the design power. The other interfaces of the component are then calculated with efficiencies relative to this linear interface. Example: A fuel boiler defined with linear heat output would have a constant efficiency of 1.0 on the heat output and a different efficiency on the fuel input. If the conversion from fuel to heat is 90% efficient, this results in an efficiency factor of 1.1 on the fuel input. For the configuration of components a selected number of different cases are implemented. If a function is known, but cannot be precisely modelled using one of these parameterised functions, it is possible to use a piece-wise linear approximation, which is also useful to model data-driven functions. -The definition of an efficiency function in the project file, for example a parameter `efficiency_heat_out`, should look like this: `:` with `function_model` being a string (see below) and `list_of_numbers` being a comma-seperated list of numbers with a period as decimal seperator and no thousands-seperator. The meaning of the numbers depends on the function model. +**Implemented function prototypes** -Three different function models are implemented: +* `const`: Takes one number and uses it as a constant efficiency factor. E.g. `const:0.9`. +* `poly`: Takes a list of numbers and uses them as the coefficients of a polynomial with order n-1 where n is the length of coefficients. The list starts with coefficients of the highest order. E.g. `poly:0.5,2.0,0.1` means \(e(x) = 0.5x^2 + 2x + 0.1\) +* `pwlin`: A piece-wise linear interpolation. Takes a list of numbers and uses them as support values for an even distribution of linear sections on the interval [0,1]. The PLR-values (on the x axis) are implicit with a step size equal to the inverse of the length of support values minus 1. The first and last support values are used as the values for a PLR of 0.0 and 1.0 respectively. E.g. `pwlin:0.6,0.8,0.9` means two sections of step size 0.5 with a value of `e(0.0)==0.6`, `e(0.5)==0.8`, `e(1.0)=0.9` and linear interpolation inbetween. -* const: Takes one number and uses it as a constant efficiency factor. E.g. `const:0.9`. -* poly: Takes a list of numbers and uses them as the coefficients of a polynomial with order n-1 where n is the length of coefficients. The list starts with coefficients of the highest order. E.g. `poly:0.5,2.0,0.1` means \(e(x) = 0.5x^2 + 2x + 0.1\) -* pwlin: A piece-wise linear interpolation. Takes a list of numbers and uses them as support values for an even distribution of linear sections on the interval [0,1]. The PLR-values (on the x axis) are implicit with a step size equal to the inverse of the length of support values minus 1. The first and last support values are used as the values for a PLR of 0.0 and 1.0 respectively. E.g. `pwlin:0.6,0.8,0.9` means two sections of step size 0.5 with a value of `e(0.0)==0.6`, `e(0.5)==0.8`, `e(1.0)=0.9` and linear interpolation inbetween. +**Discretization** Because not all functions are (easily) invertible a numerical approximation of the inverse function is precalculated during initialisation. The size of the discretization step can be controlled with the parameter `nr_discretization_steps`, which has a default value of 30 steps. It should not often be necessary to use a different value, but this can be beneficial to balance accuracy vs. performance. In particular if a piece-wise linear interpolation is used it makes sense to use the same number of discretization steps so that the support values overlap for both the efficiency function and its inverse. +#### COP functions +Used by heat pumps and similar components to calculate the COP depending on input/output temperatures and the PLR. Instead of a single three-dimensional function the input is composed of a two-dimensional function for the temperature part and [an efficiency function](#efficiency-functions) for a PLF part. This assumes that the PLF function is independent of the temperatures, as described [in the model](resie_energy_system_components.md#part-load-efficiency). A possible input: `carnot:0.4:poly:0.5,0.4` + +**Implemented function prototypes** + +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`. +* `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. + +An example of a field definition with additional line breaks and spaces added for clarity: +``` +"field: + 0, 0,10,20,30; + 0,15, 9, 6, 4; +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\). + +#### Power functions +Used by heat pumps and similar components to calculate the minimum and maximum power available, depending on temperature values, as fraction of the nominal power. Return values should therefore be in \([0,1]\). + +**Implemented function prototypes** + +* `const`: Takes one number and uses it as a constant fraction. E.g. `const:1.0`. +* `poly-2`: A 2D-polynomial of order two. Takes a list of nine values for the constants in \(f(x,y) = c_1 + c_2 \ x + c_3 \ y + c_4 \ x^2 + c_5 \ y^2 + c_6 \ xy + c_7 \ x^2y + c_8 \ xy^2 + c_9 \ x^2y^2\). E.g. `poly-2:0.3,0.4,0.1,0.2,0.0,0.0,0.0,0.0,0.0`. + + ### Control modules For a general overview of what control modules do and how they work, see [this chapter](resie_operation_control.md). In the following the currently implemented control modules and their required parameters are listed. From d6d3a16f6984b4dc782c5775bcd1ef4191f3f79f Mon Sep 17 00:00:00 2001 From: Etienne Ott Date: Mon, 16 Sep 2024 15:46:07 +0200 Subject: [PATCH 11/17] Update documentation of HeatPump parameters. --- docs/resie_component_parameters.md | 47 +++++++++++++++++++++++++----- 1 file changed, 40 insertions(+), 7 deletions(-) diff --git a/docs/resie_component_parameters.md b/docs/resie_component_parameters.md index 70b8fc3..26742bc 100644 --- a/docs/resie_component_parameters.md +++ b/docs/resie_component_parameters.md @@ -448,18 +448,51 @@ This needs to be parameterized with the medium of the fuel intake as the impleme | **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 | | ----------- | ------- | --- | ------------------------ | ------------------------ | -| `power_th` | `Float` | Y/N | 4000.0 | The thermal design power at the heating output. | -| `min_power_fraction` | `Float` | Y/Y | 0.2 | The minimum fraction of the design power_th that is required for the plant to run. | -| `min_run_time` | `UInt` | Y/Y | 1800 | Minimum run time of the plant in seconds. Will be ignored if other constraints apply. | -| `constant_cop` | `Float` | N/N | 3.0 | If given, ignores the dynamic COP calculation and uses a constant value. | -| `input_temperature` | `Temperature` | N/N | 20.0 | If given, ignores the supplied temperature and uses a constant one. | -| `output_temperature` | `Temperature` | N/N | 65.0 | If given, ignores the requested temperature and uses a constant one. | +| `power_th` | `Float` | Y/N | 4000.0 | The thermal design power at the heating output. This must be maximal value considering the max power function, as that is normalised to 1.0. | +| `cop_function` | `String` | Y/Y | `carnot:0.4:const:1.0` | See [description of function definitions](#cop-functions). The function for the the dynamic COP with the temperature-dependent part in the first function and the PLR-dependent part in the second. +| `bypass_cop` | `Float` | Y/Y | 15.0 | A constant COP value used for bypass operation. | +| `max_power_function` | `String` | Y/Y | `const:1.0` | See [description of function definitions](#power-functions). The function for the maximum power as fraction of nominal power. | +| `min_power_function` | `String` | Y/Y | `const:1.0` | See [description of function definitions](#power-functions). The function for the minimum power as fraction of nominal power. | +| `consider_icing` | `Bool` | N/Y | false | If true, enables the calculation of icing losses. | +| `icing_coefficients` | `String` | N/Y | `3,-0.42,15,2,30` | Parameters for the icing losses model. | +| `input_temperature` | `Temperature` | N/N | 20.0 | If given, ignores the supplied temperatures and uses a constant one. | +| `output_temperature` | `Temperature` | N/N | 65.0 | If given, ignores the requested temperatures and uses a constant one. | +| `optimise_slice_dispatch` | `Bool` | N/Y | false | If true, enables the optimisation of slice dispatch. | +| `optimal_plr` | `Float` | N/N | 0.45 | The PLR at which efficiency is highest. Only used for slice dispatch optimisation. | +| `nr_optimisation_passes` | `UInt` | N/Y | 10 | The number of passes the optimisation algorithm performs. Note that this heavily impacts performance. | + +#### Exemplary input file definition for HeatPump +**Simple heat pump with constant COP and fixed output temperature** +```json +"TST_TH_HP_01": { + "type": "HeatPump", + "output_refs": ["TST_TH_BUS_01"], + "power_th": 12000, + "cop_function": "const:3.0", + "output_temperature": 70.0 +} +``` + +**Air-sourced heat pump with dynamic COP and variable power from data sheets** +```json +"TST_TH_HP_01": { + "type": "HeatPump", + "output_refs": ["TST_TH_BUS_01"], + "power_th": 20000, + "cop_function": "field:0,45,55,65,75,85,95,105;0,3.79,3.26,2.87,2.57,2.34,2.15,1.99;10,4.59,3.79,3.26,2.87,2.57,2.34,2.15;20,5.93,4.59,3.79,3.26,2.87,2.57,2.34;30,8.74,5.93,4.59,3.79,3.26,2.87,2.57;40,20.15,8.74,5.93,4.59,3.79,3.26,2.87;50,20.15,20.15,8.74,5.93,4.59,3.79,3.26;60,20.15,20.15,20.15,8.74,5.93,4.59,3.79;70,20.15,20.15,20.15,20.15,8.74,5.93,4.59;80,20.15,20.15,20.15,20.15,20.15,8.74,5.93;90,20.15,20.15,20.15,20.15,20.15,20.15,8.74;100,20.15,20.15,20.15,20.15,20.15,20.15,20.15:poly:0.4,0.6", + "max_power_function": "poly-2:0.6625,0.0008929,-0.001", + "min_power_function": "poly-2:0.5125,0.0001786,-0.001", + "bypass_cop": 20.15, + "consider_icing": true +} +``` + ## Storage From 40c5314a793a022beea91f6fdecf1c4e5b3329a2 Mon Sep 17 00:00:00 2001 From: Etienne Ott Date: Mon, 16 Sep 2024 15:49:11 +0200 Subject: [PATCH 12/17] Standardize existing example input blocks. --- docs/resie_component_parameters.md | 86 +++++++++++++++--------------- 1 file changed, 43 insertions(+), 43 deletions(-) diff --git a/docs/resie_component_parameters.md b/docs/resie_component_parameters.md index 26742bc..544c10c 100644 --- a/docs/resie_component_parameters.md +++ b/docs/resie_component_parameters.md @@ -625,7 +625,7 @@ Can be given a profile for the maximum power it can provide, which is scaled by | `max_source_in_temperature` | `Float` | N/N | 40.0 | Maximum source input temperature. | | `minimal_reduction` | `Float` | N/Y | 2.0 | Minimal reduction temperature. For the `constant` model this exact value is used, for `lmtd` a slight correction is applied. | -**Examplary input file definition** +**Exemplary input file definition for GenericHeatSource** ```JSON "TST_SRC_01": { @@ -829,48 +829,48 @@ To perform this calculation in every timestep, the following input parameters ar | `grout_heat_conductivity` | `Float` | Y/Y | 2.0 | [W/(Km)] | heat conductivity of grout (filling material) | -**Examplary input file definition for geothermal probe:** +**Exemplary input file definition for GeothermalProbe:** ```JSON - "TST_GTP_01": { - "type": "GeothermalProbes", - "m_heat_out": "m_h_w_lt1", - "control_refs": [], - "output_refs": [ - "TST_HP_01" - ], - "model_type": "detailed", - "___GENERAL PARAMETER___": "", - "max_output_power": 150, - "max_input_power": 150, - "regeneration": true, - "soil_undisturbed_ground_temperature": 13, - "soil_heat_conductivity": 1.6 , - "soil_density": 1800, - "soil_specific_heat_capacity": 2400, - "probe_field_geometry": "rectangle", - "number_of_probes_x": 3, - "number_of_probes_y": 12, - "probe_field_key_2": "", - "borehole_spacing": 8, - "probe_depth": 150, - "borehole_diameter": 0.16, - "boreholewall_start_temperature": 13, - "unloading_temperature_spread": 1.5, - "loading_temperature_spread": 4, - "___SIMPLIFIED MODEL___": "", - "borehole_thermal_resistance": 0.1, - "___DETAILED MODEL___": "", - "probe_type": 2, - "pipe_diameter_outer": 0.032, - "pipe_diameter_inner": 0.0262, - "pipe_heat_conductivity": 0.42, - "shank_spacing": 0.1, - "fluid_specific_heat_capacity": 3795, - "fluid_density": 1052, - "fluid_kinematic_viscosity": 3.9e-6, - "fluid_heat_conductivity": 0.48, - "fluid_prandtl_number": 31.3, - "grout_heat_conductivity": 2 - } +"TST_GTP_01": { + "type": "GeothermalProbes", + "m_heat_out": "m_h_w_lt1", + "control_refs": [], + "output_refs": [ + "TST_HP_01" + ], + "model_type": "detailed", + "___GENERAL PARAMETER___": "", + "max_output_power": 150, + "max_input_power": 150, + "regeneration": true, + "soil_undisturbed_ground_temperature": 13, + "soil_heat_conductivity": 1.6 , + "soil_density": 1800, + "soil_specific_heat_capacity": 2400, + "probe_field_geometry": "rectangle", + "number_of_probes_x": 3, + "number_of_probes_y": 12, + "probe_field_key_2": "", + "borehole_spacing": 8, + "probe_depth": 150, + "borehole_diameter": 0.16, + "boreholewall_start_temperature": 13, + "unloading_temperature_spread": 1.5, + "loading_temperature_spread": 4, + "___SIMPLIFIED MODEL___": "", + "borehole_thermal_resistance": 0.1, + "___DETAILED MODEL___": "", + "probe_type": 2, + "pipe_diameter_outer": 0.032, + "pipe_diameter_inner": 0.0262, + "pipe_heat_conductivity": 0.42, + "shank_spacing": 0.1, + "fluid_specific_heat_capacity": 3795, + "fluid_density": 1052, + "fluid_kinematic_viscosity": 3.9e-6, + "fluid_heat_conductivity": 0.48, + "fluid_prandtl_number": 31.3, + "grout_heat_conductivity": 2 +} ``` \ No newline at end of file From 1bda67e946ab00f9fb1e8f36aad84fe29361438e Mon Sep 17 00:00:00 2001 From: Etienne Ott Date: Mon, 16 Sep 2024 16:00:25 +0200 Subject: [PATCH 13/17] Update description of function definition to clarify use of term model. --- docs/resie_component_parameters.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/resie_component_parameters.md b/docs/resie_component_parameters.md index 544c10c..ab02b45 100644 --- a/docs/resie_component_parameters.md +++ b/docs/resie_component_parameters.md @@ -52,9 +52,9 @@ This would result in the output of the source not being used to fill storages. T Similarly, components can be configured to be dis-/allowed to draw energy from storages with the corresponding `unload_storages medium` parameter. Any input/output not specified in this way is assumed to be allowed to un-/load storages. ### Function definitions -Various components, particularly transformers, require an input of functions to determine efficiency, available power and other variables. The definition of a function in the project file is a string and should look like `function_model:values` with `function_model` refering to one of the implemented function prototypes (see specific sub-sections below) and `values` being data required to parameterise the prototype. Various function prototypes are implemented for different purposes. +Various components, particularly transformers, require an input of functions to determine efficiency, available power and other variables. The definition of a function in the project file is a string and should look like `function_prototype:values` with `function_prototype` refering to one of the implemented function prototypes (see specific sub-sections below) and `values` being data required to parameterise the prototype. Various function prototypes are implemented for different purposes. -In general `:` is used as seperator between model and values and `,` as seperator for numbers with `.` as decimal point. Some component parameters take in two functions, which are concatenated with `:` again. For example `poly:0.1,2.4:const:0.7`. +In general `:` is used as seperator between prototype and values and `,` as seperator for numbers with `.` as decimal point. Some component parameters take in two functions, which are concatenated with `:` again. For example `poly:0.1,2.4:const:0.7`. #### Efficiency functions Used to determine an efficiency factor of how much energy is produced from a given input and vice-versa. This is described in more detail in [the chapter on general effects and traits](resie_transient_effects.md#part-load-ratio-dependent-efficiency). In the simplest case this can be a constant factor, such as a 1:1 ratio, however in the mathematical models of the components this can be almost any continuous function mapping \(\kappa \in [0,1]\) to an efficiency factor. From dd28e17d13074cd1fd3ad09d4fbe4f024edf8a77 Mon Sep 17 00:00:00 2001 From: Etienne Ott Date: Mon, 16 Sep 2024 16:02:58 +0200 Subject: [PATCH 14/17] Remove use of parameter type model as it is no longer used and will likely not be implemented despite the note in the beginning. --- docs/resie_component_parameters.md | 24 ------------------------ 1 file changed, 24 deletions(-) diff --git a/docs/resie_component_parameters.md b/docs/resie_component_parameters.md index ab02b45..91f5948 100644 --- a/docs/resie_component_parameters.md +++ b/docs/resie_component_parameters.md @@ -7,15 +7,12 @@ The description of each component type includes a block with a number of attribu | --- | --- | | **Type name** | `BoundedSink`| | **File** | `energy_systems/general/bounded_sink.jl` | -| **Available models** | `default` | | **System function** | `bounded_sink` | | **Medium** | `medium`/`None` | | **Input media** | `None`/`auto` | | **Output media** | | | **Tracked values** | `IN`, `Max_Energy`, `Losses` | -The available models listed are subtypes to the implementation of a component, which each work slightly differently and might use different parameters. An example is the difference between a condensing gas boiler and a traditional one. **Note: At the moment there is no argument for the model, as each component currently only has one implemented model. In the future this will be extended to include a default model (when no argument is provided) and additional optional models.** - Of particular note are the descriptions of the medium (if it applies) of the component type and its input and output interfaces. The `Medium` is used for components that could handle any type of medium and need to be configured to work with a specific medium. The attributes `Input media` and `Output media` describes which input and output interfaces the type provides and how the media of those can be configured. The syntax `name:value` lists the name of the parameter in the input data that defines the medium first, followed by a forward slash and the default value of the medium second, if any. A value of `None` implies that no default is set and therefore it must be given in the input data. A value of `auto` implies that the value is determined with no required input, usually from the `Medium`. The `Tracked values` attribute lists which values of the component can be tracked with the output specification in the input file (see [this section](resie_input_file_format.md#output-specification-csv-file) for details). Note that a value of `IN` or `OUT` refers to all input or output interfaces of the component. Which these are can be infered from the input and output media attributes and the chosen medium names if they differ from the default values. @@ -161,7 +158,6 @@ This module is implemented for the following component types: `CHPP`, `Electroly | --- | --- | | **Type name** | `BoundedSink`| | **File** | `energy_systems/general/bounded_sink.jl` | -| **Available models** | `default` | | **System function** | `bounded_sink` | | **Medium** | `medium`/`None` | | **Input media** | `None`/`auto` | @@ -188,7 +184,6 @@ Note that either `temperature_profile_file_path`, `constant_temperature` **or** | --- | --- | | **Type name** | `BoundedSupply`| | **File** | `energy_systems/general/bounded_supply.jl` | -| **Available models** | `default` | | **System function** | `bounded_source` | | **Medium** | `medium`/`None` | | **Input media** | | @@ -215,7 +210,6 @@ Note that either `temperature_profile_file_path`, `constant_temperature` **or** | --- | --- | | **Type name** | `Bus`| | **File** | `energy_systems/connections/bus.jl` | -| **Available models** | `default` | | **System function** | `bus` | | **Medium** | `medium`/`None` | | **Input media** | `None`/`auto` | @@ -235,7 +229,6 @@ Note that the tracked value `Transfer->UAC` refers to an output value that corre | --- | --- | | **Type name** | `FixedSink`| | **File** | `energy_systems/general/fixed_sink.jl` | -| **Available models** | `default` | | **System function** | `fixed_sink` | | **Medium** | `medium`/`None` | | **Input media** | `None`/`auto` | @@ -269,7 +262,6 @@ Alias to `FixedSink`. | --- | --- | | **Type name** | `FixedSupply`| | **File** | `energy_systems/general/fixed_supply.jl` | -| **Available models** | `default` | | **System function** | `fixed_source` | | **Medium** | `medium`/`None` | | **Input media** | | @@ -296,7 +288,6 @@ Note that either `temperature_profile_file_path`, `constant_temperature` **or** | --- | --- | | **Type name** | `GridConnection`| | **File** | `energy_systems/connections/grid_connection.jl` | -| **Available models** | `default` | | **System function** | `bounded_source`, `bounded_sink` | | **Medium** | `medium`/`None` | | **Input media** | `None`/`auto` | @@ -323,7 +314,6 @@ Note that either `temperature_profile_file_path`, `constant_temperature` **or** | --- | --- | | **Type name** | `PVPlant`| | **File** | `energy_systems/electric_producers/pv_plant.jl` | -| **Available models** | default: `simplified` | | **System function** | `fixed_source` | | **Medium** | | | **Input media** | | @@ -346,7 +336,6 @@ The energy it produces in each time step must be given as a profile, but can be | --- | --- | | **Type name** | `CHPP`| | **File** | `energy_systems/electric_producers/chpp.jl` | -| **Available models** | default: `simplified` | | **System function** | `transformer` | | **Medium** | | | **Input media** | `m_gas_in`/`m_c_g_natgas` | @@ -372,7 +361,6 @@ A Combined Heat and Power Plant (CHPP) that transforms fuel into heat and electr | --- | --- | | **Type name** | `Electrolyser`| | **File** | `energy_systems/others/electrolyser.jl` | -| **Available models** | default: `simplified` | | **System function** | `transformer` | | **Medium** | | | **Input media** | `m_el_in`/`m_e_ac_230v` | @@ -415,7 +403,6 @@ If parameter `heat_lt_is_usable` is false, the output interface `m_heat_lt_out` | --- | --- | | **Type name** | `FuelBoiler`| | **File** | `energy_systems/heat_producers/fuel_boiler.jl` | -| **Available models** | default: `simplified` | | **System function** | `transformer` | | **Medium** | | | **Input media** | `m_fuel_in` | @@ -443,7 +430,6 @@ This needs to be parameterized with the medium of the fuel intake as the impleme | --- | --- | | **Type name** | `HeatPump`| | **File** | `energy_systems/heat_producers/heat_pump.jl` | -| **Available models** | default: `carnot` | | **System function** | `transformer` | | **Medium** | | | **Input media** | `m_el_in`/`m_e_ac_230v`, `m_heat_in`/`m_h_w_lt1` | @@ -501,7 +487,6 @@ Elevates supplied low temperature heat to a higher temperature with input electr | --- | --- | | **Type name** | `Storage`| | **File** | `energy_systems/general/storage.jl` | -| **Available models** | default: `simplified` | | **System function** | `storage` | | **Medium** | `medium`/`None` | | **Input media** | `None`/`auto` | @@ -520,7 +505,6 @@ A generic implementation for energy storage technologies. | --- | --- | | **Type name** | `Battery`| | **File** | `energy_systems/storage/battery.jl` | -| **Available models** | default: `simplified` | | **System function** | `storage` | | **Medium** | `medium`/`m_e_ac_230v` | | **Input media** | `None`/`auto` | @@ -539,7 +523,6 @@ A storage for electricity. | --- | --- | | **Type name** | `BufferTank`| | **File** | `energy_systems/storage/buffer_tank.jl` | -| **Available models** | default: `simplified` | | **System function** | `storage` | | **Medium** | `medium`/`m_h_w_ht1` | | **Input media** | `None`/`auto` | @@ -548,8 +531,6 @@ A storage for electricity. A short-term storage for heat of thermal carrier fluids, typically water. -**Model `simplified`:** - If the adaptive temperature calculation is activated, the temperatures for the input/output of the BT depends on the load state. If it is sufficiently full (depends on the `switch_point`), the BT can output at the `high_temperature` and takes in at the `high_temperature`. If the load falls below that, the output temperature drops and reaches the `low_temperature` as the load approaches zero. If the adaptive temperature calculation is deactivated, always assumes the `high_temperature` for both input and output. @@ -569,7 +550,6 @@ If the adaptive temperature calculation is deactivated, always assumes the `high | --- | --- | | **Type name** | `SeasonalThermalStorage`| | **File** | `energy_systems/storage/seasonal_thermal_storage.jl` | -| **Available models** | default: `simplified` | | **System function** | `storage` | | **Medium** | | | **Input media** | `m_heat_in`/`m_h_w_ht1` | @@ -578,8 +558,6 @@ If the adaptive temperature calculation is deactivated, always assumes the `high A long-term storage for heat stored in a stratified artificial aquifer. -**Model `simplified`:** - If the adaptive temperature calculation is activated, the temperatures for the input/output of the STES depends on the load state. If it is sufficiently full (depends on the `switch_point`), the STES can output at the `high_temperature` and takes in at the `high_temperature`. If the load falls below that, the output temperature drops and reaches the `low_temperature` as the load approaches zero. If the adaptive temperature calculation is deactivated, always assumes the `high_temperature` for both input and output. @@ -601,7 +579,6 @@ If the adaptive temperature calculation is deactivated, always assumes the `high | --- | --- | | **Type name** | `GenericHeatSource`| | **File** | `energy_systems/heat_sources/generic_heat_source.jl` | -| **Available models** | `simplified` (default) | | **System function** | `bounded_source` | | **Medium** | `medium`/`None` | | **Input media** | | @@ -650,7 +627,6 @@ Can be given a profile for the maximum power it can provide, which is scaled by | --- | --- | | **Type name** | `GeothermalProbes`| | **File** | `energy_systems/heat_sources/geothermal_probes.jl` | -| **Available models** | `simplified` (default), `detailed` | | **System function** | `storage` | | **Medium** | | | **Input media** | `m_heat_in`/`m_h_w_ht1` | From 9900fb205a050668ced7e9c89607182ef4133398 Mon Sep 17 00:00:00 2001 From: Etienne Ott Date: Mon, 16 Sep 2024 16:34:58 +0200 Subject: [PATCH 15/17] Fix typo in description of input/output media. --- docs/resie_component_parameters.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/resie_component_parameters.md b/docs/resie_component_parameters.md index 91f5948..5d91bcb 100644 --- a/docs/resie_component_parameters.md +++ b/docs/resie_component_parameters.md @@ -13,7 +13,7 @@ The description of each component type includes a block with a number of attribu | **Output media** | | | **Tracked values** | `IN`, `Max_Energy`, `Losses` | -Of particular note are the descriptions of the medium (if it applies) of the component type and its input and output interfaces. The `Medium` is used for components that could handle any type of medium and need to be configured to work with a specific medium. The attributes `Input media` and `Output media` describes which input and output interfaces the type provides and how the media of those can be configured. The syntax `name:value` lists the name of the parameter in the input data that defines the medium first, followed by a forward slash and the default value of the medium second, if any. A value of `None` implies that no default is set and therefore it must be given in the input data. A value of `auto` implies that the value is determined with no required input, usually from the `Medium`. +Of particular note are the descriptions of the medium (if it applies) of the component type and its input and output interfaces. The `Medium` is used for components that could handle any type of medium and need to be configured to work with a specific medium. The attributes `Input media` and `Output media` describes which input and output interfaces the type provides and how the media of those can be configured. The syntax `name`/`value` lists the name of the parameter in the input data that defines the medium first, followed by a forward slash and the default value of the medium, if any. A value of `None` implies that no default is set and therefore it must be given in the input data. A value of `auto` implies that the value is determined with no required input, usually from the `Medium`. The `Tracked values` attribute lists which values of the component can be tracked with the output specification in the input file (see [this section](resie_input_file_format.md#output-specification-csv-file) for details). Note that a value of `IN` or `OUT` refers to all input or output interfaces of the component. Which these are can be infered from the input and output media attributes and the chosen medium names if they differ from the default values. From 28eeb3e50fc8b0a6f7835035632c2a68943f87a0 Mon Sep 17 00:00:00 2001 From: Etienne Ott Date: Wed, 18 Sep 2024 09:15:02 +0200 Subject: [PATCH 16/17] Fix wrong default value for min_power_function of HeatPump. --- docs/resie_component_parameters.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/resie_component_parameters.md b/docs/resie_component_parameters.md index 5d91bcb..24f07e3 100644 --- a/docs/resie_component_parameters.md +++ b/docs/resie_component_parameters.md @@ -444,7 +444,7 @@ Elevates supplied low temperature heat to a higher temperature with input electr | `cop_function` | `String` | Y/Y | `carnot:0.4:const:1.0` | See [description of function definitions](#cop-functions). The function for the the dynamic COP with the temperature-dependent part in the first function and the PLR-dependent part in the second. | `bypass_cop` | `Float` | Y/Y | 15.0 | A constant COP value used for bypass operation. | | `max_power_function` | `String` | Y/Y | `const:1.0` | See [description of function definitions](#power-functions). The function for the maximum power as fraction of nominal power. | -| `min_power_function` | `String` | Y/Y | `const:1.0` | See [description of function definitions](#power-functions). The function for the minimum power as fraction of nominal power. | +| `min_power_function` | `String` | Y/Y | `const:0.2` | See [description of function definitions](#power-functions). The function for the minimum power as fraction of nominal power. | | `consider_icing` | `Bool` | N/Y | false | If true, enables the calculation of icing losses. | | `icing_coefficients` | `String` | N/Y | `3,-0.42,15,2,30` | Parameters for the icing losses model. | | `input_temperature` | `Temperature` | N/N | 20.0 | If given, ignores the supplied temperatures and uses a constant one. | From 8e80abc1fcbd42d7de403a72f3fca0adc4a7044e Mon Sep 17 00:00:00 2001 From: Etienne Ott Date: Wed, 18 Sep 2024 09:47:52 +0200 Subject: [PATCH 17/17] Add description of control module temperature_sorting. --- docs/resie_component_parameters.md | 12 ++++++++++++ docs/resie_operation_control.md | 7 ++++++- 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/docs/resie_component_parameters.md b/docs/resie_component_parameters.md index 24f07e3..e18ccc2 100644 --- a/docs/resie_component_parameters.md +++ b/docs/resie_component_parameters.md @@ -150,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. + +This module is implemented for the following component types: `HeatPump` + +| | | +| --- | --- | +| **name** | Name of the module. Fixed value of `temperature_sorting` | +| **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`. ## Boundary and connection components diff --git a/docs/resie_operation_control.md b/docs/resie_operation_control.md index a1cd4c4..f39bacc 100644 --- a/docs/resie_operation_control.md +++ b/docs/resie_operation_control.md @@ -37,12 +37,17 @@ The currently implemented callbacks are: * `upper_plr_limit`: Sets the upper limit of the PLR to a given value. "Upper" in this case means that the PLR is calculated to not exceed this value, but it may be lower due to the exact circumstances of available energies on the inputs and outputs of a component. For example a module might set the limit to 75%, however the component is limited by available input energy and can only be operated at 50%. This callback is implemented for transformers. * `charge_is_allowed`: Allows the charging of a battery. * `discharge_is_allowed`: Allows the discharging of a battery. +* `reorder_inputs`: Reorders a list of input energy exchanges used in steps `potential` and `process`. +* `reorder_outputs`: Reorders a list of output energy exchanges used in steps `potential` and `process`. -The following described the currently implemented control modules. The required parameters are described in the [component specification chapter](resie_component_parameters.md#control-modules). +**Note:** The callbacks `reorder_inputs` and `reorder_outputs` are not aggregated. They are evaluated one module at a time in the order they appear in the component config within the project file. + +The following describes the currently implemented control modules. The required parameters are described in the [component specification chapter](resie_component_parameters.md#control-modules). * `economical_discharge`: Handles the discharging of a battery to only be allowed if sufficient charge is available and a linked PV plant has available power below a given threshold. Mostly used for examplatory purposes. * `profile_limited`: Sets the maximum PLR of a component to values from a profile. Used to set the operation of a component to a fixed schedule while allowing circumstances to override the schedule in favour of lower values. * `storage_loading`: Controls a component to only operate when the charge of a linked storage component falls below a certain threshold and keep operating until a certain higher threshold is reached and minimum operation time has passed. This is often used to avoid components switching on and off rapidly to keep a storage topped up, as realised systems often operate with this kind of hysteresis behaviour. +* `temperature_sorting`: Controls a component, that can handle multiple inputs or outputs with different temperatures, so that the inputs/outputs are sorted by the temperatures they provide/request. For example a heat pump can use the heat source with the highest temperature first for improved efficiency. ## State machines