Buildings.Fluid.HeatPumps.Validation

Collection of models that validate the heat pump models

Information

This package contains models that validate the heat pump models. The examples plot various outputs, which have been verified against analytical solutions. These model outputs are stored as reference data to allow continuous validation whenever models in the library change.

Extends from Modelica.Icons.ExamplesPackage (Icon for packages containing runnable examples).

Package Content

Name Description
Buildings.Fluid.HeatPumps.Validation.Carnot_TCon_LimitedCapacity Carnot_TCon_LimitedCapacity Test model for Carnot_TCon with limited heating capacity
Buildings.Fluid.HeatPumps.Validation.Carnot_TCon_LowTemperature Carnot_TCon_LowTemperature Test model for Carnot_TCon with low condenser leaving water temperature
Buildings.Fluid.HeatPumps.Validation.Carnot_TCon_etaPL Carnot_TCon_etaPL Test model for the part load efficiency curve with condenser leaving temperature as input signal
Buildings.Fluid.HeatPumps.Validation.Carnot_TCon_reverseFlow Carnot_TCon_reverseFlow Test model for heat pump based on Carnot efficiency and condenser outlet temperature control signal
Buildings.Fluid.HeatPumps.Validation.Carnot_y_etaCar Carnot_y_etaCar Test model for heat pump based on Carnot efficiency with etaCar as parameter
Buildings.Fluid.HeatPumps.Validation.Carnot_y_etaPL Carnot_y_etaPL Test model for the part load efficiency curve with compressor speed as input signal
Buildings.Fluid.HeatPumps.Validation.EquationFitReversible_EnergyPlus EquationFitReversible_EnergyPlus Validation with EnergyPlus model
Buildings.Fluid.HeatPumps.Validation.EquationFitReversible_ScalingFactor EquationFitReversible_ScalingFactor Test model for scaling up the reversable heat pump
Buildings.Fluid.HeatPumps.Validation.ReciprocatingWaterToWater_Dynamic ReciprocatingWaterToWater_Dynamic Test model for variable speed reciprocating water to water heat pump
Buildings.Fluid.HeatPumps.Validation.ReciprocatingWaterToWater_ScalingFactor ReciprocatingWaterToWater_ScalingFactor Test model for variable speed reciprocating water to water heat pump
Buildings.Fluid.HeatPumps.Validation.ReciprocatingWaterToWater_Static ReciprocatingWaterToWater_Static Test model for static, reciprocating water to water heat pump
Buildings.Fluid.HeatPumps.Validation.ReciprocatingWaterToWater_VariableSpeed ReciprocatingWaterToWater_VariableSpeed Test model for reciprocating water to water heat pump
Buildings.Fluid.HeatPumps.Validation.ScrollWaterToWater_Dynamic ScrollWaterToWater_Dynamic Test model for scroll water to water heat pump
Buildings.Fluid.HeatPumps.Validation.ScrollWaterToWater_ScalingFactor ScrollWaterToWater_ScalingFactor Test model for scroll water to water heat pump
Buildings.Fluid.HeatPumps.Validation.ScrollWaterToWater_Static ScrollWaterToWater_Static Test model for static scroll water to water heat pump
Buildings.Fluid.HeatPumps.Validation.ScrollWaterToWater_TemperatureProtection ScrollWaterToWater_TemperatureProtection Test model for temperature protection of scroll water to water heat pump
Buildings.Fluid.HeatPumps.Validation.ScrollWaterToWater_VariableSpeed ScrollWaterToWater_VariableSpeed Test model for scroll water to water heat pump

Buildings.Fluid.HeatPumps.Validation.Carnot_TCon_LimitedCapacity Buildings.Fluid.HeatPumps.Validation.Carnot_TCon_LimitedCapacity

Test model for Carnot_TCon with limited heating capacity

Buildings.Fluid.HeatPumps.Validation.Carnot_TCon_LimitedCapacity

Information

This example extends from Buildings.Fluid.HeatPumps.Examples.Carnot_TCon but limits the heating capacity.

Extends from Examples.Carnot_TCon (Test model for heat pump based on Carnot efficiency and condenser outlet temperature control signal).

Parameters

TypeNameDefaultDescription
TemperatureDifferencedTEva_nominal-5Temperature difference evaporator inlet-outlet [K]
TemperatureDifferencedTCon_nominal10Temperature difference condenser outlet-inlet [K]
HeatFlowRateQCon_flow_nominal100E3Evaporator heat flow rate [W]
MassFlowRatem1_flow_nominalQCon_flow_nominal/dTCon_nomi...Nominal mass flow rate at condenser [kg/s]

Modelica definition

model Carnot_TCon_LimitedCapacity "Test model for Carnot_TCon with limited heating capacity" extends Examples.Carnot_TCon(heaPum(QCon_flow_max=250000)); end Carnot_TCon_LimitedCapacity;

Buildings.Fluid.HeatPumps.Validation.Carnot_TCon_LowTemperature Buildings.Fluid.HeatPumps.Validation.Carnot_TCon_LowTemperature

Test model for Carnot_TCon with low condenser leaving water temperature

Buildings.Fluid.HeatPumps.Validation.Carnot_TCon_LowTemperature

Information

This example extends from Buildings.Fluid.HeatPumps.Examples.Carnot_TCon but decreases the set point for the leaving condenser temperature to be below its inlet temperature, in which case the model provides no heating. Towards the end of the simulation, the inlet temperature of the condenser is decreased to be below the evaporator temperature. In this domain, the model requires cooling again. While this is not a meaningful operating point for the model, the example verifies that it robustly simulates this regime.

Extends from Examples.Carnot_TCon (Test model for heat pump based on Carnot efficiency and condenser outlet temperature control signal).

Parameters

TypeNameDefaultDescription
TemperatureDifferencedTEva_nominal-5Temperature difference evaporator inlet-outlet [K]
TemperatureDifferencedTCon_nominal10Temperature difference condenser outlet-inlet [K]
HeatFlowRateQCon_flow_nominal100E3Evaporator heat flow rate [W]
MassFlowRatem1_flow_nominalQCon_flow_nominal/dTCon_nomi...Nominal mass flow rate at condenser [kg/s]

Modelica definition

model Carnot_TCon_LowTemperature "Test model for Carnot_TCon with low condenser leaving water temperature" extends Examples.Carnot_TCon(TConLvg(height=-32), sou1(use_T_in=true)); Modelica.Blocks.Sources.Ramp TConEnt( duration=60, offset=273.15 + 20, startTime=3000, height=-19) "Control signal for condenser entering temperature"; equation connect(TConEnt.y, sou1.T_in); end Carnot_TCon_LowTemperature;

Buildings.Fluid.HeatPumps.Validation.Carnot_TCon_etaPL Buildings.Fluid.HeatPumps.Validation.Carnot_TCon_etaPL

Test model for the part load efficiency curve with condenser leaving temperature as input signal

Buildings.Fluid.HeatPumps.Validation.Carnot_TCon_etaPL

Information

This example extends from Buildings.Fluid.HeatPumps.Examples.Carnot_TCon but has a part load efficiency that varies with the load.

Extends from Examples.Carnot_TCon (Test model for heat pump based on Carnot efficiency and condenser outlet temperature control signal).

Parameters

TypeNameDefaultDescription
TemperatureDifferencedTEva_nominal-5Temperature difference evaporator inlet-outlet [K]
TemperatureDifferencedTCon_nominal10Temperature difference condenser outlet-inlet [K]
HeatFlowRateQCon_flow_nominal100E3Evaporator heat flow rate [W]
MassFlowRatem1_flow_nominalQCon_flow_nominal/dTCon_nomi...Nominal mass flow rate at condenser [kg/s]

Modelica definition

model Carnot_TCon_etaPL "Test model for the part load efficiency curve with condenser leaving temperature as input signal" extends Examples.Carnot_TCon( heaPum(a={0.7,0.3}), TConLvg(height=10, offset=273.15 + 25)); end Carnot_TCon_etaPL;

Buildings.Fluid.HeatPumps.Validation.Carnot_TCon_reverseFlow Buildings.Fluid.HeatPumps.Validation.Carnot_TCon_reverseFlow

Test model for heat pump based on Carnot efficiency and condenser outlet temperature control signal

Buildings.Fluid.HeatPumps.Validation.Carnot_TCon_reverseFlow

Information

Example that simulates a heat pump whose efficiency is scaled based on the Carnot cycle. The heat pump takes as an input the condenser leaving water temperature. The condenser mass flow rate is computed in such a way that it has a temperature difference equal to dTCon_nominal.

This example checks the correct behavior if a mass flow rate attains zero.

Extends from Modelica.Icons.Example (Icon for runnable examples).

Parameters

TypeNameDefaultDescription
TemperatureDifferencedTEva_nominal-10Temperature difference evaporator inlet-outlet [K]
TemperatureDifferencedTCon_nominal10Temperature difference condenser outlet-inlet [K]
HeatFlowRateQCon_flow_nominal100E3Evaporator heat flow rate [W]
MassFlowRatem1_flow_nominalQCon_flow_nominal/dTCon_nomi...Nominal mass flow rate at condenser [kg/s]

Modelica definition

