diff --git a/IDEAS/Fluid/HeatPumps/BaseClasses/HeatSource_CondensingGasBurner.mo b/IDEAS/Fluid/HeatPumps/BaseClasses/HeatSource_CondensingGasBurner.mo
deleted file mode 100644
index 75c033df96..0000000000
--- a/IDEAS/Fluid/HeatPumps/BaseClasses/HeatSource_CondensingGasBurner.mo
+++ /dev/null
@@ -1,193 +0,0 @@
-within IDEAS.Fluid.HeatPumps.BaseClasses;
-model HeatSource_CondensingGasBurner
- "Burner for use in Boiler, based on interpolation data. Takes into account losses of the boiler to the environment"
- replaceable package Medium =
- Modelica.Media.Interfaces.PartialMedium "Medium in the component";
- final parameter Real[6] modVector={0,20,40,60,80,100} "6 modulation steps, %";
- Real eta "Instantaneous efficiency of the boiler (higher heating value)";
- Real[6] etaVector
- "Thermal efficiency (higher heating value) for 6 modulation steps, base 1";
- Real[6] QVector "Thermal power for 6 modulation steps, in kW";
- Modelica.Units.SI.Power QMax
- "Maximum thermal power at specified evap and condr temperatures, in W";
- Modelica.Units.SI.Power QAsked(start=0);
- parameter Modelica.Units.SI.ThermalConductance UALoss
- "UA of heat losses of HP to environment";
- parameter Modelica.Units.SI.Power QNom "The power at nominal conditions";
- final parameter Modelica.Units.SI.Power QNom0=10100
- "Nominal power of the boiler from which the power data are used in this model";
- constant Real etaNom=0.922
- "Nominal efficiency (higher heating value)of the xxx boiler at 50/30degC. See datafile";
- parameter Real modulationMin(max=29) = 10 "Minimal modulation percentage";
- parameter Real modulationStart(min=min(30, modulationMin + 5)) = 20
- "Min estimated modulation level required for start of HP";
- Real modulationInit "Initial modulation, decides on start/stop of the boiler";
- Real modulation(min=0, max=1) "Current modulation percentage";
- Modelica.Units.SI.Power PFuel "Resulting fuel consumption";
- input Modelica.Units.SI.Temperature THxIn "Condensor temperature";
- input Modelica.Units.SI.Temperature TBoilerSet
- "Condensor setpoint temperature. Not always possible to reach it";
- input Modelica.Units.SI.MassFlowRate m_flowHx "Condensor mass flow rate";
- input Modelica.Units.SI.Temperature TEnvironment
- "Temperature of environment for heat losses";
- input Modelica.Units.SI.SpecificEnthalpy hIn "Specific enthalpy at the inlet";
-protected
- Real m_flowHx_scaled = IDEAS.Utilities.Math.Functions.smoothMax(x1=m_flowHx, x2=0,deltaX=0.001) * QNom0/QNom
- "mass flow rate, scaled with the original and the actual nominal power of the boiler";
- constant Real kgps2lph=3600/Medium.density(Medium.setState_pTX(Medium.p_default, Medium.T_default, Medium.X_default))*1000
- "Conversion from kg/s to l/h";
- Modelica.Blocks.Tables.CombiTable2Ds eta100(smoothness=Modelica.Blocks.Types.Smoothness.ContinuousDerivative,
- table=[0,100,400,700,1000,1300; 20.0,0.9015,0.9441,0.9599,0.9691,0.9753;
- 30.0,0.8824,0.9184,0.9324,0.941,0.9471; 40.0,0.8736,0.8909,0.902,0.9092,
- 0.9143; 50.0,0.8676,0.8731,0.8741,0.8746,0.8774; 60.0,0.8,0.867,0.8681,
- 0.8686,0.8689; 70.0,0.8,0.8609,0.8619,0.8625,0.8628; 80.0,0.8,0.8547,
- 0.8558,0.8563,0.8566])
- annotation (Placement(transformation(extent={{-58,66},{-38,86}})));
- Modelica.Blocks.Tables.CombiTable2Ds eta80(smoothness=Modelica.Blocks.Types.Smoothness.ContinuousDerivative,
- table=[0,100,400,700,1000,1300; 20.0,0.9155,0.9587,0.9733,0.9813,0.9866;
- 30.0,0.8937,0.9311,0.9449,0.953,0.9585; 40.0,0.8753,0.9007,0.9121,
- 0.9192,0.9242; 50.0,0.8691,0.8734,0.8755,0.8804,0.884; 60.0,0.8628,
- 0.8671,0.8679,0.8683,0.8686; 70.0,0.7415,0.8607,0.8616,0.862,0.8622;
- 80.0,0.6952,0.8544,0.8552,0.8556,0.8559])
- annotation (Placement(transformation(extent={{-58,32},{-38,52}})));
- Modelica.Blocks.Tables.CombiTable2Ds eta60(smoothness=Modelica.Blocks.Types.Smoothness.ContinuousDerivative,
- table=[0,100,400,700,1000,1300; 20.0,0.9349,0.9759,0.9879,0.9941,0.998;
- 30.0,0.9096,0.9471,0.9595,0.9664,0.9709; 40.0,0.8831,0.9136,0.9247,
- 0.9313,0.9357; 50.0,0.8701,0.8759,0.8838,0.8887,0.8921; 60.0,0.8634,
- 0.8666,0.8672,0.8675,0.8677; 70.0,0.8498,0.8599,0.8605,0.8608,0.861;
- 80.0,0.8488,0.8532,0.8538,0.8541,0.8543])
- annotation (Placement(transformation(extent={{-58,-6},{-38,14}})));
- Modelica.Blocks.Tables.CombiTable2Ds eta40(smoothness=Modelica.Blocks.Types.Smoothness.ContinuousDerivative,
- table=[0,100,400,700,1000,1300; 20.0,0.9624,0.9947,0.9985,0.9989,0.999;
- 30.0,0.9333,0.9661,0.9756,0.9803,0.9833; 40.0,0.901,0.9306,0.94,0.9451,
- 0.9485; 50.0,0.8699,0.8871,0.8946,0.8989,0.9018; 60.0,0.8626,0.8647,
- 0.8651,0.8653,0.8655; 70.0,0.8553,0.8573,0.8577,0.8579,0.8581; 80.0,
- 0.8479,0.8499,0.8503,0.8505,0.8506])
- annotation (Placement(transformation(extent={{-58,-44},{-38,-24}})));
- Modelica.Blocks.Tables.CombiTable2Ds eta20(smoothness=Modelica.Blocks.Types.Smoothness.ContinuousDerivative,
- table=[0,100,400,700,1000,1300; 20.0,0.9969,0.9987,0.999,0.999,0.999;
- 30.0,0.9671,0.9859,0.99,0.9921,0.9934; 40.0,0.9293,0.9498,0.9549,0.9575,
- 0.9592; 50.0,0.8831,0.9003,0.9056,0.9083,0.9101; 60.0,0.8562,0.857,
- 0.8575,0.8576,0.8577; 70.0,0.8398,0.8479,0.8481,0.8482,0.8483; 80.0,
- 0.8374,0.8384,0.8386,0.8387,0.8388])
- annotation (Placement(transformation(extent={{-58,-86},{-38,-66}})));
- Modelica.Units.SI.HeatFlowRate QLossesToCompensate "Environment losses";
- Integer i "Integer to select data interval";
-public
- Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a heatPort
- "heatPort connection to water in condensor"
- annotation (Placement(transformation(extent={{90,-10},{110,10}})));
- Controls.Discrete.HysteresisRelease onOff(
- use_input=false,
- enableRelease=true,
- uLow_val=modulationMin,
- uHigh_val=modulationStart,
- y(start=0),
- release(start=0))
- annotation (Placement(transformation(extent={{20,20},{40,40}})));
- Modelica.Blocks.Sources.RealExpression realExpression(y=modulationInit)
- annotation (Placement(transformation(extent={{-12,20},{8,40}})));
-algorithm
- // efficiency coefficients
- eta100.u1 :=THxIn - 273.15;
- eta100.u2 :=m_flowHx_scaled*kgps2lph;
- eta80.u1 :=THxIn - 273.15;
- eta80.u2 :=m_flowHx_scaled*kgps2lph;
- eta60.u1 :=THxIn - 273.15;
- eta60.u2 :=m_flowHx_scaled*kgps2lph;
- eta40.u1 :=THxIn - 273.15;
- eta40.u2 :=m_flowHx_scaled*kgps2lph;
- eta20.u1 :=THxIn - 273.15;
- eta20.u2 :=m_flowHx_scaled*kgps2lph;
- // all these are in kW
- etaVector[1] :=0;
- etaVector[2] :=eta20.y;
- etaVector[3] :=eta40.y;
- etaVector[4] :=eta60.y;
- etaVector[5] :=eta80.y;
- etaVector[6] :=eta100.y;
- QVector :=etaVector/etaNom .* modVector/100*QNom;
- // in W
- QMax :=QVector[6];
- // Interpolation if QVector[1] Description This model is based on data from a Remeha boiler. It is used in the Boiler model. The nominal power of the original boiler is 10.1 kW at 50/30 degC water temperatures. The efficiency in this point is 92.2% on higher heating value. First, the efficiency is interpolated for the return water temperature and flowrate at 5 different modulation levels. These modulation levels are the FUEL input power to the boiler. The results are rescaled to the nominal power of the modelled heatpump (with QNom/QNom_data) and stored in a vector, eta_vector. Finally, the initial modulation is calculated based on the asked power and the max power at operating conditions: If the boiler is on another modulation, interpolation is made to get eta at the real modulation. This model takes into account environmental heat losses of the boiler. In order to keep the same nominal eta's during operation, these heat losses are added to the computed power. Therefore, the heat losses are only really 'losses' when the boiler is NOT operating. The eta is calculated as the heat delivered to the heatedFluid divided by the fuel consumption PFuel. This model is used in the Boiler model. If a different gas boiler is to be simulated, copy this Burner model and adapt the interpolation tables. See the Boiler model. Description This model is based on data received from Daikin from an Altherma heat pump, and the full heat pump is implemented as IDEAS.Thermal.Components.Production.HP_AWMod_Losses. (vermoedelijk IDEAS.Thermal.Components.Production.HP_AirWater The nominal power of the original heat pump is 7177 W at 2/35 degC. First, the thermal power and electricity consumption are interpolated for the evaporator and condensing temperature at 4 different modulation levels. The results are rescaled to the nominal power of the modelled heatpump (with QNom/QNom_data) and stored in 2 different vectors, Q_vector and P_vector. Finally, the modulation is calculated based on the asked power and the max power at operating conditions: If the heat pump is on another modulation level, interpolation is made to get P and Q at the real modulation. This model takes into account environmental heat losses of the heat pump. In order to keep the same nominal efficiency during operation, these heat losses are added to the computed power. Therefore, the heat losses are only really 'losses' when the heat pump is NOT operating. The COP is calculated as the heat delivered to the condensor divided by the electrical consumption (P). This model is used in the HP_AirWater model. If a different heat pump is to be simulated, copy this model and adapt the interpolation tables. See the air-water heat pmp model.
+This model is based on data received from Daikin from an Altherma heat pump,
+and the full heat pump is implemented as
+IDEAS.Fluid.HeatPumps.HP_AirWater_TSet.
+
+The nominal power of the original heat pump is 7177 W at 2/35 degC.
+
+First, the thermal power and electricity consumption are interpolated
+for the evaporator and condensing temperature at 4 different modulation levels.
+The results are rescaled to the nominal power of the modelled heat pump (with QNom/QNom_data)
+and stored in 2 different vectors,
+Finally, the modulation is calculated based on the asked power and the max power at operating conditions:
+
-
-ATTENTION
-Assumptions and limitations
-
-
-Model use
-Validation
-
-
-"));
-end HeatSource_CondensingGasBurner;
diff --git a/IDEAS/Fluid/HeatPumps/BaseClasses/HeatSource_HP_AW.mo b/IDEAS/Fluid/HeatPumps/BaseClasses/HeatSource_HP_AW.mo
index 973f716753..2e3c9006c7 100644
--- a/IDEAS/Fluid/HeatPumps/BaseClasses/HeatSource_HP_AW.mo
+++ b/IDEAS/Fluid/HeatPumps/BaseClasses/HeatSource_HP_AW.mo
@@ -1,150 +1,157 @@
within IDEAS.Fluid.HeatPumps.BaseClasses;
model HeatSource_HP_AW
- "Computation of theoretical condensation power of the refrigerant based on interpolation data. Takes into account losses of the heat pump to the environment"
- //fixme: adaptation of heatSource_CondensingGasBurner should also be applied on this model.
- /*
- This model is based on data we received from Daikin from an Altherma heat pump.
- The nominal power of the original heat pump is 7177W at 2/35degC
-
- First, the thermal power and electricity consumption are interpolated for the
- evaporator and condensing temperature at 4 different modulation levels. The results
- are rescaled to the nominal power of the modelled heatpump (with QNom/QNom_data) and
- stored in 2 different vectors, Q_vector and P_vector.
-
- Finally, the modulation is calculated based on the asked power and the max power at
- operating conditions:
- - if modulation_init < modulation_min, the heat pump is OFF, modulation = 0.
- - if modulation_init > 100%, the modulation is 100%
- - if modulation_init between modulation_min and modulation_start: hysteresis for on/off cycling.
-
- If the heat pump is on another modulation, interpolation is made to get P and Q at the real modulation.
-
- ATTENTION
- This model takes into account environmental heat losses of the heat pump (at condensor side).
- In order to keep the same nominal COP's during operation of the heat pump, these heat losses are added
- to the computed power. Therefore, the heat losses are only really 'losses' when the heat pump is
- NOT operating.
-
- The COP is calculated as the heat delivered to the condensor divided by the electrical consumption (P).
-
- */
- //protected
- replaceable package Medium =
- Modelica.Media.Interfaces.PartialMedium "Medium in the component";
+ "Computation of theoretical condensation power of the refrigerant based on interpolation data. Takes into account losses of the heat pump to the environment"
+
+ replaceable package Medium = Modelica.Media.Interfaces.PartialMedium
+ "Medium in the component";
+
final parameter Modelica.Units.SI.Power QNomRef=7177
"Nominal power of the Daikin Altherma. See datafile";
- final parameter Real[5] mod_vector={0,30,50,90,100} "5 modulation steps, %";
- Real[5] Q_vector "Thermal power for 5 modulation steps, in kW";
- Real[5] P_vector "Electrical power for 5 modulation steps, in kW";
- Modelica.Units.SI.Power QMax
- "Maximum thermal power at specified evap and condr temperatures, in W";
- Modelica.Units.SI.Power QAsked(start=0);
- parameter Modelica.Units.SI.ThermalConductance UALoss
- "UA of heat losses of HP to environment";
parameter Modelica.Units.SI.Power QNom
"The power at nominal conditions (2/35)";
-public
- parameter Real modulation_min(max=29) = 20 "Minimal modulation percentage";
- // dont' set this to 0 or very low values, you might get negative P at very low modulations because of wrong extrapolation
+
+ parameter Boolean useMinMod = true;
+ parameter Real modulation_min(max=29) = 20
+ "Minimal modulation percentage. Don't set this to 0 or very low values, you might get negative P at very low modulations because of wrong extrapolation";
parameter Real modulation_start(min=min(30, modulation_min + 5)) = 35
"Min estimated modulation level required for start of HP";
- Real modulationInit "Initial modulation, decides on start/stop of the HP";
- Real modulation(min=0, max=100) "Current modulation percentage";
- Modelica.Units.SI.Power PEl "Resulting electrical power";
- input Modelica.Units.SI.Temperature TEvaporator "Evaporator temperature";
- input Modelica.Units.SI.Temperature TEnvironment
- "Temperature of environment for heat losses";
- input Modelica.Units.SI.SpecificEnthalpy hIn "Specific enthalpy at the inlet";
+ final parameter Real[5] mod_vector={0,30,50,90,100}
+ "5 modulation steps, %";
+
+ parameter Modelica.Units.SI.ThermalConductance UALoss
+ "UA of heat losses of HP to environment";
+
+ Modelica.Units.SI.HeatFlowRate QAsked(start=0);
+ Modelica.Units.SI.HeatFlowRate QMax
+ "Maximum thermal power at specified evaporator and condensor temperatures, in W";
+ Modelica.Units.SI.HeatFlowRate QLossesToCompensate "Environment losses";
+ Real[5] Q_vector
+ "Thermal power for 5 modulation steps, in kW";
+
+ Modelica.Units.SI.Power PEl
+ "Resulting electrical power";
+ Real[5] P_vector
+ "Electrical power for 5 modulation steps, in kW";
+
+ Real modulationInit
+ "Initial modulation, decides on start/stop of the HP";
+ Real modulation(min=0, max=100)
+ "Current modulation percentage";
+
+ Modelica.Blocks.Interfaces.BooleanInput on
+ annotation (Placement(
+ transformation(extent={{-120,40},{-80,80}}), iconTransformation(extent={{-110,20},
+ {-90,40}})));
+ Modelica.Blocks.Interfaces.RealInput TCondensor_set
+ annotation (Placement(
+ transformation(extent={{-120,-50},{-80,-10}}),iconTransformation(extent={{-110,
+ -10},{-90,10}})));
+ Modelica.Blocks.Interfaces.RealInput TCondensor_in
+ annotation (Placement(transformation(
+ extent={{-120,-80},{-80,-40}}), iconTransformation(
+ extent={{-10,-10},{10,10}},
+ rotation=90,
+ origin={-50,-100})));
+ Modelica.Blocks.Interfaces.RealInput m_flowCondensor
+ annotation (Placement(transformation(
+ extent={{-120,-110},{-80,-70}}),iconTransformation(
+ extent={{-10,-10},{10,10}},
+ rotation=90,
+ origin={-20,-100})));
+ Modelica.Blocks.Interfaces.RealInput TEvaporator
+ annotation (Placement(transformation(extent={{-120,-20},{-80,20}}), iconTransformation(extent={{-10,-10},{10,10}},
+ rotation=270,
+ origin={-80,100})));
+ Modelica.Blocks.Interfaces.RealInput TEnvironment
+ annotation (Placement(transformation(extent={{-120,10},{-80,50}}), iconTransformation(extent={{-10,-10},{10,10}},
+ rotation=90,
+ origin={-80,-100})));
+
+ Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a heatPort
+ "heatPort connection to water in condensor"
+ annotation (Placement(transformation(extent={{90,-10},{110,10}})));
+
Modelica.Blocks.Tables.CombiTable2Ds P100(smoothness=Modelica.Blocks.Types.Smoothness.ContinuousDerivative,
table=[0,-15,-10,-7,-2,2,7,12,18,30; 30,1.96,2.026,2.041,2.068,2.075,2.28,
2.289,2.277,2.277; 35,2.08,2.174,2.199,2.245,2.266,2.508,2.537,2.547,
2.547; 40,2.23,2.338,2.374,2.439,2.473,2.755,2.804,2.838,2.838; 45,2.39,
2.519,2.566,2.65,2.699,3.022,3.091,3.149,3.149; 50,2.56,2.718,2.777,
2.88,2.942,3.309,3.399,3.481,3.481])
- annotation (Placement(transformation(extent={{4,-14},{24,6}})));
+ annotation (Placement(transformation(extent={{10,30},{30,50}})));
Modelica.Blocks.Tables.CombiTable2Ds P90(smoothness=Modelica.Blocks.Types.Smoothness.ContinuousDerivative,
table=[0,-15,-10,-7,-2,2,7,12,18,30; 30,1.76,1.79,1.8,1.81,1.81,1.94,1.93,
1.9,1.9; 35,1.88,1.96,1.98,1.98,1.99,2.19,2.16,2.15,2.15; 40,2.01,2.11,
2.14,2.16,2.18,2.42,2.4,2.41,2.41; 45,2.16,2.28,2.32,2.39,2.39,2.66,
2.71,2.69,2.69; 50,2.32,2.46,2.51,2.6,2.61,2.92,2.99,3.05,3.05])
- annotation (Placement(transformation(extent={{4,-40},{24,-20}})));
+ annotation (Placement(transformation(extent={{10,-10},{30,10}})));
Modelica.Blocks.Tables.CombiTable2Ds P50(smoothness=Modelica.Blocks.Types.Smoothness.ContinuousDerivative,
table=[0,-15,-10,-7,-2,2,7,12,18,30; 30,1.14,1.11,1.09,1.02,0.98,0.98,
0.92,0.81,0.81; 35,1.26,1.24,1.22,1.16,1.12,1.14,1.09,0.98,0.98; 40,
1.39,1.39,1.37,1.35,1.28,1.36,1.28,1.21,1.21; 45,1.54,1.55,1.53,1.49,
1.46,1.52,1.49,1.38,1.38; 50,1.68,1.73,1.72,1.68,1.66,1.75,1.72,1.62,
- 1.62]) annotation (Placement(transformation(extent={{4,-66},{24,-46}})));
+ 1.62]) annotation (Placement(transformation(extent={{10,-50},{30,-30}})));
Modelica.Blocks.Tables.CombiTable2Ds P30(smoothness=Modelica.Blocks.Types.Smoothness.ContinuousDerivative,
table=[0,-15,-10,-7,-2,2,7,12,18,30; 30,0.78,0.7,0.62,0.534,0.496,0.494,
0.416,0.388,0.388; 35,0.9,0.82,0.71,0.602,0.561,0.563,0.477,0.453,0.453;
40,1.04,0.97,0.88,0.696,0.65,0.653,0.552,0.531,0.531; 45,1.17,1.13,1.04,
0.86,0.774,0.773,0.646,0.625,0.625; 50,1.35,1.28,1.23,1.11,0.96,0.931,
0.765,0.739,0.739])
- annotation (Placement(transformation(extent={{4,-92},{24,-72}})));
+ annotation (Placement(transformation(extent={{10,-90},{30,-70}})));
Modelica.Blocks.Tables.CombiTable2Ds Q100(smoothness=Modelica.Blocks.Types.Smoothness.ContinuousDerivative,
table=[0,-15,-10,-7,-2,2,7,12,18,30; 30,4.82,5.576,6.023,6.892,7.642,
10.208,11.652,13.518,13.518; 35,4.59,5.279,5.685,6.484,7.177,9.578,
10.931,12.692,12.692; 40,4.43,5.056,5.43,6.174,6.824,9.1,10.386,12.072,
12.072; 45,4.32,4.906,5.255,5.957,6.576,8.765,10.008,11.647,11.647; 50,
4.27,4.824,5.155,5.828,6.426,8.564,9.786,11.408,11.408])
- annotation (Placement(transformation(extent={{42,-14},{62,6}})));
+ annotation (Placement(transformation(extent={{50,30},{70,50}})));
Modelica.Blocks.Tables.CombiTable2Ds Q90(smoothness=Modelica.Blocks.Types.Smoothness.ContinuousDerivative,
table=[0,-15,-10,-7,-2,2,7,12,18,30; 30,4.338,5.019,5.42,6.203,6.877,
9.188,10.486,12.166,12.166; 35,4.131,4.751,5.117,5.836,6.459,8.62,9.838,
11.423,11.423; 40,3.987,4.551,4.887,5.556,6.141,8.19,9.348,10.865,
10.865; 45,3.888,4.415,4.73,5.361,5.918,7.888,9.007,10.483,10.483; 50,
3.843,4.342,4.639,5.245,5.784,7.708,8.807,10.267,10.267])
- annotation (Placement(transformation(extent={{42,-40},{62,-20}})));
+ annotation (Placement(transformation(extent={{50,-10},{70,10}})));
Modelica.Blocks.Tables.CombiTable2Ds Q50(smoothness=Modelica.Blocks.Types.Smoothness.ContinuousDerivative,
table=[0,-15,-10,-7,-2,2,7,12,18,30; 30,2.41,2.788,3.011,3.446,3.821,
5.104,5.826,6.759,6.759; 35,2.295,2.639,2.843,3.242,3.589,4.789,5.466,
6.346,6.346; 40,2.215,2.528,2.715,3.087,3.412,4.55,5.193,6.036,6.036;
45,2.16,2.453,2.628,2.979,3.288,4.382,5.004,5.824,5.824; 50,2.135,2.412,
2.577,2.914,3.213,4.282,4.893,5.704,5.704])
- annotation (Placement(transformation(extent={{42,-66},{62,-46}})));
+ annotation (Placement(transformation(extent={{50,-50},{70,-30}})));
Modelica.Blocks.Tables.CombiTable2Ds Q30(smoothness=Modelica.Blocks.Types.Smoothness.ContinuousDerivative,
table=[0,-15,-10,-7,-2,2,7,12,18,30; 30,1.446,1.673,1.807,2.068,2.292,
3.063,3.495,4.055,4.055; 35,1.377,1.584,1.706,1.945,2.153,2.873,3.279,
3.808,3.808; 40,1.329,1.517,1.629,1.852,2.047,2.73,3.116,3.622,3.622;
45,1.296,1.472,1.577,1.787,1.973,2.629,3.002,3.494,3.494; 50,1.281,
1.447,1.546,1.748,1.928,2.569,2.936,3.422,3.422])
- annotation (Placement(transformation(extent={{42,-92},{62,-72}})));
- Modelica.Units.SI.HeatFlowRate QLossesToCompensate "Environment losses";
- Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a heatPort
- "heatPort connection to water in condensor"
- annotation (Placement(transformation(extent={{90,-10},{110,10}})));
- Controls.Discrete.HysteresisRelease_boolean
- onOff(
+ annotation (Placement(transformation(extent={{50,-90},{70,-70}})));
+
+ Controls.Discrete.HysteresisRelease_boolean onOff(
enableRelease=true,
y(start=0),
release(start=false))
- annotation (Placement(transformation(extent={{10,70},{30,90}})));
+ annotation (Placement(transformation(extent={{-10,66},{10,86}})));
Modelica.Blocks.Sources.RealExpression realExpression(y=modulationInit)
- annotation (Placement(transformation(extent={{-24,70},{-2,90}})));
+ annotation (Placement(transformation(extent={{-53,86},{-31,106}})));
Modelica.Blocks.Sources.RealExpression realExpression1(y=modulation_start)
- annotation (Placement(transformation(extent={{-50,64},{-26,84}})));
+ annotation (Placement(transformation(extent={{-52,72},{-32,92}})));
Modelica.Blocks.Sources.RealExpression realExpression2(y=modulation_min)
- annotation (Placement(transformation(extent={{-76,54},{-52,74}})));
- Modelica.Blocks.Interfaces.RealInput TCondensor_set annotation (Placement(
- transformation(extent={{-120,-20},{-80,20}}), iconTransformation(extent={{-110,
- -10},{-90,10}})));
- Modelica.Blocks.Interfaces.BooleanInput on annotation (Placement(
- transformation(extent={{-120,20},{-80,60}}), iconTransformation(extent={{-110,20},
- {-90,40}})));
- Modelica.Blocks.Interfaces.RealInput TCondensor_in
- "In-comming condensor temperature" annotation (Placement(transformation(
- extent={{-120,-60},{-80,-20}}), iconTransformation(
- extent={{-10,-10},{10,10}},
- rotation=90,
- origin={-50,-100})));
- Modelica.Blocks.Interfaces.RealInput m_flowCondensor
- "Condenor mass-flow rate" annotation (Placement(transformation(
- extent={{-120,-100},{-80,-60}}),iconTransformation(
- extent={{-10,-10},{10,10}},
- rotation=90,
- origin={-20,-100})));
+ annotation (Placement(transformation(extent={{-52,58},{-32,78}})));
+
+protected
+ parameter Medium.ThermodynamicState sta_default = Medium.setState_pTX(
+ p=Medium.p_default,
+ T=Medium.T_default,
+ X=Medium.X_default[1:Medium.nXi])
+ "Medium state at default properties";
+ parameter Modelica.Units.SI.SpecificHeatCapacity cp_default =
+ Medium.specificHeatCapacityCp(sta_default)
+ "Specific heat capacity at default properties";
+
equation
- QAsked = IDEAS.Utilities.Math.Functions.smoothMax(0, m_flowCondensor*(Medium.specificEnthalpy(Medium.setState_pTX(Medium.p_default,TCondensor_set, Medium.X_default)) -hIn), 10);
+ QAsked = IDEAS.Utilities.Math.Functions.smoothMax(0, m_flowCondensor*cp_default*(TCondensor_set-TCondensor_in), 10);
+
+ // Temperatures
P100.u1 = heatPort.T - 273.15;
P100.u2 = TEvaporator - 273.15;
P90.u1 = heatPort.T - 273.15;
@@ -161,7 +168,8 @@ equation
Q50.u2 = TEvaporator - 273.15;
Q30.u1 = heatPort.T - 273.15;
Q30.u2 = TEvaporator - 273.15;
- // all these are in kW
+
+ // Heat and power flows; all these are in kW
Q_vector[1] = 0;
Q_vector[2] = Q30.y*QNom/QNomRef;
Q_vector[3] = Q50.y*QNom/QNomRef;
@@ -173,11 +181,17 @@ equation
P_vector[4] = P90.y*QNom/QNomRef;
P_vector[5] = P100.y*QNom/QNomRef;
QMax = 1000*Q100.y*QNom/QNomRef;
+
+ // Modulation degree
modulationInit = QAsked/QMax*100;
- modulation = onOff.y*IDEAS.Utilities.Math.Functions.smoothMin(modulationInit, 100,1);
- // compensation of heat losses (only when the hp is operating)
- QLossesToCompensate = if noEvent(modulation > 0) then UALoss*(heatPort.T -
- TEnvironment) else 0;
+ if useMinMod then
+ modulation = onOff.y*IDEAS.Utilities.Math.Functions.smoothMin(modulationInit, 100,1);
+ else
+ modulation = IDEAS.Utilities.Math.Functions.smoothMin(modulationInit, 100,1);
+ end if;
+
+ // Compensation of heat losses (only when the heat pump is operating)
+ QLossesToCompensate = if noEvent(modulation > 0) then UALoss*(heatPort.T - TEnvironment) else 0;
heatPort.Q_flow = -1000*Modelica.Math.Vectors.interpolate(
mod_vector,
Q_vector,
@@ -186,49 +200,27 @@ equation
mod_vector,
P_vector,
modulation);
+
+ // Others
connect(realExpression.y, onOff.u) annotation (Line(
- points={{-0.9,80},{8,80}},
+ points={{-29.9,96},{-20,96},{-20,76},{-12,76}},
color={0,0,127},
smooth=Smooth.None));
connect(realExpression1.y, onOff.uHigh) annotation (Line(
- points={{-24.8,74},{0,74},{0,76},{8,76}},
+ points={{-31,82},{-24,82},{-24,72},{-12,72}},
color={0,0,127},
smooth=Smooth.None));
connect(realExpression2.y, onOff.uLow) annotation (Line(
- points={{-50.8,64},{-24,64},{-24,64},{0,64},{0,72},{8,72}},
+ points={{-31,68},{-12,68}},
color={0,0,127},
smooth=Smooth.None));
connect(on, onOff.release) annotation (Line(
- points={{-100,40},{20,40},{20,68}},
+ points={{-100,60},{0,60},{0,64}},
color={255,0,255},
smooth=Smooth.None));
annotation (Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-100,
-100},{100,100}}),
- graphics), Documentation(info="
-
-
-ATTENTION
-Assumptions and limitations
-
-
-Model use
-Validation
-
+Model description
+
+Q_vector and P_vector.
+
+
+modulation_init < modulation_min, the heat pump is OFF, modulation = 0.
+modulation_init > 100%, the modulation is 100%
+modulation_init between modulation_min and modulation_start: hysteresis for on/off cycling.
+
+If the heat pump is on another modulation level, interpolation is made to get P and Q at the real modulation. +
++This model takes into account environmental heat losses of the heat pump. +In order to keep the same nominal efficiency during operation, these heat losses are added to the computed power. +Therefore, the heat losses are only really 'losses' when the heat pump is NOT operating. +
++The COP is calculated as the heat delivered to the condensor divided by the electrical power consumption. +
++This model is used in the IDEAS.Fluid.HeatPumps.HP_AirWater_TSet model. +If a different heat pump is to be simulated, copy this model and adapt the interpolation tables. +
+Description
-This model is based on data received from Daikin from an Altherma heat pump, and the full heat pump is implemented as IDEAS.Thermal.Components.Production.HP_AWMod_Losses. (vermoedelijk IDEAS.Thermal.Components.Production.HP_AirWater
-The nominal power of the original heat pump is 7177 W at 2/35 degC.
-First, the thermal power and electricity consumption are interpolated for the evaporator and condensing temperature at 4 different modulation levels. The results are rescaled to the nominal power of the modelled heatpump (with QNom/QNom_data) and stored in 2 different vectors, Q_vector and P_vector.
-Finally, the modulation is calculated based on the asked power and the max power at operating conditions:
-If the heat pump is on another modulation level, interpolation is made to get P and Q at the real modulation.
-This model takes into account environmental heat losses of the heat pump. In order to keep the same nominal efficiency during operation, these heat losses are added to the computed power. Therefore, the heat losses are only really 'losses' when the heat pump is NOT operating.
-The COP is calculated as the heat delivered to the condensor divided by the electrical consumption (P).
-This model is used in the HP_AirWater model. If a different heat pump is to be simulated, copy this model and adapt the interpolation tables.
-See the air-water heat pmp model.
-"), - Icon(coordinateSystem(preserveAspectRatio=false, extent={{-100,-100},{100,100}}), - graphics={ - Line( - points={{-70,-20},{30,-20}}, - color={191,0,0}, - thickness=0.5), - Line( - points={{-70,20},{30,20}}, - color={191,0,0}, - thickness=0.5), - Line( - points={{-90,0},{-70,-20}}, - color={191,0,0}, - thickness=0.5), - Line( - points={{-90,0},{-70,20}}, - color={191,0,0}, - thickness=0.5), - Polygon( - points={{30,0},{30,40},{60,20},{30,0}}, - lineColor={191,0,0}, - fillColor={191,0,0}, - fillPattern=FillPattern.Solid), - Polygon( - points={{30,-40},{30,0},{60,-20},{30,-40}}, - lineColor={191,0,0}, - fillColor={191,0,0}, - fillPattern=FillPattern.Solid), - Rectangle( - extent={{60,40},{80,-40}}, - lineColor={191,0,0}, - fillColor={191,0,0}, - fillPattern=FillPattern.Solid), - Line( - points={{-70,-40},{30,60}}, - color={0,0,0}, - smooth=Smooth.None), - Polygon( - points={{24,74},{44,54},{40,50},{20,70},{24,74}}, - lineColor={0,0,0}, - smooth=Smooth.None, - fillColor={0,0,0}, - fillPattern=FillPattern.Solid), - Rectangle(extent={{-100,100},{100,-100}}, lineColor={135,135,135})})); -end HeatSource_HP_AW2; diff --git a/IDEAS/Fluid/HeatPumps/BaseClasses/package.order b/IDEAS/Fluid/HeatPumps/BaseClasses/package.order index ebc14caab9..1ddace48ab 100644 --- a/IDEAS/Fluid/HeatPumps/BaseClasses/package.order +++ b/IDEAS/Fluid/HeatPumps/BaseClasses/package.order @@ -1,6 +1,4 @@ -HeatSource_CondensingGasBurner HeatSource_HP_AW -HeatSource_HP_AW2 PartialHeatPump PartialWaterToWater HeatPumpData diff --git a/IDEAS/Fluid/HeatPumps/Deprecated.mo b/IDEAS/Fluid/HeatPumps/Deprecated.mo deleted file mode 100644 index c064dd5267..0000000000 --- a/IDEAS/Fluid/HeatPumps/Deprecated.mo +++ /dev/null @@ -1,116 +0,0 @@ -within IDEAS.Fluid.HeatPumps; -package Deprecated "Deprecated models" - extends Modelica.Icons.ObsoleteModel; - model Boiler - "Modulating boiler with losses to environment, based on performance tables" - extends IDEAS.Fluid.HeatPumps.Interfaces.PartialDynamicHeaterWithLosses( - final heaterType=BaseClasses.HeaterType.Boiler); - - Real eta "Instanteanous efficiency"; - - IDEAS.Fluid.HeatPumps.BaseClasses.HeatSource_CondensingGasBurner heatSource( - QNom=QNom, - TBoilerSet=TSet, - TEnvironment=heatPort.T, - UALoss=UALoss, - modulationMin=modulationMin, - modulationStart=modulationStart, - THxIn=Tin.T, - hIn=inStream(port_a.h_outflow), - m_flowHx=port_a.m_flow, - redeclare package Medium = Medium) - annotation (Placement(transformation(extent={{-80,20},{-60,40}}))); - parameter Real modulationMin=25 "Minimal modulation percentage"; - parameter Real modulationStart=35 - "Min estimated modulation level required for start of HP"; - equation - // Electricity consumption for electronics and fan only. Pump is covered by pumpHeater; - // This data is taken from Viessmann VitoDens 300W, smallest model. So only valid for - // very small household condensing gas boilers. - PEl = 7 + heatSource.modulation/100*(33 - 7); - PFuel = heatSource.PFuel; - eta = heatSource.eta; - connect(heatSource.heatPort, vol.heatPort) annotation (Line( - points={{-60,30},{40,30},{40,-20}}, - color={191,0,0}, - smooth=Smooth.None)); - annotation ( - Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-100,-100},{100, - 120}}), - graphics), - Icon(graphics={ - Ellipse( - extent={{-60,60},{58,-60}}, - lineColor={0,0,0}, - fillPattern=FillPattern.Solid, - fillColor={95,95,95}), - Ellipse(extent={{-48,46},{46,-46}}, lineColor={0,0,0}, - fillColor={175,175,175}, - fillPattern=FillPattern.Solid), - Line( - points={{-32,34},{30,-34}}, - color={0,0,0}, - smooth=Smooth.None), - Line( - points={{100,60},{44,60}}, - color={0,0,127}, - smooth=Smooth.None), - Line( - points={{44,60},{34,48}}, - color={0,0,127}, - smooth=Smooth.None), - Line( - points={{44,-60},{34,-48}}, - color={0,0,127}, - smooth=Smooth.None, - pattern=LinePattern.Dash), - Line( - points={{100,-60},{44,-60}}, - color={0,0,127}, - smooth=Smooth.None, - pattern=LinePattern.Dash)}), - Documentation(info=" --This model is deprecated since it is not sufficiently generic. -Consider using a different model such as -Heater_T. -
-Dynamic boiler model, based on interpolation in performance tables. The boiler has thermal losses to the environment which are often not mentioned in the performance tables. Therefore, the additional environmental heat losses are added to the heat production in order to ensure the same performance as in the manufacturers data, while still obtaining a dynamic model with heat losses (also when boiler is off). The heatSource will compute the required power and the environmental heat losses, and try to reach the set point.
-See IDEAS.Thermal.Components.Production.Interfaces.PartialDynamicHeaterWithLosses for more details about the heat losses and dynamics.
-This model is based on performance tables of a specific boiler, as specified by IDEAS.Thermal.Components.Production.BaseClasses.HeatSource_CondensingGasBurner. If a different gas boiler is to be simulated, create a different Burner model with adapted interpolation tables.
-See also IDEAS.Thermal.Components.Production.Interfaces.PartialDynamicHeaterWithLosses for more details about the heat losses and dynamics.
-The model has been verified in order to check if the 'artificial' heat loss compensation still leads to correct steady state efficiencies according to the manufacturer data. This verification is integrated in the example model IDEAS.Thermal.Components.Examples.Boiler_validation.
-See validation.
-", revisions=" -This example shows the modulation behaviour of an inverter controlled air-to-water heat pump when the inlet water temperature is changed.
-The modulation level can be seen from heater.heatSource.modulation.
++This example shows the modulation behaviour of +an inverter controlled air-to-water heat pump when the inlet water temperature is changed. +
+
+The modulation level can be seen from heaPum.heatSource.modulation.
+
Dynamic heat pump model, based on interpolation in performance tables for a Daikin Altherma heat pump. These tables are encoded in the heatSource model. If a different heat pump is to be simulated, create a different heatSource model with adapted interpolation tables.
-The nominal power of the heat pump can be adapted, this will NOT influence the efficiency as a function of ambient air temperature, condenser temperature and modulation level.
-The heat pump has thermal losses to the environment which are often not mentioned in the performance tables. Therefore, the additional environmental heat losses are added to the heat production in order to ensure the same performance as in the manufacturers data, while still obtaining a dynamic model with heat losses (also when heat pump is off). The heatSource will compute the required power and the environmental heat losses, and try to reach the set point.
-See IDEAS.Thermal.Components.Production.Interfaces.PartialDynamicHeaterWithLosses for more details about the heat losses and dynamics.
-+Dynamic heat pump model, based on interpolation in performance tables for a Daikin Altherma heat pump. +These tables are encoded in the +IDEAS.Fluid.HeatPumps.BaseClasses.HeatSource_HP_AW model. +If a different heat pump is to be simulated, create a different heatSource model with adapted interpolation tables. +
++The nominal power of the heat pump can be adapted. +This will NOT influence the efficiency as a function of ambient air temperature, condenser temperature and modulation level. +
+
+The heat pump has thermal losses to the environment which are often not mentioned in the performance tables.
+Therefore, the additional environmental heat losses are added to the heat production
+in order to ensure the same performance as in the manufacturers data,
+while still obtaining a dynamic model with heat losses (also when heat pump is off).
+The heatSource component will compute the required power and the environmental heat losses,
+and try to reach the setpoint.
+
+See +IDEAS.Fluid.HeatPumps.Interfaces.PartialDynamicHeaterWithLosses +for more details about the heat losses and dynamics. +
+QNom and interpolation tables in
+
+IDEAS.Fluid.HeatPumps.BaseClasses.HeatSource_HP_AW)
+This model is based on performance tables of a specific heat pump, as specified by the heatSource model. If a different heat pump is to be simulated, create a different heatSource model with adapted interpolation tables.
+QNom. There are two options:
QNom and put QDesign = 0
+QDesign greater than 0 and QNom wil be calculated from QDesign as follows:
+QNom = QDesign * betaFactor / fraLosDesNom
+See also IDEAS.Thermal.Components.Production.Interfaces.PartialDynamicHeaterWithLosses for more details about the heat losses and dynamics.
-The model has been verified in order to check if the 'artificial' heat loss compensation still leads to correct steady state efficiencies according to the manufacturer data. This verification is integrated in the example model IDEAS.Thermal.Components.Examples.Boiler_validation.
-A specific heat pump example is given in IDEAS.Thermal.Components.Examples.HeatPump_AirWater.
+TSet, the flowPorts and the heatPort to environment.
+modulation_start)
+and the minimum modulation level when the heat pump is operating (modulation_min).
+The difference between both will ensure some off-time in case of low heat demands
++Note that this model is based on performance tables of a specific heat pump, +as specified by the +IDEAS.Fluid.HeatPumps.BaseClasses.HeatSource_HP_AW model. +If a different heat pump is to be simulated, create a different heatSource model with adapted interpolation tables. +
++A specific heat pump example is given in +IDEAS.Fluid.HeatPumps.Examples.HeatPump_AirWater. +
", revisions="Modelica.Units. to one or multiple parameter(s) due to the removal of import in IDEAS/package.mo.
See #1415 .
diff --git a/IDEAS/Fluid/HeatPumps/HP_AirWater_TSet2.mo b/IDEAS/Fluid/HeatPumps/HP_AirWater_TSet2.mo
deleted file mode 100644
index a33a792e53..0000000000
--- a/IDEAS/Fluid/HeatPumps/HP_AirWater_TSet2.mo
+++ /dev/null
@@ -1,23 +0,0 @@
-within IDEAS.Fluid.HeatPumps;
-model HP_AirWater_TSet2
- extends HP_AirWater_TSet(redeclare BaseClasses.HeatSource_HP_AW2 heatSource);
- annotation (Documentation(info="
--This model is the same as - -IDEAS.Fluid.HeatPumps.HP_AirWater_TSet, except that it uses - -IDEAS.Fluid.HeatPumps.BaseClasses.HeatSource_HP_AW2
-", revisions=" -Description
-This is a partial model from which most heaters (boilers, heat pumps) will extend. This model is dynamic (there is a water content in the heater and a dry mass lumped to it) and it has thermal losses to the environment. To complete this model and turn it into a heater, a heatSource has to be added, specifying how much heat is injected in the heatedFluid pipe, at which efficiency, if there is a maximum power, etc. HeatSource models are grouped in IDEAS.Thermal.Components.Production.BaseClasses.
-The set temperature of the model is passed as a realInput.The model has a realOutput PEl for the electricity consumption.
-See the extensions of this model for more details.
-Depending on the extended model, different parameters will have to be set. Common to all these extensions are the following:
-This partial model is based on physical principles and is not validated. Extensions may be validated.
-See the extensions, like the IdealHeater, the Boiler or air-water heat pump
++This is a partial model for the +IDEAS.Fluid.HeatPumps.HP_AirWater_TSet model. +This model is dynamic (there is a water content in the heater and a dry mass lumped to it) +and it has thermal losses to the environment. +
+
+The setpoint temperature of the model is passed as a realInput.
+The model has two outputs: the electricity consumption PEl and the condensor heat flow rate QCon_flow.
+
+The environmental heat losses are specified by a time constant. +Based on the water content, dry capacity and this time constant, +the UA value of the heat transfer to the environment will be set. +
++The temperature of the dry mass is identical to the outlet temperature of the heater. +
++This partial model should not be used as a standalone; use the +IDEAS.Fluid.HeatPumps.HP_AirWater_TSet model instead. +
", revisions="Modelica.Units. to one or multiple parameter(s) due to the removal of import in IDEAS/package.mo.
See #1415 .
diff --git a/IDEAS/Fluid/HeatPumps/package.order b/IDEAS/Fluid/HeatPumps/package.order
index f8a5f97236..ea392e2750 100644
--- a/IDEAS/Fluid/HeatPumps/package.order
+++ b/IDEAS/Fluid/HeatPumps/package.order
@@ -1,8 +1,6 @@
Carnot_TCon
Carnot_y
-Deprecated
HP_AirWater_TSet
-HP_AirWater_TSet2
HP_WaterWater_OnOff
HP_WaterWater_TSet
ReciprocatingWaterToWater
diff --git a/IDEAS/Resources/ReferenceResults/Dymola/IDEAS_Fluid_HeatPumps_Examples_HeatPump_AirWater.txt b/IDEAS/Resources/ReferenceResults/Dymola/IDEAS_Fluid_HeatPumps_Examples_HeatPump_AirWater.txt
index d38eff12ff..502fb409cd 100644
--- a/IDEAS/Resources/ReferenceResults/Dymola/IDEAS_Fluid_HeatPumps_Examples_HeatPump_AirWater.txt
+++ b/IDEAS/Resources/ReferenceResults/Dymola/IDEAS_Fluid_HeatPumps_Examples_HeatPump_AirWater.txt
@@ -1,8 +1,16 @@
-last-generated=2015-07-05
-statistics-simulation={'numerical Jacobians': '0', 'nonlinear': '1', 'number of continuous time states': '3', 'linear': '0'}
-heater.TSet=[308.149993896484375, 308.149993896484375]
-heater.Tin.T=[293.149993896484375, 300.160400390625, 302.293487548828125, 302.901153564453125, 303.074554443359375, 303.1236572265625, 303.143463134765625, 303.15032958984375, 303.15167236328125, 303.152496337890625, 303.152099609375, 303.15167236328125, 303.1512451171875, 303.150848388671875, 303.150421142578125, 303.150299072265625, 303.1502685546875, 303.150238037109375, 303.15020751953125, 303.150177001953125, 303.150115966796875, 303.15008544921875, 303.150054931640625, 303.1500244140625, 303.1500244140625, 303.1500244140625, 303.1500244140625, 303.1500244140625, 303.1500244140625, 303.1500244140625, 303.149993896484375, 303.149993896484375, 303.149993896484375, 303.149993896484375, 303.31787109375, 303.862335205078125, 304.51953125, 305.174591064453125, 305.771240234375, 306.279022216796875, 306.67755126953125, 306.951171875, 307.09014892578125, 307.08905029296875, 306.94842529296875, 306.6734619140625, 306.273834228515625, 305.763519287109375, 305.16033935546875, 304.485809326171875, 303.76416015625, 303.02105712890625, 302.28265380859375, 301.574951171875, 300.923004150390625, 300.350006103515625, 299.876190185546875, 299.521148681640625, 299.3074951171875, 299.21514892578125, 299.2525634765625, 299.43218994140625, 299.743133544921875, 300.177947998046875, 300.725982666015625, 301.368316650390625, 302.05902099609375, 302.7816162109375, 303.52288818359375, 304.25665283203125, 304.94927978515625, 305.577606201171875, 306.119842529296875, 306.557159423828125, 306.87408447265625, 307.058837890625, 307.104827880859375, 307.010467529296875, 306.779449462890625, 306.41998291015625, 305.944732666015625, 305.370452880859375, 304.717193603515625, 304.008453369140625, 303.269561767578125, 302.526641845703125, 301.80584716796875, 301.132598876953125, 300.5308837890625, 300.022003173828125, 299.62384033203125, 299.3505859375, 299.21221923828125, 299.21282958984375, 299.352447509765625, 299.6248779296875, 300.02130126953125, 300.531768798828125, 301.1502685546875, 301.82830810546875, 302.54266357421875]
-time=[0., 15000.]
-heater.modulation_min=[20., 20.]
-heater.heatSource.modulation=[58.62094879150390625, 23.68363189697265625, 23.7228603363037109375, 23.724353790283203125, 23.725727081298828125, 23.72710418701171875, 23.7285518646240234375, 23.73007965087890625, 23.7316989898681640625, 23.73342132568359375, 23.7352619171142578125, 23.737232208251953125, 23.7393474578857421875, 23.741619110107421875, 23.7440586090087890625, 23.7466831207275390625, 23.74950408935546875, 23.752532958984375, 23.7557849884033203125, 23.7592716217041015625, 23.7630062103271484375, 23.7670040130615234375, 23.77127838134765625, 23.7758388519287109375, 23.7807025909423828125, 23.7857208251953125, 23.790740966796875, 23.7957630157470703125, 23.8007869720458984375, 23.8058109283447265625, 23.8108367919921875, 23.81586456298828125, 23.820892333984375, 23.825923919677734375, 21.561199188232421875, 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 37.922824859619140625, 41.215545654296875, 42.473056793212890625, 43.06037139892578125, 42.996002197265625, 42.24576568603515625, 40.84256744384765625, 38.85468292236328125, 36.321361541748046875, 33.3412933349609375, 30.035503387451171875, 26.5312519073486328125, 22.9265193939208984375, 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 40.8414764404296875, 42.344058990478515625, 43.16167449951171875, 43.302974700927734375, 42.76497650146484375, 41.562351226806640625, 39.746791839599609375, 37.37624359130859375, 34.5132904052734375, 31.28441619873046875, 27.815029144287109375, 24.216228485107421875]
-heater.modulation_start=[35., 35.]
+last-generated=2026-04-27
+statistics-simulation=
+{
+ "linear": "0",
+ "nonlinear": "1",
+ "number of continuous time states": "1",
+ "numerical Jacobians": "0"
+}
+time=[0e+00, 1.5e+04]
+heaPum.Tin.T=[3.031499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 3.036513366699219e+02, 3.043860778808594e+02, 3.050770263671875e+02, 3.0569970703125e+02, 3.062320556640625e+02, 3.066552124023438e+02, 3.069542236328125e+02, 3.071184692382812e+02, 3.071421203613281e+02, 3.070243225097656e+02, 3.067693176269531e+02, 3.063860778808594e+02, 3.0588818359375e+02, 3.052933044433594e+02, 3.046224975585938e+02, 3.038995361328125e+02, 3.031499938964844e+02, 3.024004821777344e+02, 3.01677490234375e+02, 3.010066833496094e+02, 3.004118041992188e+02, 2.999139404296875e+02, 2.995307006835938e+02, 2.992756652832031e+02, 2.991578979492188e+02, 2.991815490722656e+02, 2.993457641601562e+02, 2.99644775390625e+02, 3.000679321289062e+02, 3.006003112792969e+02, 3.012229919433594e+02, 3.019139404296875e+02, 3.02648681640625e+02, 3.034011535644531e+02, 3.041447448730469e+02, 3.048531188964844e+02, 3.055011291503906e+02, 3.060658874511719e+02, 3.065273132324219e+02, 3.068691101074219e+02, 3.070791625976562e+02, 3.071499938964844e+02, 3.070791625976562e+02, 3.068691101074219e+02, 3.065273132324219e+02, 3.060658874511719e+02, 3.055011291503906e+02, 3.048531188964844e+02, 3.041447448730469e+02, 3.034011535644531e+02, 3.02648681640625e+02, 3.019139404296875e+02, 3.012229919433594e+02, 3.006003112792969e+02, 3.000679321289062e+02, 2.99644775390625e+02, 2.993457641601562e+02, 2.991815490722656e+02, 2.991578979492188e+02, 2.992756652832031e+02, 2.995307006835938e+02, 2.999139404296875e+02, 3.004118041992188e+02, 3.010066833496094e+02, 3.01677490234375e+02, 3.024004821777344e+02, 3.031499938964844e+02]
+heaPum.TSet=[3.081499938964844e+02, 3.081499938964844e+02]
+heaPum.vol.T=[2.931499938964844e+02, 3.029743041992188e+02, 3.030608215332031e+02, 3.030621032714844e+02, 3.030621032714844e+02, 3.030620422363281e+02, 3.030620422363281e+02, 3.030620422363281e+02, 3.030620422363281e+02, 3.030620422363281e+02, 3.030620422363281e+02, 3.030620422363281e+02, 3.030620422363281e+02, 3.030620422363281e+02, 3.030620422363281e+02, 3.030620422363281e+02, 3.030620422363281e+02, 3.030620422363281e+02, 3.030620422363281e+02, 3.030620422363281e+02, 3.030620422363281e+02, 3.030620422363281e+02, 3.030620422363281e+02, 3.030620422363281e+02, 3.030620422363281e+02, 3.030620422363281e+02, 3.030620422363281e+02, 3.030620422363281e+02, 3.030620422363281e+02, 3.030620422363281e+02, 3.030620422363281e+02, 3.030620422363281e+02, 3.030620422363281e+02, 3.030620422363281e+02, 3.034085388183594e+02, 3.04134521484375e+02, 3.048303527832031e+02, 3.054635009765625e+02, 3.060114440917969e+02, 3.064551086425781e+02, 3.067783813476562e+02, 3.069698791503906e+02, 3.0702294921875e+02, 3.069355773925781e+02, 3.067110290527344e+02, 3.063570861816406e+02, 3.058865661621094e+02, 3.053157653808594e+02, 3.046654968261719e+02, 3.039578552246094e+02, 3.032191162109375e+02, 3.024743957519531e+02, 3.017507934570312e+02, 3.0107373046875e+02, 3.079545288085938e+02, 3.081474609375e+02, 3.081499938964844e+02, 3.081499633789062e+02, 3.081499328613281e+02, 3.081499328613281e+02, 3.0814990234375e+02, 3.081497802734375e+02, 3.081496887207031e+02, 3.081495971679688e+02, 3.081495361328125e+02, 3.081493530273438e+02, 3.081492309570312e+02, 3.081492919921875e+02, 3.081493835449219e+02, 3.047926025390625e+02, 3.052630920410156e+02, 3.058400573730469e+02, 3.063199157714844e+02, 3.066847229003906e+02, 3.069212646484375e+02, 3.070209045410156e+02, 3.069803771972656e+02, 3.06801025390625e+02, 3.064892272949219e+02, 3.060560302734375e+02, 3.05516357421875e+02, 3.048898315429688e+02, 3.04198486328125e+02, 3.034672241210938e+02, 3.027215576171875e+02, 3.019883728027344e+02, 3.01292724609375e+02, 3.075906982421875e+02, 3.081441955566406e+02, 3.081499328613281e+02, 3.081499938964844e+02, 3.081499633789062e+02, 3.081499328613281e+02, 3.081499328613281e+02, 3.081498107910156e+02, 3.081497192382812e+02, 3.081496276855469e+02, 3.081495361328125e+02, 3.081494140625e+02, 3.081492614746094e+02, 3.081492614746094e+02]
+heaPum.modulation=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 4.075651931762697e+01, 4.350741577148438e+01, 4.556741333007812e+01, 4.695172882080078e+01, 4.761213684082031e+01, 4.752463150024414e+01, 4.669161224365234e+01, 4.514192581176758e+01, 4.292992401123047e+01, 4.013354110717773e+01, 3.685162353515625e+01, 3.3200439453125e+01, 2.930969047546387e+01, 2.53178653717041e+01, 2.13671817779541e+01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 3.988526916503906e+01, 4.294846725463867e+01, 4.517448425292969e+01, 4.673804092407227e+01, 4.758743667602539e+01, 4.769348526000977e+01, 4.70531120300293e+01, 4.568943786621094e+01, 4.365101623535156e+01, 4.100997161865234e+01, 3.785724258422852e+01, 3.43021240234375e+01, 3.047055244445801e+01, 2.649831962585449e+01]
+heaPum.COP=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 4.454708099365233e+00, 4.321117401123047e+00, 4.25696325302124e+00, 4.216943264007568e+00, 4.197060585021973e+00, 4.195804595947266e+00, 4.21332836151123e+00, 4.251458168029785e+00, 4.314069747924805e+00, 4.407994270324707e+00, 4.544783115386963e+00, 4.744340419769287e+00, 4.980386257171631e+00, 4.976540088653564e+00, 4.972937107086182e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 4.522456169128418e+00, 4.312310218811035e+00, 4.24739933013916e+00, 4.207867622375488e+00, 4.188633918762207e+00, 4.187777519226074e+00, 4.205062866210938e+00, 4.241869449615479e+00, 4.301432609558105e+00, 4.389606475830078e+00, 4.516679286956787e+00, 4.700113296508789e+00, 4.9704270362854e+00, 5.010891914367676e+00]
+heaPum.QCon_flow=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 6.475000488281253e+03, 6.89173681640625e+03, 7.2125087890625e+03, 7.42596630859375e+03, 7.524546875e+03, 7.5047578125e+03, 7.36730078125e+03, 7.1170439453125e+03, 6.76285302734375e+03, 6.31727490234375e+03, 5.7960947265625e+03, 5.21777490234375e+03, 4.6028447265625e+03, 3.973248779296875e+03, 3.351097412109375e+03, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 6.31724951171875e+03, 6.76285498046875e+03, 7.1170478515625e+03, 7.36730615234375e+03, 7.504765625e+03, 7.524556640625e+03, 7.42597802734375e+03, 7.2125224609375e+03, 6.891751953125e+03, 6.475029296875e+03, 5.9771171875e+03, 5.41565380859375e+03, 4.810529296875e+03, 4.18339013671875e+03]
+heaPum.PEl=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1.453518432617189e+03, 1.59489697265625e+03, 1.694285034179688e+03, 1.760983154296875e+03, 1.792813354492188e+03, 1.7886337890625e+03, 1.748570190429688e+03, 1.674024047851562e+03, 1.567627075195312e+03, 1.433140380859375e+03, 1.275329223632812e+03, 1.099789306640625e+03, 9.241942749023438e+02, 7.983958129882812e+02, 6.738668212890625e+02, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1.396862426757812e+03, 1.568267211914062e+03, 1.675624877929688e+03, 1.750840942382812e+03, 1.79169775390625e+03, 1.796789916992188e+03, 1.765961181640625e+03, 1.700317016601562e+03, 1.60219921875e+03, 1.475081909179688e+03, 1.323343139648438e+03, 1.152238891601562e+03, 9.678302001953125e+02, 8.34859375e+02]
diff --git a/IDEAS/Resources/Scripts/Dymola/Fluid/HeatPumps/Examples/HeatPump_AirWater.mos b/IDEAS/Resources/Scripts/Dymola/Fluid/HeatPumps/Examples/HeatPump_AirWater.mos
new file mode 100644
index 0000000000..ad43fbac6f
--- /dev/null
+++ b/IDEAS/Resources/Scripts/Dymola/Fluid/HeatPumps/Examples/HeatPump_AirWater.mos
@@ -0,0 +1,49 @@
+removePlots();
+simulateModel("IDEAS.Fluid.HeatPumps.Examples.HeatPump_AirWater", stopTime=15000, method="dassl", resultFile="HeatPump_AirWater");
+
+createPlot(id=1,
+ position = {55, 50, 750, 480},
+ y={"heaPum.Tin.T", "heaPum.TSet", "heaPum.vol.T"},
+ range={0, 15000, 293.15, 310.15},
+ displayUnits={"","K","K"},
+ autoscale = true,
+ autoerase = true,
+ autoreplot = true,
+ grid = true,
+ color = true,
+ leftTitleType = 1,
+ bottomTitleType = 1);
+createPlot(id=1,
+ y = {"heaPum.modulation"},
+ range = {0, 15000, 0, 100},
+ autoscale = true,
+ autoerase = true,
+ autoreplot = true,
+ grid = true,
+ color = true,
+ subPlot = 2,
+ leftTitleType = 1,
+ bottomTitleType = 1);
+createPlot(id=1,
+ y = {"heaPum.COP"},
+ range = {0, 15000, 0, 10},
+ autoscale = true,
+ autoerase = true,
+ autoreplot = true,
+ grid = true,
+ color = true,
+ subPlot = 3,
+ leftTitleType = 1,
+ bottomTitleType = 1);
+createPlot(id=1,
+ y = {"heaPum.QCon_flow", "heaPum.PEl"},
+ range = {0, 15000, 0, 8000},
+ autoscale = true,
+ autoerase = true,
+ autoreplot = true,
+ grid = true,
+ color = true,
+ subPlot = 4,
+ leftTitleType = 1,
+ bottomTitleType = 1);
+