Buildings.Fluid.HeatPumps.ModularReversible.Validation

Collection of validation models

Information

This package contains validation models for the classes in Buildings.Fluid.HeatPumps.ModularReversible.

Note that most validation models contain simple input data which may not be realistic, but for which the correct output can be obtained through an analytic solution. The examples plot various outputs, which have been verified against these solutions. These model outputs are stored as reference data and used for 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.ModularReversible.Validation.ConstantCarnotEffectiveness ConstantCarnotEffectiveness  
Buildings.Fluid.HeatPumps.ModularReversible.Validation.TableData2D TableData2D  
Buildings.Fluid.HeatPumps.ModularReversible.Validation.TableData2DLoadDepSHC TableData2DLoadDepSHC  
Buildings.Fluid.HeatPumps.ModularReversible.Validation.Comparative Comparative Package for comparative model validation
Buildings.Fluid.HeatPumps.ModularReversible.Validation.BaseClasses BaseClasses Partial validation models

Buildings.Fluid.HeatPumps.ModularReversible.Validation.ConstantCarnotEffectiveness Buildings.Fluid.HeatPumps.ModularReversible.Validation.ConstantCarnotEffectiveness


Buildings.Fluid.HeatPumps.ModularReversible.Validation.ConstantCarnotEffectiveness

Information

This validation case uses a constant Carnot effectiveness to model the efficiency of the heat pump.

The approach was calibrated as a comparison to table-based data in the conference paper for the heat pump model: https://doi.org/10.3384/ecp21181561

Extends from Modelica.Icons.Example (Icon for runnable examples), Buildings.Fluid.HeatPumps.ModularReversible.Validation.BaseClasses.PartialValidation (Validation base case for the reversible heat pump model.).

Parameters

TypeNameDefaultDescription
replaceable package MediumSinWaterMedium of sink side
replaceable package MediumSouWaterMedium of source side
RealetaCarnot_nominal0.4318Calibrated constant Carnot effectiveness
PowerPEle_nominal1884.218212Calibrated nominal electrical power consumption [W]
MassFlowRatemCon_flow_nominal0.407396Calibrated condenser nominal mass flow rate [kg/s]
VolumeVCon0.0015972Calibrated condenser volume [m3]
FrequencyrefIneFreConst13.2e-3Calibrated cut off frequency for inertia of refrigerant cycle [Hz]

Connectors

TypeNameDescription
output RealOutputTConOutMeaMeasured condenser outlet [K]
output RealOutputTEvaOutMeaMeasured evaporator outlet [K]
output RealOutputPEleMeaMeasured electrical power consumption [W]
output RealOutputPEleSimSimulated electrical power consumption [W]
output RealOutputTConOutSimSimulated condenser outlet [K]
output RealOutputTEvaOutSimSimulated evaporator outlet [K]

Modelica definition

model ConstantCarnotEffectiveness extends Modelica.Icons.Example; extends Buildings.Fluid.HeatPumps.ModularReversible.Validation.BaseClasses.PartialValidation ( heaPum( QHea_flow_nominal=etaCarnot_nominal*PEle_nominal*heaPum.TConHea_nominal/(heaPum.TConHea_nominal - heaPum.TEvaHea_nominal), mCon_flow_nominal=mCon_flow_nominal, tauCon=VCon*heaPum.rhoCon/mCon_flow_nominal, redeclare model RefrigerantCycleInertia = Buildings.Fluid.HeatPumps.ModularReversible.RefrigerantCycle.Inertias.VariableOrder ( refIneFreConst=refIneFreConst, nthOrd=2, initType=Modelica.Blocks.Types.Init.InitialState), redeclare model RefrigerantCycleHeatPumpHeating = Buildings.Fluid.HeatPumps.ModularReversible.RefrigerantCycle.ConstantCarnotEffectiveness (TAppCon_nominal=0, TAppEva_nominal=0, etaCarnot_nominal=etaCarnot_nominal))); parameter Real etaCarnot_nominal=0.4318 "Calibrated constant Carnot effectiveness"; parameter Modelica.Units.SI.Power PEle_nominal=1884.218212 "Calibrated nominal electrical power consumption"; parameter Modelica.Units.SI.MassFlowRate mCon_flow_nominal=0.407396 "Calibrated condenser nominal mass flow rate"; parameter Modelica.Units.SI.Volume VCon=0.0015972 "Calibrated condenser volume"; parameter Modelica.Units.SI.Frequency refIneFreConst=13.2e-3 "Calibrated cut off frequency for inertia of refrigerant cycle"; end ConstantCarnotEffectiveness;