model Carnot_TCon_reverseFlow "Test model for heat pump based on Carnot efficiency and condenser outlet temperature control signal" extends Modelica.Icons.Example; package Medium1 = Buildings.Media.Water "Medium model"; package Medium2 = Buildings.Media.Water "Medium model"; parameter Modelica.SIunits.TemperatureDifference dTEva_nominal=-10 "Temperature difference evaporator inlet-outlet"; parameter Modelica.SIunits.TemperatureDifference dTCon_nominal=10 "Temperature difference condenser outlet-inlet"; parameter Modelica.SIunits.HeatFlowRate QCon_flow_nominal = 100E3 "Evaporator heat flow rate"; parameter Modelica.SIunits.MassFlowRate m1_flow_nominal= QCon_flow_nominal/dTCon_nominal/4200 "Nominal mass flow rate at condenser"; Modelica.Blocks.Sources.Constant TConLvg(k=273.15 + 40) "Control signal for condenser leaving temperature"; final parameter Modelica.SIunits.SpecificHeatCapacity cp2_default= Medium2.specificHeatCapacityCp(Medium2.setState_pTX( Medium2.p_default, Medium2.T_default, Medium2.X_default)) "Specific heat capacity of medium 2 at default medium state"; Modelica.Blocks.Sources.Ramp mCon_flow( duration=60, startTime=1800, height=-2*m1_flow_nominal, offset=m1_flow_nominal) "Mass flow rate for condenser"; Carnot_TCon heaPum( redeclare package Medium1 = Medium1, redeclare package Medium2 = Medium2, dTEva_nominal=dTEva_nominal, dTCon_nominal=dTCon_nominal, m1_flow_nominal=m1_flow_nominal, show_T=true, use_eta_Carnot_nominal=true, etaCarnot_nominal=0.3, QCon_flow_nominal=QCon_flow_nominal, allowFlowReversal1=true, allowFlowReversal2=true, dp1_nominal=6000, dp2_nominal=6000) "Heat pump"; Sources.MassFlowSource_T sou1(nPorts=1, redeclare package Medium = Medium1, use_m_flow_in=true, T=293.15); Sources.MassFlowSource_T sou2(nPorts=1, redeclare package Medium = Medium2, use_T_in=false, use_m_flow_in=true, T=288.15); Buildings.Fluid.Sources.Boundary_pT sin1( redeclare package Medium = Medium1, nPorts=1); Buildings.Fluid.Sources.Boundary_pT sin2( nPorts=1, redeclare package Medium = Medium2); Modelica.Blocks.Math.Gain mEva_flow(k=-1/cp2_default/dTEva_nominal) "Evaporator mass flow rate"; Modelica.Blocks.Math.Add QEva_flow(k2=-1) "Evaporator heat flow rate"; equation connect(sou1.ports[1],heaPum. port_a1); connect(sou2.ports[1],heaPum. port_a2); connect(sin2.ports[1],heaPum. port_b2); connect(QEva_flow.y,mEva_flow. u); connect(heaPum.port_b1,sin1. ports[1]); connect(mEva_flow.y, sou2.m_flow_in); connect(TConLvg.y, heaPum.TSet); connect(mCon_flow.y, sou1.m_flow_in); connect(heaPum.QCon_flow, QEva_flow.u1); connect(QEva_flow.u2, heaPum.P); end Carnot_TCon_reverseFlow;

Buildings.Fluid.HeatPumps.Validation.Carnot_y_etaCar Buildings.Fluid.HeatPumps.Validation.Carnot_y_etaCar

Test model for heat pump based on Carnot efficiency with etaCar as parameter

Buildings.Fluid.HeatPumps.Validation.Carnot_y_etaCar

Information

This example extends from Buildings.Fluid.HeatPumps.Examples.Carnot_y but uses the parameter etaCar instead of COP_nominal.

Extends from Buildings.Fluid.HeatPumps.Examples.Carnot_y (Test model for heat pump based on Carnot efficiency).

Parameters

TypeNameDefaultDescription
RealCOP_nominal6Nominal COP
PowerP_nominal10E3Nominal compressor power (at y=1) [W]
TemperatureDifferencedTEva_nominal-10Temperature difference evaporator outlet-inlet [K]
TemperatureDifferencedTCon_nominal10Temperature difference condenser outlet-inlet [K]
MassFlowRatem2_flow_nominal-P_nominal*(COP_nominal - 1)...Nominal mass flow rate at chilled water side [kg/s]
MassFlowRatem1_flow_nominalP_nominal*COP_nominal/cp1_de...Nominal mass flow rate at condenser water wide [kg/s]

Modelica definition

model Carnot_y_etaCar "Test model for heat pump based on Carnot efficiency with etaCar as parameter" extends Buildings.Fluid.HeatPumps.Examples.Carnot_y( heaPum(use_eta_Carnot_nominal=true, etaCarnot_nominal=0.494805)); end Carnot_y_etaCar;

Buildings.Fluid.HeatPumps.Validation.Carnot_y_etaPL Buildings.Fluid.HeatPumps.Validation.Carnot_y_etaPL

Test model for the part load efficiency curve with compressor speed as input signal

Buildings.Fluid.HeatPumps.Validation.Carnot_y_etaPL

Information

This example extends from Buildings.Fluid.HeatPumps.Examples.Carnot_y but uses a part load efficiency curve that is different from 1.

Extends from Examples.Carnot_y (Test model for heat pump based on Carnot efficiency).

Parameters

TypeNameDefaultDescription
RealCOP_nominal6Nominal COP
PowerP_nominal10E3Nominal compressor power (at y=1) [W]
TemperatureDifferencedTEva_nominal-10Temperature difference evaporator outlet-inlet [K]
TemperatureDifferencedTCon_nominal10Temperature difference condenser outlet-inlet [K]
MassFlowRatem2_flow_nominal-P_nominal*(COP_nominal - 1)...Nominal mass flow rate at chilled water side [kg/s]
MassFlowRatem1_flow_nominalP_nominal*COP_nominal/cp1_de...Nominal mass flow rate at condenser water wide [kg/s]

Modelica definition

model Carnot_y_etaPL "Test model for the part load efficiency curve with compressor speed as input signal" extends Examples.Carnot_y(heaPum(a={0.7,0.3}, T1_start=303.15, T2_start=278.15)); end Carnot_y_etaPL;

Buildings.Fluid.HeatPumps.Validation.EquationFitReversible_EnergyPlus Buildings.Fluid.HeatPumps.Validation.EquationFitReversible_EnergyPlus

Validation with EnergyPlus model

Buildings.Fluid.HeatPumps.Validation.EquationFitReversible_EnergyPlus

Information

This model implements a comparative model validation of Buildings.Fluid.HeatPumps.EquationFitReversible against results obtained using EnergyPlus 9.1.

The EnergyPlus results were generated using the example file GSHPSimple-GLHE-ReverseHeatPump.idf from EnergyPlus, with a nominal cooling capacity of 39890 Watts and nominal heating capacity of 39040 Watts.

Parameters

TypeNameDefaultDescription
EnergyPlusperEP EnergyPlus heat pump performance
MassFlowRatemSou_flow_nominalperEP.hea.mSou_flowSource heat exchanger nominal mass flow rate [kg/s]
MassFlowRatemLoa_flow_nominalperEP.hea.mLoa_flowLoad heat exchanger nominal mass flow rate [kg/s]

Modelica definition

model EquationFitReversible_EnergyPlus "Validation with EnergyPlus model" package Medium = Buildings.Media.Water "Medium model"; parameter Data.EquationFitReversible.EnergyPlus perEP "EnergyPlus heat pump performance"; parameter Modelica.SIunits.MassFlowRate mSou_flow_nominal=perEP.hea.mSou_flow "Source heat exchanger nominal mass flow rate"; parameter Modelica.SIunits.MassFlowRate mLoa_flow_nominal=perEP.hea.mLoa_flow "Load heat exchanger nominal mass flow rate"; Buildings.Fluid.HeatPumps.EquationFitReversible heaPum( redeclare package Medium1 = Medium, redeclare package Medium2 = Medium, per=perEP, energyDynamics=Modelica.Fluid.Types.Dynamics.SteadyState, massDynamics=Modelica.Fluid.Types.Dynamics.SteadyState) "Water to Water heat pump"; Sources.MassFlowSource_T loaPum( redeclare package Medium = Medium, use_m_flow_in=false, m_flow=1.89, T=328.15, nPorts=1, use_T_in=true) "Load water pump"; Sources.MassFlowSource_T souPum( redeclare package Medium = Medium, use_m_flow_in=false, m_flow=1.89, T=280.65, nPorts=1, use_T_in=true) "Source side water pump"; Buildings.Fluid.Sources.Boundary_pT cooVol( redeclare package Medium = Medium, nPorts=1) "Volume for cooling load"; Buildings.Fluid.Sources.Boundary_pT heaVol( redeclare package Medium = Medium, nPorts=1) "Volume for heating load"; Modelica.Blocks.Sources.CombiTimeTable datRea( tableOnFile=true, fileName=ModelicaServices.ExternalReferences.loadResource( "modelica://Buildings//Resources/Data/Fluid/HeatPumps/Validation/EquationFitReversible_EnergyPlus/GSHPSimple-GLHE-ReverseHeatPump.dat"), verboseRead=false, tableName="EnergyPlus", columns=2:8, smoothness=Modelica.Blocks.Types.Smoothness.ConstantSegments) "Reader for \"GSHPSimple-GLHE-ReverseHeatPump.IDF\" energy plus example results"; Controls.OBC.CDL.Integers.Sources.Constant uMod(k=1) "Heat pump operational mode"; Buildings.Controls.OBC.UnitConversions.From_degC TLoaEnt "Block that converts entering water temperature of the load side"; Buildings.Controls.OBC.UnitConversions.From_degC TSouEnt "Block that converts entering water temperature of the source side"; Buildings.Controls.OBC.UnitConversions.From_degC TSetHea "Block that converts set point for leaving heating water temperature "; Modelica.Blocks.Sources.RealExpression QSou_flow_EP(y=datRea.y[2]) "EnergyPlus results: source side heat flow rate [W]"; Modelica.Blocks.Sources.RealExpression QLoa_flow_EP(y=-datRea.y[3]) "EnergyPlus results: load side heat flow rate [W]"; Modelica.Blocks.Sources.RealExpression P_EP(y=datRea.y[1]) "EnergyPlus results: compressr power [W]"; equation connect(heaPum.port_a1,loaPum. ports[1]); connect(souPum.ports[1], heaPum.port_a2); connect(cooVol.ports[1], heaPum.port_b2); connect(heaPum.port_b1, heaVol.ports[1]); connect(loaPum.T_in, TLoaEnt.y); connect(TSouEnt.y, souPum.T_in); connect(TSetHea.y, heaPum.TSet); connect(datRea.y[5], TLoaEnt.u); connect(datRea.y[4],TSetHea. u); connect(datRea.y[6], TSouEnt.u); connect(heaPum.uMod, uMod.y); end EquationFitReversible_EnergyPlus;

Buildings.Fluid.HeatPumps.Validation.EquationFitReversible_ScalingFactor Buildings.Fluid.HeatPumps.Validation.EquationFitReversible_ScalingFactor

Test model for scaling up the reversable heat pump

Buildings.Fluid.HeatPumps.Validation.EquationFitReversible_ScalingFactor

Information

Model that demonstrates the use of the Buildings.Fluid.HeatPumps.EquationFitReversible heat pump model. This validation case also tests scaling the heat pump model.

The capacity, pressure drop and coefficient of performance of the scaled heat pump model are compared to the values of the non-scaled model.

Extends from Modelica.Icons.Example (Icon for runnable examples).

Parameters

TypeNameDefaultDescription
Trane_Axiom_EXW240per Reverse heat pump performance data
MassFlowRatemSou_flow_nominalper.hea.mSou_flowSource heat exchanger nominal mass flow rate [kg/s]
MassFlowRatemLoa_flow_nominalper.hea.mLoa_flowLoad heat exchanger nominal mass flow rate [kg/s]
Realscaling_factor2Scaling factor for heat pump capacity

Modelica definition

model EquationFitReversible_ScalingFactor "Test model for scaling up the reversable heat pump" extends Modelica.Icons.Example; package Medium = Buildings.Media.Water "Medium model"; parameter Data.EquationFitReversible.Trane_Axiom_EXW240 per "Reverse heat pump performance data"; parameter Modelica.SIunits.MassFlowRate mSou_flow_nominal=per.hea.mSou_flow "Source heat exchanger nominal mass flow rate"; parameter Modelica.SIunits.MassFlowRate mLoa_flow_nominal=per.hea.mLoa_flow "Load heat exchanger nominal mass flow rate"; parameter Real scaling_factor=2 "Scaling factor for heat pump capacity"; Buildings.Fluid.Sources.Boundary_pT sin2( redeclare package Medium = Medium, nPorts=2) "Source side sink"; Buildings.Fluid.Sources.Boundary_pT sin1( redeclare package Medium = Medium, nPorts=2) "Load side sink"; Modelica.Fluid.Sources.MassFlowSource_T loa( redeclare package Medium = Medium, m_flow=mLoa_flow_nominal, use_m_flow_in=true, use_T_in=true, nPorts=1) "Load side flow source"; Modelica.Fluid.Sources.MassFlowSource_T sou( redeclare package Medium = Medium, m_flow=mSou_flow_nominal, use_m_flow_in=true, use_T_in=true, nPorts=1) "Source side flow source"; EquationFitReversible heaPum( redeclare package Medium1 = Medium, redeclare package Medium2 = Medium, per=per, energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial) "Equation fit reverse heat pump"; EquationFitReversible heaPum1( redeclare package Medium1 = Medium, redeclare package Medium2 = Medium, per=per, scaling_factor=scaling_factor, energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial) "Scaled equation fit reverse heat pump"; Modelica.Fluid.Sources.MassFlowSource_T loa1( redeclare package Medium = Medium, m_flow=mLoa_flow_nominal, use_m_flow_in=true, use_T_in=true, nPorts=1) "Load side flow source"; Modelica.Fluid.Sources.MassFlowSource_T sou1( redeclare package Medium = Medium, m_flow=mSou_flow_nominal, use_m_flow_in=true, use_T_in=true, nPorts=1) "Source side flow source"; Modelica.Blocks.Sources.Constant TLoa(k=323.15) "Load side fluid temperature"; Modelica.Blocks.Sources.Constant TSou(k=285.15) "Source side fluid temperature"; Modelica.Blocks.Sources.RealExpression capErr(y=(heaPum1.QLoa_flow - scaling_factor*heaPum.QLoa_flow)) "Apparent capacity of the heat pump"; Modelica.Blocks.Sources.RealExpression mLoa(y=mLoa_flow_nominal) "Load side mass flwo rate"; Modelica.Blocks.Sources.RealExpression mSou(y=mSou_flow_nominal) "Source side mass flow rate"; Modelica.Blocks.Math.RealToInteger reaToInt "Real to integer conversion"; Controls.OBC.CDL.Continuous.Sources.Ramp TLoaEntHea( height=4, duration(displayUnit="h") = 14400, offset=50 + 273.15, startTime=0) "Load side entering water temperature in heating mode"; Modelica.Blocks.Sources.Pulse uMod( amplitude=1, width=70, period=500, offset=0, startTime=0) "Heat pump signal to operate in heating mode"; Modelica.Blocks.Sources.RealExpression mSou1(y=mSou_flow_nominal* scaling_factor) "Source side mass flow rate"; Modelica.Blocks.Sources.RealExpression mLoa1(y=mLoa_flow_nominal* scaling_factor) "Load side mass flwo rate"; equation connect(heaPum.port_a2, sou.ports[1]); connect(heaPum.port_b1, sin1.ports[1]); connect(heaPum.port_a1, loa.ports[1]); connect(heaPum.port_b2, sin2.ports[1]); connect(sin2.ports[2], heaPum1.port_b2); connect(sou1.ports[1], heaPum1.port_a2); connect(TSou.y, sou1.T_in); connect(sou.T_in, sou1.T_in); connect(TLoa.y, loa1.T_in); connect(TLoa.y, loa.T_in); connect(loa1.ports[1], heaPum1.port_a1); connect(heaPum1.port_b1, sin1.ports[2]); connect(mLoa.y, loa.m_flow_in); connect(mSou.y, sou.m_flow_in); connect(TLoaEntHea.y, heaPum.TSet); connect(reaToInt.y, heaPum.uMod); connect(reaToInt.y, heaPum1.uMod); connect(reaToInt.u, uMod.y); connect(TLoaEntHea.y, heaPum1.TSet); connect(sou1.m_flow_in, mSou1.y); connect(loa1.m_flow_in, mLoa1.y); end EquationFitReversible_ScalingFactor;

Buildings.Fluid.HeatPumps.Validation.ReciprocatingWaterToWater_Dynamic Buildings.Fluid.HeatPumps.Validation.ReciprocatingWaterToWater_Dynamic

Test model for variable speed reciprocating water to water heat pump

Buildings.Fluid.HeatPumps.Validation.ReciprocatingWaterToWater_Dynamic

Information

Model that demonstrates the use of the Buildings.Fluid.HeatPumps.ReciprocatingWaterToWater heat pump model. This validation case also tests the stage input to the heat pump models.

With constant inlet source and load water temperatures, the heat pumps cycle on and off. The apparent capacity of the dynamic model is compared to the steady-state model and to the condenser heat transfer rate.

Extends from Modelica.Icons.Example (Icon for runnable examples).

Parameters

TypeNameDefaultDescription
MassFlowRatem1_flow_nominal0.47Nominal mass flow rate on the condenser side [kg/s]
MassFlowRatem2_flow_nominal0.47Nominal mass flow rate on the evaporator side [kg/s]
MassFlowRateflowSource0.79Mass flow rate on the condenser side [kg/s]
MassFlowRateflowLoad0.47Mass flow rate on the evaporator side [kg/s]

Modelica definition