Buildings.Fluid.HeatPumps.ModularReversible.Validation.TableData2D Buildings.Fluid.HeatPumps.ModularReversible.Validation.TableData2D


Buildings.Fluid.HeatPumps.ModularReversible.Validation.TableData2D

Information

This validation case uses table-based data for the heat pump.

The approach was calibrated as a comparison to constant Carnot effectiveness approach in the conference paper for the heat pump model: https://doi.org/10.3384/ecp21181561

Extends from Modelica.Icons.Example (Icon for runnable examples), Buildings.Fluid.HeatPumps.ModularReversible.Validation.BaseClasses.PartialValidation (Validation base case for the reversible heat pump model.).

Parameters

TypeNameDefaultDescription
replaceable package MediumSinWaterMedium of sink side
replaceable package MediumSouWaterMedium of source side
MassFlowRatemCon_flow_nominal0.404317Condenser nominal mass flow rate [kg/s]
VolumeVCon0.004473Condenser volume [m3]
FrequencyrefIneFreConst0.011848Cut off frequency for inertia of refrigerant cycle [Hz]

Connectors

TypeNameDescription
output RealOutputTConOutMeaMeasured condenser outlet [K]
output RealOutputTEvaOutMeaMeasured evaporator outlet [K]
output RealOutputPEleMeaMeasured electrical power consumption [W]
output RealOutputPEleSimSimulated electrical power consumption [W]
output RealOutputTConOutSimSimulated condenser outlet [K]
output RealOutputTEvaOutSimSimulated evaporator outlet [K]

Modelica definition

model TableData2D extends Modelica.Icons.Example; extends Buildings.Fluid.HeatPumps.ModularReversible.Validation.BaseClasses.PartialValidation ( heaPum( QHea_flow_nominal=heaPum.refCyc.refCycHeaPumHea.QHeaNoSca_flow_nominal, mCon_flow_nominal=mCon_flow_nominal, tauCon=VCon*heaPum.rhoCon/mCon_flow_nominal, redeclare model RefrigerantCycleInertia = Buildings.Fluid.HeatPumps.ModularReversible.RefrigerantCycle.Inertias.VariableOrder ( refIneFreConst=refIneFreConst, nthOrd=2, initType=Modelica.Blocks.Types.Init.InitialState), redeclare model RefrigerantCycleHeatPumpHeating = Buildings.Fluid.HeatPumps.ModularReversible.RefrigerantCycle.TableData2D ( datTab= Buildings.Fluid.HeatPumps.ModularReversible.Data.TableData2D.GenericHeatPump( tabPEle=[0,273.15,283.15; 308.15,1300,1500; 328.15,1900,2300], mCon_flow_nominal=6100/5/4184, mEva_flow_nominal=4800/5/4184, dpCon_nominal=0, dpEva_nominal=0, devIde="Vaillaint_VWL101", use_TEvaOutForTab=false, use_TConOutForTab=true, tabQCon_flow=[0,273.15,283.15; 308.15,6100,8400; 328.15,5700,7600], tabUppBou=[-40,70; 40,70])))); parameter Modelica.Units.SI.MassFlowRate mCon_flow_nominal=0.404317 "Condenser nominal mass flow rate"; parameter Modelica.Units.SI.Volume VCon=0.004473 "Condenser volume"; parameter Modelica.Units.SI.Frequency refIneFreConst=0.011848 "Cut off frequency for inertia of refrigerant cycle"; end TableData2D;

Buildings.Fluid.HeatPumps.ModularReversible.Validation.TableData2DLoadDepSHC Buildings.Fluid.HeatPumps.ModularReversible.Validation.TableData2DLoadDepSHC


Buildings.Fluid.HeatPumps.ModularReversible.Validation.TableData2DLoadDepSHC

Information

This model validates the hydronics and built-in control logic of Buildings.Fluid.HeatPumps.ModularReversible.TableData2DLoadDepSHC.

The model represents a three-module system where the HW and CHW isolation valves are modeled using an equivalent actuator. The actuator model represents the parallel network of the modules' condenser or evaporator barrels in series with the HW or CHW isolation valves. It is parameterized with the flow characteristics calculated by the heat pump model, and controlled by the output variables provided by this model. The heat pump operating mode switches between simultaneous heating and cooling, heating only, and cooling only. The on/off command starts as true and is switched to false at the end.