model ReciprocatingWaterToWater_Dynamic "Test model for variable speed reciprocating water to water heat pump" extends Modelica.Icons.Example; package Medium1 = Buildings.Media.Water "Medium model"; package Medium2 = Buildings.Media.Water "Medium model"; parameter Modelica.SIunits.MassFlowRate m1_flow_nominal = 0.47 "Nominal mass flow rate on the condenser side"; parameter Modelica.SIunits.MassFlowRate m2_flow_nominal = 0.47 "Nominal mass flow rate on the evaporator side"; parameter Modelica.SIunits.MassFlowRate flowSource = 0.79 "Mass flow rate on the condenser side"; parameter Modelica.SIunits.MassFlowRate flowLoad = 0.47 "Mass flow rate on the evaporator side"; Buildings.Fluid.Sources.Boundary_pT sin2( redeclare package Medium = Medium2, nPorts=2) "Source side sink"; Buildings.Fluid.Sources.Boundary_pT sin1( redeclare package Medium = Medium1, nPorts=2) "Load side sink"; Modelica.Fluid.Sources.MassFlowSource_T loa( redeclare package Medium = Medium1, m_flow=flowLoad, use_m_flow_in=true, use_T_in=true, nPorts=1) "Load side flow source"; Modelica.Fluid.Sources.MassFlowSource_T sou( redeclare package Medium = Medium2, m_flow=flowSource, use_m_flow_in=true, use_T_in=true, nPorts=1) "Source side flow source"; Modelica.Blocks.Sources.RealExpression mLoa(y=flowLoad) "Load side mass flwo rate"; Modelica.Blocks.Sources.RealExpression mSou(y=flowSource) "Source side mass flow rate"; Buildings.Fluid.HeatPumps.ReciprocatingWaterToWater heaPum( redeclare package Medium1 = Medium1, redeclare package Medium2 = Medium2, m1_flow_nominal=m1_flow_nominal, m2_flow_nominal=m2_flow_nominal, dp1_nominal=1000, dp2_nominal=1000, redeclare package ref = Buildings.Media.Refrigerants.R410A, show_T=true, enable_variable_speed=false, per=Buildings.Fluid.HeatPumps.Data.ReciprocatingWaterToWater.Generic( etaEle=0.696, PLos=100, dTSup=9.82, UACon=2210, UAEva=1540, pisDis=0.00162, cleFac=0.069, pDro=99290), energyDynamics=Modelica.Fluid.Types.Dynamics.SteadyState, enable_temperature_protection=false) "Reciprocating water to water heat pump"; Buildings.Fluid.HeatPumps.ReciprocatingWaterToWater heaPum1( redeclare package Medium1 = Medium1, redeclare package Medium2 = Medium2, m1_flow_nominal=m1_flow_nominal, m2_flow_nominal=m2_flow_nominal, dp1_nominal=1000, dp2_nominal=1000, redeclare package ref = Buildings.Media.Refrigerants.R410A, tau1=15, tau2=15, enable_variable_speed=false, per=Buildings.Fluid.HeatPumps.Data.ReciprocatingWaterToWater.Generic( etaEle=0.696, PLos=100, dTSup=9.82, UACon=2210, UAEva=1540, pisDis=0.00162, cleFac=0.069, pDro=99290), energyDynamics=Modelica.Fluid.Types.Dynamics.SteadyStateInitial, enable_temperature_protection=false) "Reciprocating water to water heat pump with transient effects"; Modelica.Blocks.Sources.Pulse N(width=60, period=500) "Heat pump control signal"; Modelica.Fluid.Sources.MassFlowSource_T loa1( redeclare package Medium = Medium1, m_flow=flowLoad, use_m_flow_in=true, use_T_in=true, nPorts=1) "Load side flow source"; Modelica.Fluid.Sources.MassFlowSource_T sou1( redeclare package Medium = Medium2, m_flow=flowSource, use_m_flow_in=true, use_T_in=true, nPorts=1) "Source side flow source"; Modelica.Blocks.Sources.Constant TLoa(k=285.15) "Load side fluid temperature"; Modelica.Blocks.Sources.Constant TSou(k=283.15) "Source side fluid temperature"; Modelica.Blocks.Sources.RealExpression appCap(y=heaPum1.port_a1.m_flow*( heaPum1.port_b1.h_outflow - loa1.ports[1].h_outflow)) "Apparent capacity of the heat pump"; Modelica.Blocks.Math.RealToInteger realToInteger; equation connect(mSou.y, sou.m_flow_in); connect(heaPum.port_a2, sou.ports[1]); connect(heaPum.port_b1, sin1.ports[1]); connect(heaPum.port_a1, loa.ports[1]); connect(heaPum.port_b2, sin2.ports[1]); connect(sin2.ports[2], heaPum1.port_b2); connect(mLoa.y, loa.m_flow_in); connect(mLoa.y, loa1.m_flow_in); connect(sou1.ports[1], heaPum1.port_a2); connect(mSou.y, sou1.m_flow_in); connect(TSou.y, sou1.T_in); connect(sou.T_in, sou1.T_in); connect(TLoa.y, loa1.T_in); connect(TLoa.y, loa.T_in); connect(loa1.ports[1], heaPum1.port_a1); connect(heaPum1.port_b1, sin1.ports[2]); connect(N.y, realToInteger.u); connect(realToInteger.y, heaPum.stage); connect(realToInteger.y, heaPum1.stage); end ReciprocatingWaterToWater_Dynamic;

Buildings.Fluid.HeatPumps.Validation.ReciprocatingWaterToWater_ScalingFactor Buildings.Fluid.HeatPumps.Validation.ReciprocatingWaterToWater_ScalingFactor

Test model for variable speed reciprocating water to water heat pump

Buildings.Fluid.HeatPumps.Validation.ReciprocatingWaterToWater_ScalingFactor

Information

Model that demonstrates the use of the Buildings.Fluid.HeatPumps.ReciprocatingWaterToWater heat pump model. This validation case also tests the stage input to the heat pump models.

With constant inlet source and load water temperatures, the heat pumps cycle on and off. The capacity of the scaled heat pump model is compared to the capacity of the non-scaled heat pump model.

Extends from Modelica.Icons.Example (Icon for runnable examples).

Parameters

TypeNameDefaultDescription
MassFlowRatem1_flow_nominal0.47Nominal mass flow rate on the condenser side [kg/s]
MassFlowRatem2_flow_nominal0.47Nominal mass flow rate on the evaporator side [kg/s]
MassFlowRateflowSource0.79Mass flow rate on the condenser side [kg/s]
MassFlowRateflowLoad0.47Mass flow rate on the evaporator side [kg/s]
Realscaling_factor2.41Scaling factor for heat pump capacity

Modelica definition

model ReciprocatingWaterToWater_ScalingFactor "Test model for variable speed reciprocating water to water heat pump" extends Modelica.Icons.Example; package Medium1 = Buildings.Media.Water "Medium model"; package Medium2 = Buildings.Media.Water "Medium model"; parameter Modelica.SIunits.MassFlowRate m1_flow_nominal = 0.47 "Nominal mass flow rate on the condenser side"; parameter Modelica.SIunits.MassFlowRate m2_flow_nominal = 0.47 "Nominal mass flow rate on the evaporator side"; parameter Modelica.SIunits.MassFlowRate flowSource = 0.79 "Mass flow rate on the condenser side"; parameter Modelica.SIunits.MassFlowRate flowLoad = 0.47 "Mass flow rate on the evaporator side"; parameter Real scaling_factor = 2.41 "Scaling factor for heat pump capacity"; Buildings.Fluid.Sources.Boundary_pT sin2( redeclare package Medium = Medium2, nPorts=2) "Source side sink"; Buildings.Fluid.Sources.Boundary_pT sin1( redeclare package Medium = Medium1, nPorts=2) "Load side sink"; Modelica.Fluid.Sources.MassFlowSource_T loa( redeclare package Medium = Medium1, m_flow=flowLoad, use_m_flow_in=true, use_T_in=true, nPorts=1) "Load side flow source"; Modelica.Fluid.Sources.MassFlowSource_T sou( redeclare package Medium = Medium2, m_flow=flowSource, use_m_flow_in=true, use_T_in=true, nPorts=1) "Source side flow source"; Modelica.Blocks.Sources.RealExpression mLoa(y=flowLoad*scaling_factor) "Load side mass flwo rate"; Modelica.Blocks.Sources.RealExpression mSou(y=flowSource*scaling_factor) "Source side mass flow rate"; Buildings.Fluid.HeatPumps.ReciprocatingWaterToWater heaPum( redeclare package Medium1 = Medium1, redeclare package Medium2 = Medium2, m1_flow_nominal=m1_flow_nominal, m2_flow_nominal=m2_flow_nominal, dp1_nominal=1000, dp2_nominal=1000, redeclare package ref = Buildings.Media.Refrigerants.R410A, enable_variable_speed=false, per=Buildings.Fluid.HeatPumps.Data.ReciprocatingWaterToWater.Generic( etaEle=0.696, PLos=100, dTSup=9.82, UACon=2210, UAEva=1540, pisDis=0.00162, cleFac=0.069, pDro=99290), energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, enable_temperature_protection=false) "Reciprocating water to water heat pump"; Buildings.Fluid.HeatPumps.ReciprocatingWaterToWater heaPum1( redeclare package Medium1 = Medium1, redeclare package Medium2 = Medium2, dp1_nominal=1000, dp2_nominal=1000, redeclare package ref = Buildings.Media.Refrigerants.R410A, enable_variable_speed=false, scaling_factor=scaling_factor, m1_flow_nominal=m1_flow_nominal*scaling_factor, m2_flow_nominal=m2_flow_nominal*scaling_factor, per=Buildings.Fluid.HeatPumps.Data.ReciprocatingWaterToWater.Generic( etaEle=0.696, PLos=100, dTSup=9.82, UACon=2210, UAEva=1540, pisDis=0.00162, cleFac=0.069, pDro=99290), energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, enable_temperature_protection=false) "Reciprocating water to water heat pump with transient effects"; Modelica.Blocks.Sources.Pulse N(width=60, period=500) "Heat pump control signal"; Modelica.Fluid.Sources.MassFlowSource_T loa1( redeclare package Medium = Medium1, m_flow=flowLoad, use_m_flow_in=true, use_T_in=true, nPorts=1) "Load side flow source"; Modelica.Fluid.Sources.MassFlowSource_T sou1( redeclare package Medium = Medium2, m_flow=flowSource, use_m_flow_in=true, use_T_in=true, nPorts=1) "Source side flow source"; Modelica.Blocks.Sources.Constant TLoa(k=285.15) "Load side fluid temperature"; Modelica.Blocks.Sources.Constant TSou(k=283.15) "Source side fluid temperature"; Modelica.Blocks.Sources.RealExpression capErr(y=(heaPum1.QCon_flow - scaling_factor*heaPum.QCon_flow)) "Apparent capacity of the heat pump"; Modelica.Blocks.Math.RealToInteger realToInteger; Modelica.Blocks.Sources.RealExpression mLoa1(y=flowLoad) "Load side mass flwo rate"; Modelica.Blocks.Sources.RealExpression mSou1(y=flowSource) "Source side mass flow rate"; equation connect(heaPum.port_a2, sou.ports[1]); connect(heaPum.port_b1, sin1.ports[1]); connect(heaPum.port_a1, loa.ports[1]); connect(heaPum.port_b2, sin2.ports[1]); connect(sin2.ports[2], heaPum1.port_b2); connect(mLoa.y, loa1.m_flow_in); connect(sou1.ports[1], heaPum1.port_a2); connect(mSou.y, sou1.m_flow_in); connect(TSou.y, sou1.T_in); connect(sou.T_in, sou1.T_in); connect(TLoa.y, loa1.T_in); connect(TLoa.y, loa.T_in); connect(loa1.ports[1], heaPum1.port_a1); connect(heaPum1.port_b1, sin1.ports[2]); connect(N.y, realToInteger.u); connect(realToInteger.y, heaPum.stage); connect(realToInteger.y, heaPum1.stage); connect(mLoa1.y, loa.m_flow_in); connect(mSou1.y, sou.m_flow_in); end ReciprocatingWaterToWater_ScalingFactor;

Buildings.Fluid.HeatPumps.Validation.ReciprocatingWaterToWater_Static Buildings.Fluid.HeatPumps.Validation.ReciprocatingWaterToWater_Static

Test model for static, reciprocating water to water heat pump

Buildings.Fluid.HeatPumps.Validation.ReciprocatingWaterToWater_Static

Information

Model that demonstrates the use of the Buildings.Fluid.HeatPumps.ReciprocatingWaterToWater heat pump model.

The heat pump power, condenser heat transfer rate and evaporator heat transfer rate are calculated for given water temperatures and flow rates on the evaporator and condenser sides.

Extends from Modelica.Icons.Example (Icon for runnable examples).

Parameters

TypeNameDefaultDescription
MassFlowRatem1_flow_nominal0.47Nominal mass flow rate on the condenser side [kg/s]
MassFlowRatem2_flow_nominal0.47Nominal mass flow rate on the evaporator side [kg/s]
MassFlowRateflowSource0.79Mass flow rate on the condenser side [kg/s]
MassFlowRateflowLoad0.47Mass flow rate on the evaporator side [kg/s]

Modelica definition

model ReciprocatingWaterToWater_Static "Test model for static, reciprocating water to water heat pump" extends Modelica.Icons.Example; package Medium1 = Buildings.Media.Water "Medium model"; package Medium2 = Buildings.Media.Water "Medium model"; parameter Modelica.SIunits.MassFlowRate m1_flow_nominal = 0.47 "Nominal mass flow rate on the condenser side"; parameter Modelica.SIunits.MassFlowRate m2_flow_nominal = 0.47 "Nominal mass flow rate on the evaporator side"; parameter Modelica.SIunits.MassFlowRate flowSource = 0.79 "Mass flow rate on the condenser side"; parameter Modelica.SIunits.MassFlowRate flowLoad = 0.47 "Mass flow rate on the evaporator side"; Buildings.Fluid.HeatPumps.ReciprocatingWaterToWater heaPum( per=Data.ReciprocatingWaterToWater.Generic( etaEle=0.696, PLos=100, dTSup=9.82, UACon=2210, UAEva=1540, pisDis=0.00162, cleFac=0.069, pDro=99290), redeclare package Medium1 = Medium1, redeclare package Medium2 = Medium2, redeclare package ref = Buildings.Media.Refrigerants.R410A, m1_flow_nominal=m1_flow_nominal, m2_flow_nominal=m2_flow_nominal, dp1_nominal=100, dp2_nominal=100, show_T=true, energyDynamics=Modelica.Fluid.Types.Dynamics.SteadyState, enable_temperature_protection=false) "Reciprocating water to water heat pump"; Buildings.Fluid.Sources.Boundary_pT sin2( redeclare package Medium = Medium2, nPorts=1) "Source side sink"; Buildings.Fluid.Sources.Boundary_pT sin1( redeclare package Medium = Medium1, nPorts=1) "Load side sink"; Modelica.Fluid.Sources.MassFlowSource_T loa( redeclare package Medium = Medium1, m_flow=flowLoad, use_m_flow_in=true, use_T_in=true, nPorts=1) "Load side flow source"; Modelica.Fluid.Sources.MassFlowSource_T sou( redeclare package Medium = Medium2, m_flow=flowSource, use_m_flow_in=true, use_T_in=true, nPorts=1) "Sourc side flow source"; Modelica.Blocks.Sources.RealExpression mLoa(y=flowLoad) "Load side mass flow rate"; Modelica.Blocks.Sources.RealExpression mSou(y=flowSource) "Source side mass flow rate"; Modelica.Blocks.Sources.Ramp yLoa( height=20, duration=750, offset=293.15, startTime=250) "Load side fluid temperature"; Modelica.Blocks.Sources.Ramp ySou( height=20, duration=750, offset=283.15, startTime=0) "Source side fluid temperature"; Modelica.Blocks.Sources.Constant isOn(k=1) "Heat pump control signal"; equation connect(mSou.y, sou.m_flow_in); connect(mLoa.y, loa.m_flow_in); connect(yLoa.y, loa.T_in); connect(ySou.y, sou.T_in); connect(isOn.y,heaPum.y); connect(loa.ports[1], heaPum.port_a1); connect(heaPum.port_b1, sin1.ports[1]); connect(heaPum.port_a2, sou.ports[1]); connect(sin2.ports[1], heaPum.port_b2); end ReciprocatingWaterToWater_Static;

Buildings.Fluid.HeatPumps.Validation.ReciprocatingWaterToWater_VariableSpeed Buildings.Fluid.HeatPumps.Validation.ReciprocatingWaterToWater_VariableSpeed

Test model for reciprocating water to water heat pump

Buildings.Fluid.HeatPumps.Validation.ReciprocatingWaterToWater_VariableSpeed

Information

Model that demonstrates the use of the Buildings.Fluid.HeatPumps.ReciprocatingWaterToWater heat pump model.

With constant inlet source and load water temperatures, the compressor frequency is increased linearly to its full load value and then ramped down to zero.

Extends from Modelica.Icons.Example (Icon for runnable examples).

Parameters

TypeNameDefaultDescription
MassFlowRatem1_flow_nominal0.47Nominal mass flow rate on the condenser side [kg/s]
MassFlowRatem2_flow_nominal0.47Nominal mass flow rate on the evaporator side [kg/s]
MassFlowRateflowSource0.79Mass flow rate on the condenser side [kg/s]
MassFlowRateflowLoad0.47Mass flow rate on the evaporator side [kg/s]

Modelica definition