While the heat pump component is subjected to the design HW and CHW differential pressures and return temperatures, the supply temperature setpoints vary, creating a varying load. The validation then consists in verifying that the modules are effectively staged in various modes to adapt to the load. Additionally, it confirms that the isolation valve parameterization and controls result in HW and CHW flow rates that vary linearly with the number of enabled modules on each side.

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

Parameters

TypeNameDefaultDescription
replaceable package MediumBuildings.Media.WaterHW or CHW medium
Genericdatdat(PLRHeaSup={1}, PLRCooSup...Performance data
Nominal condition
TemperatureTHwSup_nominal323.15HW supply temperature [K]
TemperatureTHwRet_nominal315.15HW return temperature [K]
TemperatureTChwSup_nominal280.15CHW supply temperature [K]
TemperatureTChwRet_nominal285.15CHW return temperature [K]
MassFlowRatemHw_flow_nominalQHea_flow_nominal/(THwSup_no...HW mass flow rate [kg/s]
MassFlowRatemChw_flow_nominalQCoo_flow_nominal/(TChwSup_n...CHW mass flow rate [kg/s]
Nominal condition - Heating mode
TemperatureTAmbHea_nominal268.15OA temperature [K]
HeatFlowRateQHea_flow_nominal58E3Heating heat flow rate - Heating mode [W]
HeatFlowRateQHeaShc_flow_nominal85E3Heating heat flow rate - SHC mode [W]
Nominal condition - Cooling mode
TemperatureTAmbCoo_nominal308.15Ambient side fluid temperature — Entering or leaving depending on use_TAmbOutForTab [K]
HeatFlowRateQCoo_flow_nominal-73E3Cooling heat flow rate - Cooling mode [W]
HeatFlowRateQCooShc_flow_nominal-65E3Cooling heat flow rate - SHC mode [W]
Dynamics
Conservation equations
DynamicsenergyDynamicsModelica.Fluid.Types.Dynamic...Type of energy balance: dynamic (3 initialization options) or steady state

Connectors

TypeNameDescription
replaceable package MediumHW or CHW medium
BusweaBus 

Modelica definition

model TableData2DLoadDepSHC extends Modelica.Icons.Example; replaceable package Medium=Buildings.Media.Water constrainedby Modelica.Media.Interfaces.PartialMedium "HW or CHW medium"; parameter Modelica.Fluid.Types.Dynamics energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial "Type of energy balance: dynamic (3 initialization options) or steady state"; parameter Modelica.Units.SI.Temperature THwSup_nominal=323.15 "HW supply temperature"; parameter Modelica.Units.SI.Temperature THwRet_nominal=315.15 "HW return temperature"; parameter Modelica.Units.SI.Temperature TChwSup_nominal=280.15 "CHW supply temperature"; parameter Modelica.Units.SI.Temperature TChwRet_nominal=285.15 "CHW return temperature"; parameter Modelica.Units.SI.Temperature TAmbHea_nominal=268.15 "OA temperature"; parameter Modelica.Units.SI.HeatFlowRate QHea_flow_nominal = 58E3 "Heating heat flow rate - Heating mode"; parameter Modelica.Units.SI.HeatFlowRate QHeaShc_flow_nominal = 85E3 "Heating heat flow rate - SHC mode"; parameter Modelica.Units.SI.Temperature TAmbCoo_nominal=308.15 "Ambient side fluid temperature — Entering or leaving depending on use_TAmbOutForTab"; parameter Modelica.Units.SI.HeatFlowRate QCoo_flow_nominal = -73E3 "Cooling heat flow rate - Cooling mode"; parameter Modelica.Units.SI.HeatFlowRate QCooShc_flow_nominal = -65E3 "Cooling heat flow rate - SHC mode"; parameter Modelica.Units.SI.MassFlowRate mHw_flow_nominal= QHea_flow_nominal / (THwSup_nominal - THwRet_nominal) / Buildings.Media.Water.cp_const "HW mass flow rate"; parameter Modelica.Units.SI.MassFlowRate mChw_flow_nominal= QCoo_flow_nominal / (TChwSup_nominal - TChwRet_nominal) / Buildings.Media.Water.cp_const "CHW mass flow rate"; Buildings.Controls.OBC.CDL.Reals.Sources.TimeTable TChiWatSet( table=[0,0; 10,0; 80,0.2*(TChwEnt.k - TChwSup_nominal); 95,0.2*(TChwEnt.k - TChwSup_nominal)], offset={TChwSup_nominal}, timeScale=20, y(each final unit="K", each displayUnit="degC")) "CHW supply or return temperature setpoint"; Buildings.Controls.OBC.CDL.Reals.Sources.Sin THeaWatSet( amplitude=THwEnt.k - THwSup_nominal, freqHz=1/3600, offset=THwSup_nominal, startTime=1000, y(final unit="K", displayUnit="degC")) "HW supply or return temperature setpoint"; Buildings.Controls.OBC.CDL.Reals.Sources.Constant THwEnt(k=THwSup_nominal + (THwRet_nominal - THwSup_nominal)*QHeaShc_flow_nominal/QHea_flow_nominal, y(final unit="K", displayUnit="degC")) "Condenser entering HW temperature"; Buildings.Controls.OBC.CDL.Reals.Sources.Constant TChwEnt(k=TChwSup_nominal + (TChwRet_nominal - TChwSup_nominal)* QCooShc_flow_nominal /QCoo_flow_nominal, y(final unit="K", displayUnit="degC")) "Evaporator entering CHW temperature"; Buildings.Controls.OBC.CDL.Reals.Sources.Constant TOut(k=15 + 273.15, y( final unit="K", displayUnit="degC")) "OA temperature"; Buildings.Controls.OBC.CDL.Reals.Min min1; Buildings.Controls.OBC.CDL.Reals.Sources.Constant THeaWatSupNom(k= THwSup_nominal, y(final unit="K", displayUnit="degC")) "Design HW supply temperature"; Buildings.Controls.OBC.CDL.Logical.Sources.TimeTable onCoo( table=[0,0; 500,1; 2400,0; 3600,1; 5000,0], period=5400) "Cooling on/off command"; Buildings.Controls.OBC.CDL.Logical.Sources.TimeTable onHea( table=[0,0; 500,1; 1200,0; 2400,1; 4800,0], period=5400) "Heating on/off command"; Buildings.Fluid.HeatPumps.ModularReversible.TableData2DLoadDepSHC hp( redeclare final package MediumCon=Medium, redeclare final package MediumEva=Medium, final energyDynamics=energyDynamics, nUni=3, use_preDro=false, dpHw_nominal=30000, dpChw_nominal=40000, final dat=dat, mCon_flow_nominal=mHw_flow_nominal, mEva_flow_nominal=mChw_flow_nominal, final QHea_flow_nominal=QHea_flow_nominal, QCoo_flow_nominal=QCoo_flow_nominal, final QHeaShc_flow_nominal=QHeaShc_flow_nominal, final QCooShc_flow_nominal=QCooShc_flow_nominal, final TConHea_nominal=THwSup_nominal, final TEvaHea_nominal=TAmbHea_nominal, TConCoo_nominal=TChwSup_nominal, TEvaCoo_nominal=TAmbCoo_nominal) "Multipipe heat pump"; BoundaryConditions.WeatherData.Bus weaBus; parameter Data.TableData2DLoadDepSHC.Generic dat( PLRHeaSup={1}, PLRCooSup={1}, PLRShcSup={1}, fileNameHea=Modelica.Utilities.Files.loadResource("modelica://Buildings/Resources/Data/Fluid/HeatPumps/ModularReversible/RefrigerantCycle/BaseClasses/Validation/AWHP_Heating.txt"), fileNameCoo=Modelica.Utilities.Files.loadResource("modelica://Buildings/Resources/Data/Fluid/HeatPumps/ModularReversible/RefrigerantCycle/BaseClasses/Validation/AWHP_Cooling.txt"), fileNameShc=Modelica.Utilities.Files.loadResource("modelica://Buildings/Resources/Data/Fluid/HeatPumps/ModularReversible/RefrigerantCycle/BaseClasses/Validation/AWHP_SHC.txt"), mCon_flow_nominal=1.7, mEva_flow_nominal=3.5, dpCon_nominal=30E3, dpEva_nominal=40E3, devIde="", use_TEvaOutForTab=true, use_TConOutForTab=true) "Performance data"; Sources.Boundary_pT hwIn( redeclare final package Medium = Medium, p=hwOut.p + hp.dpHw_nominal + hp.dpValIso_nominal, use_T_in=true, nPorts=1) "Boundary conditions of HW at HP inlet"; Sources.Boundary_pT hwOut( redeclare final package Medium = Medium, p=Buildings.Templates.Data.Defaults.pHeaWat_rel_nominal + 101325, nPorts=1) "Boundary conditions of HW at HP outlet"; Sources.Boundary_pT chwOut( redeclare final package Medium = Medium, p=Buildings.Templates.Data.Defaults.pChiWat_rel_nominal + 101325, nPorts=1) "Boundary conditions of CHW at HP outlet"; Sources.Boundary_pT chwIn( redeclare final package Medium = Medium, p=chwOut.p + hp.dpChw_nominal + hp.dpValIso_nominal, use_T_in=true, nPorts=1) "Boundary conditions of CHW at HP inlet"; Sensors.TemperatureTwoPort THwSup( redeclare final package Medium = Medium, final m_flow_nominal=hp.mCon_flow_nominal, initType=Modelica.Blocks.Types.Init.InitialOutput, T_start=THwSup_nominal) "HW supply temperature"; Sensors.TemperatureTwoPort THwRet( redeclare final package Medium = Medium, final m_flow_nominal=hp.mCon_flow_nominal, initType=Modelica.Blocks.Types.Init.InitialOutput, T_start=THwRet_nominal) "HW return temperature"; Sensors.TemperatureTwoPort TChwRet( redeclare final package Medium = Medium, final m_flow_nominal=hp.mEva_flow_nominal, initType=Modelica.Blocks.Types.Init.InitialOutput, T_start=TChwRet_nominal) "CHW return temperature"; Sensors.TemperatureTwoPort TChwSup( redeclare final package Medium = Medium, final m_flow_nominal=hp.mEva_flow_nominal, initType=Modelica.Blocks.Types.Init.InitialOutput, T_start=TChwSup_nominal) "CHW supply temperature"; Actuators.Valves.TwoWayTable valHwIso( redeclare final package Medium = Medium, final m_flow_nominal=hp.mCon_flow_nominal, flowCharacteristics=hp.chaValHwIso, dpValve_nominal=hp.dpValIso_nominal, strokeTime=10, init=Modelica.Blocks.Types.Init.InitialState, dpFixed_nominal=hp.dpHw_nominal) "Equivalent actuator for modules' condenser barrels and HW isolation valves"; Actuators.Valves.TwoWayTable valChwIso( redeclare final package Medium = Medium, final m_flow_nominal=hp.mEva_flow_nominal, dpValve_nominal=hp.dpValIso_nominal, init=Modelica.Blocks.Types.Init.InitialState, dpFixed_nominal=hp.dpChw_nominal, flowCharacteristics=hp.chaValChwIso) "Equivalent actuator for modules' evaporator barrels and CHW isolation valves"; Buildings.Controls.OBC.CDL.Integers.MultiSum sumNumUni(nin=3) "Total number of enabled modules"; Buildings.Controls.OBC.CDL.Utilities.Assert assMes(message= "Number of enabled modules exceeds number of modules") "Assert condition on number of enabled modules"; Buildings.Controls.OBC.CDL.Integers.LessEqualThreshold intLesEquThr(t=hp.nUni) "True if number of enabled modules lower or equal to number of modules"; equation connect(THeaWatSet.y, min1.u1); connect(THeaWatSupNom.y, min1.u2); connect(min1.y, hp.THwSet); connect(TChiWatSet.y[1], hp.TChwSet); connect(onHea.y[1], hp.onHea); connect(TOut.y, weaBus.TDryBul); connect(weaBus, hp.weaBus); connect(THwEnt.y, hwIn.T_in); connect(TChwEnt.y, chwIn.T_in); connect(THwSup.port_b, hwOut.ports[1]); connect(hwIn.ports[1], THwRet.port_a); connect(THwRet.port_b, hp.port_a1); connect(chwIn.ports[1], TChwRet.port_a); connect(TChwRet.port_b, hp.port_a2); connect(chwOut.ports[1], TChwSup.port_b); connect(hp.port_b1, valHwIso.port_a); connect(valHwIso.port_b, THwSup.port_a); connect(TChwSup.port_a, valChwIso.port_b); connect(hp.port_b2, valChwIso.port_a); connect(hp.yValHwIso, valHwIso.y); connect(hp.yValChwIso, valChwIso.y); connect(hp.nUniHea, sumNumUni.u[1]); connect(hp.nUniCoo, sumNumUni.u[2]); connect(hp.nUniShc, sumNumUni.u[3]); connect(sumNumUni.y, intLesEquThr.u); connect(intLesEquThr.y, assMes.u); connect(onCoo.y[1], hp.onCoo); end TableData2DLoadDepSHC;