model ReciprocatingWaterToWater_VariableSpeed "Test model for reciprocating water to water heat pump" extends Modelica.Icons.Example; package Medium1 = Buildings.Media.Water "Medium model"; package Medium2 = Buildings.Media.Water "Medium model"; parameter Modelica.SIunits.MassFlowRate m1_flow_nominal = 0.47 "Nominal mass flow rate on the condenser side"; parameter Modelica.SIunits.MassFlowRate m2_flow_nominal = 0.47 "Nominal mass flow rate on the evaporator side"; parameter Modelica.SIunits.MassFlowRate flowSource = 0.79 "Mass flow rate on the condenser side"; parameter Modelica.SIunits.MassFlowRate flowLoad = 0.47 "Mass flow rate on the evaporator side"; Buildings.Fluid.Sources.Boundary_pT sin2( redeclare package Medium = Medium2, nPorts=1) "Source side sink"; Buildings.Fluid.Sources.Boundary_pT sin1( redeclare package Medium = Medium1, nPorts=1) "Load side sink"; Modelica.Fluid.Sources.MassFlowSource_T loa( redeclare package Medium = Medium1, m_flow=flowLoad, use_m_flow_in=true, use_T_in=true, nPorts=1) "Load side flow source"; Modelica.Fluid.Sources.MassFlowSource_T sou( redeclare package Medium = Medium2, m_flow=flowSource, use_m_flow_in=true, use_T_in=true, nPorts=1) "Source side flow source"; Modelica.Blocks.Sources.RealExpression mLoa(y=flowLoad) "Load side mass flow rate"; Modelica.Blocks.Sources.RealExpression mSou(y=flowSource) "Source side mass flow rate"; Buildings.Fluid.HeatPumps.ReciprocatingWaterToWater heaPum( redeclare package Medium1 = Medium1, redeclare package Medium2 = Medium2, m1_flow_nominal=m1_flow_nominal, m2_flow_nominal=m2_flow_nominal, dp1_nominal=1000, dp2_nominal=1000, redeclare package ref = Buildings.Media.Refrigerants.R410A, show_T=true, per=Buildings.Fluid.HeatPumps.Data.ReciprocatingWaterToWater.Generic( etaEle=0.696, PLos=100, dTSup=9.82, UACon=2210, UAEva=1540, pisDis=0.00162, cleFac=0.069, pDro=99290), energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, enable_temperature_protection=false) "Reciprocating water to water heat pump"; Modelica.Blocks.Sources.Trapezoid N( startTime=100, offset=0.0, rising=200, width=200, falling=200, period=1000) "Heat pump control signal"; Modelica.Blocks.Sources.Constant TLoa(k=285.15) "Load side temperature"; Modelica.Blocks.Sources.Constant TSou(k=283.15) "Source side temeprature"; equation connect(mSou.y, sou.m_flow_in); connect(mLoa.y, loa.m_flow_in); connect(N.y,heaPum.y); connect(TSou.y, sou.T_in); connect(TLoa.y, loa.T_in); connect(sin2.ports[1], heaPum.port_b2); connect(heaPum.port_a1, loa.ports[1]); connect(heaPum.port_b1, sin1.ports[1]); connect(sou.ports[1], heaPum.port_a2); end ReciprocatingWaterToWater_VariableSpeed;

Buildings.Fluid.HeatPumps.Validation.ScrollWaterToWater_Dynamic Buildings.Fluid.HeatPumps.Validation.ScrollWaterToWater_Dynamic

Test model for scroll water to water heat pump

Buildings.Fluid.HeatPumps.Validation.ScrollWaterToWater_Dynamic

Information

Model that demonstrates the use of the Buildings.Fluid.HeatPumps.ScrollWaterToWater heat pump model. This validation case also tests the stage input to the heat pump models.

With constant inlet source and load water temperatures, the heat pumps cycle on and off. The apparent capacity of the dynamic model is compared to the steady-state model and to the condenser heat transfer rate.

Extends from Modelica.Icons.Example (Icon for runnable examples).

Parameters

TypeNameDefaultDescription
MassFlowRatem1_flow_nominal0.47Nominal mass flow rate on the condenser side [kg/s]
MassFlowRatem2_flow_nominal0.47Nominal mass flow rate on the evaporator side [kg/s]
MassFlowRateflowSource0.79Mass flow rate on the condenser side [kg/s]
MassFlowRateflowLoad0.47Mass flow rate on the evaporator side [kg/s]

Modelica definition

model ScrollWaterToWater_Dynamic "Test model for scroll water to water heat pump" extends Modelica.Icons.Example; package Medium1 = Buildings.Media.Water "Medium model"; package Medium2 = Buildings.Media.Water "Medium model"; parameter Modelica.SIunits.MassFlowRate m1_flow_nominal = 0.47 "Nominal mass flow rate on the condenser side"; parameter Modelica.SIunits.MassFlowRate m2_flow_nominal = 0.47 "Nominal mass flow rate on the evaporator side"; parameter Modelica.SIunits.MassFlowRate flowSource = 0.79 "Mass flow rate on the condenser side"; parameter Modelica.SIunits.MassFlowRate flowLoad = 0.47 "Mass flow rate on the evaporator side"; Buildings.Fluid.Sources.Boundary_pT sin2( redeclare package Medium = Medium2, nPorts=2) "Source side sink"; Buildings.Fluid.Sources.Boundary_pT sin1( redeclare package Medium = Medium1, nPorts=2) "Load side sink"; Modelica.Fluid.Sources.MassFlowSource_T loa( redeclare package Medium = Medium1, m_flow=flowLoad, use_m_flow_in=true, use_T_in=true, nPorts=1) "Load side flow source"; Modelica.Fluid.Sources.MassFlowSource_T sou( redeclare package Medium = Medium2, m_flow=flowSource, use_m_flow_in=true, use_T_in=true, nPorts=1) "Source side flow source"; Modelica.Blocks.Sources.RealExpression mLoa(y=flowLoad) "Load side mass flwo rate"; Modelica.Blocks.Sources.RealExpression mSou(y=flowSource) "Source side mass flow rate"; Buildings.Fluid.HeatPumps.ScrollWaterToWater heaPum( redeclare package Medium1 = Medium1, redeclare package Medium2 = Medium2, m1_flow_nominal=m1_flow_nominal, m2_flow_nominal=m2_flow_nominal, dp1_nominal=1000, dp2_nominal=1000, redeclare package ref = Buildings.Media.Refrigerants.R410A, enable_variable_speed=false, datHeaPum( etaEle=0.696, PLos=500, dTSup=10, UACon=4400, UAEva=4400, volRat=2, V_flow_nominal=0.003, leaCoe=0.01), energyDynamics=Modelica.Fluid.Types.Dynamics.SteadyState, enable_temperature_protection=false) "Scroll water to water heat pump"; Buildings.Fluid.HeatPumps.ScrollWaterToWater heaPum1( redeclare package Medium1 = Medium1, redeclare package Medium2 = Medium2, m1_flow_nominal=m1_flow_nominal, m2_flow_nominal=m2_flow_nominal, dp1_nominal=1000, dp2_nominal=1000, redeclare package ref = Buildings.Media.Refrigerants.R410A, energyDynamics=Modelica.Fluid.Types.Dynamics.SteadyStateInitial, tau1=15, tau2=15, enable_variable_speed=false, datHeaPum( etaEle=0.696, PLos=500, dTSup=10, UACon=4400, UAEva=4400, volRat=2, V_flow_nominal=0.003, leaCoe=0.01), enable_temperature_protection=false) "Scroll water to water heat pump with transient effects"; Modelica.Blocks.Sources.Pulse N(width=60, period=500) "Heat pump control signal"; Modelica.Fluid.Sources.MassFlowSource_T loa1( redeclare package Medium = Medium1, m_flow=flowLoad, use_m_flow_in=true, use_T_in=true, nPorts=1) "Load side flow source"; Modelica.Fluid.Sources.MassFlowSource_T sou1( redeclare package Medium = Medium2, m_flow=flowSource, use_m_flow_in=true, use_T_in=true, nPorts=1) "Source side flow source"; Modelica.Blocks.Sources.Constant TLoa(k=285.15) "Load side fluid temperature"; Modelica.Blocks.Sources.Constant TSou(k=283.15) "Source side fluid temperature"; Modelica.Blocks.Sources.RealExpression appCap(y=heaPum1.port_a1.m_flow*( heaPum1.port_b1.h_outflow - loa1.ports[1].h_outflow)) "Apparent capacity of the heat pump"; Modelica.Blocks.Math.RealToInteger realToInteger; equation connect(mSou.y, sou.m_flow_in); connect(heaPum.port_a2, sou.ports[1]); connect(heaPum.port_b1, sin1.ports[1]); connect(heaPum.port_a1, loa.ports[1]); connect(heaPum.port_b2, sin2.ports[1]); connect(sin2.ports[2], heaPum1.port_b2); connect(mLoa.y, loa.m_flow_in); connect(mLoa.y, loa1.m_flow_in); connect(sou1.ports[1], heaPum1.port_a2); connect(mSou.y, sou1.m_flow_in); connect(TSou.y, sou1.T_in); connect(sou.T_in, sou1.T_in); connect(TLoa.y, loa1.T_in); connect(TLoa.y, loa.T_in); connect(loa1.ports[1], heaPum1.port_a1); connect(heaPum1.port_b1, sin1.ports[2]); connect(N.y, realToInteger.u); connect(realToInteger.y, heaPum.stage); connect(realToInteger.y, heaPum1.stage); end ScrollWaterToWater_Dynamic;

Buildings.Fluid.HeatPumps.Validation.ScrollWaterToWater_ScalingFactor Buildings.Fluid.HeatPumps.Validation.ScrollWaterToWater_ScalingFactor

Test model for scroll water to water heat pump

Buildings.Fluid.HeatPumps.Validation.ScrollWaterToWater_ScalingFactor

Information

Model that demonstrates the use of the Buildings.Fluid.HeatPumps.ScrollWaterToWater heat pump model. This validation case also tests the stage input to the heat pump models.

With constant inlet source and load water temperatures, the heat pumps cycle on and off. The capacity of the scaled heat pump model is compared to the capacity of the non-scaled heat pump model.

Extends from Modelica.Icons.Example (Icon for runnable examples).

Parameters

TypeNameDefaultDescription
MassFlowRatem1_flow_nominal0.47Nominal mass flow rate on the condenser side [kg/s]
MassFlowRatem2_flow_nominal0.47Nominal mass flow rate on the evaporator side [kg/s]
MassFlowRateflowSource0.79Mass flow rate on the condenser side [kg/s]
MassFlowRateflowLoad0.47Mass flow rate on the evaporator side [kg/s]
Realscaling_factor2.41Scaling factor for heat pump capacity

Modelica definition

model ScrollWaterToWater_ScalingFactor "Test model for scroll water to water heat pump" extends Modelica.Icons.Example; package Medium1 = Buildings.Media.Water "Medium model"; package Medium2 = Buildings.Media.Water "Medium model"; parameter Modelica.SIunits.MassFlowRate m1_flow_nominal = 0.47 "Nominal mass flow rate on the condenser side"; parameter Modelica.SIunits.MassFlowRate m2_flow_nominal = 0.47 "Nominal mass flow rate on the evaporator side"; parameter Modelica.SIunits.MassFlowRate flowSource = 0.79 "Mass flow rate on the condenser side"; parameter Modelica.SIunits.MassFlowRate flowLoad = 0.47 "Mass flow rate on the evaporator side"; parameter Real scaling_factor = 2.41 "Scaling factor for heat pump capacity"; Buildings.Fluid.Sources.Boundary_pT sin2( redeclare package Medium = Medium2, nPorts=2) "Source side sink"; Buildings.Fluid.Sources.Boundary_pT sin1( redeclare package Medium = Medium1, nPorts=2) "Load side sink"; Modelica.Fluid.Sources.MassFlowSource_T loa( redeclare package Medium = Medium1, m_flow=flowLoad, use_m_flow_in=true, use_T_in=true, nPorts=1) "Load side flow source"; Modelica.Fluid.Sources.MassFlowSource_T sou( redeclare package Medium = Medium2, m_flow=flowSource, use_m_flow_in=true, use_T_in=true, nPorts=1) "Source side flow source"; Buildings.Fluid.HeatPumps.ScrollWaterToWater heaPum( redeclare package Medium1 = Medium1, redeclare package Medium2 = Medium2, m1_flow_nominal=m1_flow_nominal, m2_flow_nominal=m2_flow_nominal, dp1_nominal=1000, dp2_nominal=1000, redeclare package ref = Buildings.Media.Refrigerants.R410A, enable_variable_speed=false, datHeaPum( etaEle=0.696, PLos=500, dTSup=10, UACon=4400, UAEva=4400, volRat=2, V_flow_nominal=0.003, leaCoe=0.01), energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, enable_temperature_protection=false) "Scroll water to water heat pump"; Buildings.Fluid.HeatPumps.ScrollWaterToWater heaPum1( redeclare package Medium1 = Medium1, redeclare package Medium2 = Medium2, dp1_nominal=1000, dp2_nominal=1000, redeclare package ref = Buildings.Media.Refrigerants.R410A, enable_variable_speed=false, m1_flow_nominal=m1_flow_nominal*scaling_factor, m2_flow_nominal=m2_flow_nominal*scaling_factor, scaling_factor=scaling_factor, datHeaPum( etaEle=0.696, PLos=500, dTSup=10, UACon=4400, UAEva=4400, volRat=2, V_flow_nominal=0.003, leaCoe=0.01), energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, enable_temperature_protection=false) "Scroll water to water heat pump with transient effects"; Modelica.Blocks.Sources.Pulse N(width=60, period=500) "Heat pump control signal"; Modelica.Fluid.Sources.MassFlowSource_T loa1( redeclare package Medium = Medium1, m_flow=flowLoad, use_m_flow_in=true, use_T_in=true, nPorts=1) "Load side flow source"; Modelica.Fluid.Sources.MassFlowSource_T sou1( redeclare package Medium = Medium2, m_flow=flowSource, use_m_flow_in=true, use_T_in=true, nPorts=1) "Source side flow source"; Modelica.Blocks.Sources.Constant TLoa(k=285.15) "Load side fluid temperature"; Modelica.Blocks.Sources.Constant TSou(k=283.15) "Source side fluid temperature"; Modelica.Blocks.Math.RealToInteger realToInteger; Modelica.Blocks.Sources.RealExpression mSou(y=flowSource*scaling_factor) "Source side mass flow rate"; Modelica.Blocks.Sources.RealExpression mLoa(y=flowLoad*scaling_factor) "Load side mass flwo rate"; Modelica.Blocks.Sources.RealExpression mLoa1( y=flowLoad) "Load side mass flwo rate"; Modelica.Blocks.Sources.RealExpression mSou1( y=flowSource) "Source side mass flow rate"; Modelica.Blocks.Sources.RealExpression capErr(y=(heaPum1.QCon_flow - scaling_factor*heaPum.QCon_flow)) "Apparent capacity of the heat pump"; equation connect(heaPum.port_a2, sou.ports[1]); connect(heaPum.port_b1, sin1.ports[1]); connect(heaPum.port_a1, loa.ports[1]); connect(heaPum.port_b2, sin2.ports[1]); connect(sin2.ports[2], heaPum1.port_b2); connect(sou1.ports[1], heaPum1.port_a2); connect(TSou.y, sou1.T_in); connect(sou.T_in, sou1.T_in); connect(TLoa.y, loa1.T_in); connect(TLoa.y, loa.T_in); connect(loa1.ports[1], heaPum1.port_a1); connect(heaPum1.port_b1, sin1.ports[2]); connect(N.y, realToInteger.u); connect(realToInteger.y, heaPum.stage); connect(realToInteger.y, heaPum1.stage); connect(mLoa.y, loa1.m_flow_in); connect(mSou.y, sou1.m_flow_in); connect(mSou1.y, sou.m_flow_in); connect(mLoa1.y, loa.m_flow_in); end ScrollWaterToWater_ScalingFactor;

Buildings.Fluid.HeatPumps.Validation.ScrollWaterToWater_Static Buildings.Fluid.HeatPumps.Validation.ScrollWaterToWater_Static

Test model for static scroll water to water heat pump

Buildings.Fluid.HeatPumps.Validation.ScrollWaterToWater_Static

Information

Model that demonstrates the use of the Buildings.Fluid.HeatPumps.ScrollWaterToWater heat pump model.

The heat pump power, condenser heat transfer rate and evaporator heat transfer rate are calculated for given water temperatures and flow rates on the evaporator and condenser sides.

Extends from Modelica.Icons.Example (Icon for runnable examples).

Parameters

TypeNameDefaultDescription
MassFlowRatem1_flow_nominal0.47Nominal mass flow rate on the condenser side [kg/s]
MassFlowRatem2_flow_nominal0.47Nominal mass flow rate on the evaporator side [kg/s]
MassFlowRateflowSource0.79Mass flow rate on the condenser side [kg/s]
MassFlowRateflowLoad0.47Mass flow rate on the evaporator side [kg/s]

Modelica definition

model ScrollWaterToWater_Static "Test model for static scroll water to water heat pump" extends Modelica.Icons.Example; package Medium1 = Buildings.Media.Water "Medium model"; package Medium2 = Buildings.Media.Water "Medium model"; parameter Modelica.SIunits.MassFlowRate m1_flow_nominal = 0.47 "Nominal mass flow rate on the condenser side"; parameter Modelica.SIunits.MassFlowRate m2_flow_nominal = 0.47 "Nominal mass flow rate on the evaporator side"; parameter Modelica.SIunits.MassFlowRate flowSource = 0.79 "Mass flow rate on the condenser side"; parameter Modelica.SIunits.MassFlowRate flowLoad = 0.47 "Mass flow rate on the evaporator side"; Buildings.Fluid.Sources.Boundary_pT sin2( redeclare package Medium = Medium2, nPorts=1) "Source side sink"; Buildings.Fluid.Sources.Boundary_pT sin1( redeclare package Medium = Medium1, nPorts=1) "Load side sink"; Modelica.Blocks.Sources.Constant isOn(k=1) "Heat pump control signal"; Modelica.Fluid.Sources.MassFlowSource_T loa( redeclare package Medium = Medium1, m_flow=flowLoad, use_m_flow_in=true, use_T_in=true, nPorts=1) "Load side flow source"; Modelica.Fluid.Sources.MassFlowSource_T sou( redeclare package Medium = Medium2, m_flow=flowSource, use_m_flow_in=true, use_T_in=true, nPorts=1) "Source side flow source"; Modelica.Blocks.Sources.RealExpression mLoa(y=flowLoad) "Load side mass flwo rate"; Modelica.Blocks.Sources.RealExpression mSou(y=flowSource) "Source side mass flow rate"; Buildings.Fluid.HeatPumps.ScrollWaterToWater heaPum( redeclare package Medium1 = Medium1, redeclare package Medium2 = Medium2, m1_flow_nominal=m1_flow_nominal, m2_flow_nominal=m2_flow_nominal, dp1_nominal=1000, dp2_nominal=1000, redeclare package ref = Buildings.Media.Refrigerants.R410A, show_T=true, enable_variable_speed=true, datHeaPum( etaEle=0.696, PLos=500, dTSup=10, UACon=4400, UAEva=4400, volRat=2, V_flow_nominal=0.003, leaCoe=0.01), energyDynamics=Modelica.Fluid.Types.Dynamics.SteadyState, enable_temperature_protection=false) "Scroll water to water heat pump"; Modelica.Blocks.Sources.Ramp yLoa( height=20, duration=750, offset=293.15, startTime=250) "Load side fluid temperature"; Modelica.Blocks.Sources.Ramp ySou( height=20, duration=750, offset=283.15, startTime=0) "Source side fluid temperature"; equation connect(mSou.y, sou.m_flow_in); connect(mLoa.y, loa.m_flow_in); connect(yLoa.y, loa.T_in); connect(ySou.y, sou.T_in); connect(isOn.y,heaPum.y); connect(sin2.ports[1], heaPum.port_b2); connect(sou.ports[1], heaPum.port_a2); connect(sin1.ports[1], heaPum.port_b1); connect(loa.ports[1], heaPum.port_a1); end ScrollWaterToWater_Static;

Buildings.Fluid.HeatPumps.Validation.ScrollWaterToWater_TemperatureProtection Buildings.Fluid.HeatPumps.Validation.ScrollWaterToWater_TemperatureProtection

Test model for temperature protection of scroll water to water heat pump

Buildings.Fluid.HeatPumps.Validation.ScrollWaterToWater_TemperatureProtection

Information

Model that demonstrates the temperature protection implementation of the Buildings.Fluid.HeatPumps.ScrollWaterToWater heat pump model.

The heat pump is disabled when the evaporator and condenser temperature requirements are not satisfied.

Extends from Modelica.Icons.Example (Icon for runnable examples).

Parameters

TypeNameDefaultDescription
MassFlowRatem1_flow_nominal0.47Nominal mass flow rate on the condenser side [kg/s]
MassFlowRatem2_flow_nominal0.47Nominal mass flow rate on the evaporator side [kg/s]
MassFlowRateflowSource0.79Mass flow rate on the condenser side [kg/s]
MassFlowRateflowLoad0.47Mass flow rate on the evaporator side [kg/s]

Modelica definition

model ScrollWaterToWater_TemperatureProtection "Test model for temperature protection of scroll water to water heat pump" extends Modelica.Icons.Example; package Medium1 = Buildings.Media.Water "Medium model"; package Medium2 = Buildings.Media.Water "Medium model"; parameter Modelica.SIunits.MassFlowRate m1_flow_nominal = 0.47 "Nominal mass flow rate on the condenser side"; parameter Modelica.SIunits.MassFlowRate m2_flow_nominal = 0.47 "Nominal mass flow rate on the evaporator side"; parameter Modelica.SIunits.MassFlowRate flowSource = 0.79 "Mass flow rate on the condenser side"; parameter Modelica.SIunits.MassFlowRate flowLoad = 0.47 "Mass flow rate on the evaporator side"; Buildings.Fluid.Sources.Boundary_pT sin2( redeclare package Medium = Medium2, nPorts=1) "Source side sink"; Buildings.Fluid.Sources.Boundary_pT sin1( redeclare package Medium = Medium1, nPorts=1) "Load side sink"; Modelica.Blocks.Sources.Constant isOn(k=1) "Heat pump control signal"; Modelica.Fluid.Sources.MassFlowSource_T loa( redeclare package Medium = Medium1, m_flow=flowLoad, use_m_flow_in=true, use_T_in=true, nPorts=1) "Load side flow source"; Modelica.Fluid.Sources.MassFlowSource_T sou( redeclare package Medium = Medium2, m_flow=flowSource, use_m_flow_in=true, use_T_in=true, nPorts=1) "Source side flow source"; Modelica.Blocks.Sources.RealExpression mLoa(y=flowLoad) "Load side mass flwo rate"; Modelica.Blocks.Sources.RealExpression mSou(y=flowSource) "Source side mass flow rate"; Buildings.Fluid.HeatPumps.ScrollWaterToWater heaPum( redeclare package Medium1 = Medium1, redeclare package Medium2 = Medium2, m1_flow_nominal=m1_flow_nominal, m2_flow_nominal=m2_flow_nominal, dp1_nominal=1000, dp2_nominal=1000, redeclare package ref = Buildings.Media.Refrigerants.R410A, show_T=true, enable_variable_speed=true, datHeaPum( etaEle=0.696, PLos=500, dTSup=10, UACon=4400, UAEva=4400, volRat=2, V_flow_nominal=0.003, leaCoe=0.01), energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, TConMax=273.15 + 60, enable_temperature_protection=true) "Scroll water to water heat pump"; Modelica.Blocks.Sources.Sine yLoa( startTime=250, freqHz=1/600, amplitude=30, offset=313.15) "Load side fluid temperature"; Modelica.Blocks.Sources.Cosine ySou( startTime=0, amplitude=20, offset=293.15, freqHz=1/400) "Source side fluid temperature"; equation connect(mSou.y, sou.m_flow_in); connect(mLoa.y, loa.m_flow_in); connect(yLoa.y, loa.T_in); connect(ySou.y, sou.T_in); connect(isOn.y,heaPum.y); connect(sin2.ports[1], heaPum.port_b2); connect(sou.ports[1], heaPum.port_a2); connect(sin1.ports[1], heaPum.port_b1); connect(loa.ports[1], heaPum.port_a1); end ScrollWaterToWater_TemperatureProtection;

Buildings.Fluid.HeatPumps.Validation.ScrollWaterToWater_VariableSpeed Buildings.Fluid.HeatPumps.Validation.ScrollWaterToWater_VariableSpeed

Test model for scroll water to water heat pump

Buildings.Fluid.HeatPumps.Validation.ScrollWaterToWater_VariableSpeed

Information

Model that demonstrates the use of the Buildings.Fluid.HeatPumps.ScrollWaterToWater heat pump model.

With constant inlet source and load water temperatures, the compressor frequency is increased linearly to its full load value.

Extends from Modelica.Icons.Example (Icon for runnable examples).

Parameters

TypeNameDefaultDescription
MassFlowRatem1_flow_nominal0.47Nominal mass flow rate on the condenser side [kg/s]
MassFlowRatem2_flow_nominal0.47Nominal mass flow rate on the evaporator side [kg/s]
MassFlowRateflowSource0.79Mass flow rate on the condenser side [kg/s]
MassFlowRateflowLoad0.47Mass flow rate on the evaporator side [kg/s]

Modelica definition

model ScrollWaterToWater_VariableSpeed "Test model for scroll water to water heat pump" extends Modelica.Icons.Example; package Medium1 = Buildings.Media.Water "Medium model"; package Medium2 = Buildings.Media.Water "Medium model"; parameter Modelica.SIunits.MassFlowRate m1_flow_nominal = 0.47 "Nominal mass flow rate on the condenser side"; parameter Modelica.SIunits.MassFlowRate m2_flow_nominal = 0.47 "Nominal mass flow rate on the evaporator side"; parameter Modelica.SIunits.MassFlowRate flowSource = 0.79 "Mass flow rate on the condenser side"; parameter Modelica.SIunits.MassFlowRate flowLoad = 0.47 "Mass flow rate on the evaporator side"; Buildings.Fluid.Sources.Boundary_pT sin2( redeclare package Medium = Medium2, nPorts=1) "Source side sink"; Buildings.Fluid.Sources.Boundary_pT sin1( redeclare package Medium = Medium1, nPorts=1) "Load side sink"; Modelica.Fluid.Sources.MassFlowSource_T loa( redeclare package Medium = Medium1, m_flow=flowLoad, use_m_flow_in=true, use_T_in=true, nPorts=1) "Load side flow source"; Modelica.Fluid.Sources.MassFlowSource_T sou( redeclare package Medium = Medium2, m_flow=flowSource, use_m_flow_in=true, use_T_in=true, nPorts=1) "Source side flow source"; Modelica.Blocks.Sources.RealExpression mLoa(y=flowLoad) "Load side mass flow rate"; Modelica.Blocks.Sources.RealExpression mSou(y=flowSource) "Source side mass flwo rate"; Buildings.Fluid.HeatPumps.ScrollWaterToWater heaPum( redeclare package Medium1 = Medium1, redeclare package Medium2 = Medium2, m1_flow_nominal=m1_flow_nominal, m2_flow_nominal=m2_flow_nominal, dp1_nominal=1000, dp2_nominal=1000, redeclare package ref = Buildings.Media.Refrigerants.R410A, show_T=true, datHeaPum( etaEle=0.696, PLos=500, dTSup=10, UACon=4400, UAEva=4400, volRat=2, V_flow_nominal=0.003, leaCoe=0.01), energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, enable_temperature_protection=false) "Scroll water to water heat pump"; Modelica.Blocks.Sources.Ramp N( duration=800, startTime=100, height=1.0, offset=0.0) "Heat pump control signal"; Modelica.Blocks.Sources.Constant TLoa(k=285.15) "Load side fluid temperature"; Modelica.Blocks.Sources.Constant TSou(k=283.15) "Source side fluid temperature"; equation connect(mSou.y, sou.m_flow_in); connect(mLoa.y, loa.m_flow_in); connect(N.y,heaPum.y); connect(TSou.y, sou.T_in); connect(TLoa.y, loa.T_in); connect(sin2.ports[1], heaPum.port_b2); connect(loa.ports[1], heaPum.port_a1); connect(heaPum.port_b1, sin1.ports[1]); connect(heaPum.port_a2, sou.ports[1]); end ScrollWaterToWater_VariableSpeed;