Buildings.Templates.Plants.HeatPumps.Components.Validation

Package with validation models

Information

This package contains validation models for the classes within Buildings.Templates.Plants.HeatPumps.Components.

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

Package Content

Name Description
Buildings.Templates.Plants.HeatPumps.Components.Validation.HeatPumpGroupAirToWater HeatPumpGroupAirToWater Validation model for heat pump group with AWHP
Buildings.Templates.Plants.HeatPumps.Components.Validation.HeatPumpGroupAirToWaterPolyvalent HeatPumpGroupAirToWaterPolyvalent Validation model for AWHP group with polyvalent HP
Buildings.Templates.Plants.HeatPumps.Components.Validation.HeatRecoveryChiller HeatRecoveryChiller Validation model for heat recovery chiller
Buildings.Templates.Plants.HeatPumps.Components.Validation.PumpsPrimaryDedicated PumpsPrimaryDedicated Validation model for dedicated primary pump component
Buildings.Templates.Plants.HeatPumps.Components.Validation.PumpsPrimaryDedicatedPolyvalent PumpsPrimaryDedicatedPolyvalent Validation model for dedicated primary pump component with polyvalent heat pumps
Buildings.Templates.Plants.HeatPumps.Components.Validation.ValvesIsolation ValvesIsolation Validation model for isolation valve component
Buildings.Templates.Plants.HeatPumps.Components.Validation.ValvesIsolationPolyvalent ValvesIsolationPolyvalent Validation model for isolation valve component with polyvalent heat pumps

Buildings.Templates.Plants.HeatPumps.Components.Validation.HeatPumpGroupAirToWater Buildings.Templates.Plants.HeatPumps.Components.Validation.HeatPumpGroupAirToWater

Validation model for heat pump group with AWHP

Buildings.Templates.Plants.HeatPumps.Components.Validation.HeatPumpGroupAirToWater

Information

This model validates the model Buildings.Templates.Plants.HeatPumps.Components.HeatPumpGroups.AirToWater in a configuration in which the heat pump group components are exposed to a constant differential pressure and a varying return temperature.

The model is configured to represent either a non-reversible heat pump group (component hpAwNrv) or a reversible heat pump group (component hpAw) that switches between cooling and heating mode.

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

Parameters

TypeNameDefaultDescription
replaceable package MediumBuildings.Media.WaterCHW/HW medium
IntegernHp3Number of heat pumps (excluding polyvalent HPs)
ControllerdatCtlPlaAwNrvdatCtlPlaAwNrv(cfg(typ=Build...Controller parameters
ControllerdatCtlPlaAwdatCtlPlaAw(cfg(typ=Building...Controller parameters
HeatPumpGroupdatHpAwNrvdatHpAwNrv(final cpHeaWat_de...Non-reversible AWHP parameters
HeatPumpGroupdatHpAwdatHpAw(final cpHeaWat_defau...Reversible AWHP parameters
Dynamics
Conservation equations
DynamicsenergyDynamicsModelica.Fluid.Types.Dynamic...Type of energy balance: dynamic (3 initialization options) or steady state

Connectors

TypeNameDescription
replaceable package MediumCHW/HW medium
BusbusPlaPlant controller
BusbusHp[nHp]HP control bus

Modelica definition

model HeatPumpGroupAirToWater "Validation model for heat pump group with AWHP" extends Modelica.Icons.Example; replaceable package Medium = Buildings.Media.Water constrainedby Modelica.Media.Interfaces.PartialMedium "CHW/HW medium"; parameter Integer nHp = 3 "Number of heat pumps (excluding polyvalent HPs)"; parameter Modelica.Fluid.Types.Dynamics energyDynamics = Modelica.Fluid.Types.Dynamics.FixedInitial "Type of energy balance: dynamic (3 initialization options) or steady state"; parameter Data.Controller datCtlPlaAwNrv( cfg( typ=Buildings.Templates.Plants.Controls.Types.PlantHeatPump.HeatingOnly, have_hrc=false, have_inpSch=false, have_chiWat=false, typPumHeaWatPri=Buildings.Templates.Plants.HeatPumps.Types.PumpsPrimary.Variable, typPumChiWatPri=Buildings.Templates.Plants.HeatPumps.Types.PumpsPrimary.None, typPumHeaWatSec=Buildings.Templates.Plants.HeatPumps.Types.PumpsSecondary.None, typTanHeaWat=Buildings.Templates.Components.Types.IntegrationPoint.None, typTanChiWat=Buildings.Templates.Components.Types.IntegrationPoint.None, typDis=Buildings.Templates.Plants.HeatPumps.Types.Distribution.Constant1Only, nPumChiWatSec=0, rhoHeaWat_default=Buildings.Media.Water.d_const, typCtl=Buildings.Templates.Plants.HeatPumps.Types.Controller.OpenLoop, is_rev=hpAwNrv.is_rev, typHp=hpAwNrv.typHp, rhoChiWat_default=Buildings.Media.Water.d_const, cpChiWat_default=hpAwNrv.cpChiWat_default, have_hotWat=false, have_valChiWatMinByp=false, have_valHeaWatMinByp=false, have_valHpInlIso=false, have_valHpOutIso=false, cpHeaWat_default=hpAwNrv.cpHeaWat_default, cpSou_default=hpAwNrv.cpSou_default, have_senDpChiWatRemWir=true, typArrPumPri=Buildings.Templates.Components.Types.PumpArrangement.Dedicated, nHp=nHp, nPumHeaWatPri=nHp, have_heaWat=true, nPumHeaWatSec=0, rhoSou_default=Buildings.Media.Air.dStp, have_senDpHeaWatRemWir=true, typPumChiWatSec=Buildings.Templates.Plants.HeatPumps.Types.PumpsSecondary.None, nPumChiWatPri=nHp, nSenDpHeaWatRem=1, nSenDpChiWatRem=1, nAirHan=0, nEquZon=0, final have_hp=hpAwNrv.have_hp, final have_php=hpAwNrv.have_php, final nPhp=hpAwNrv.nPhp, have_valPhpInlIso=false, have_valPhpOutIso=false, have_pumChiWatPriDedHp=false), THeaWatSup_nominal=datHpAwNrv.THeaWatSupHp_nominal, dpChiWatRemSet_max=fill(Buildings.Templates.Data.Defaults.dpChiWatRemSet_max, datCtlPlaAwNrv.cfg.nSenDpChiWatRem), dpHeaWatRemSet_max=fill(Buildings.Templates.Data.Defaults.dpHeaWatRemSet_max, datCtlPlaAwNrv.cfg.nSenDpHeaWatRem), staHp={fill(1, nHp)}) "Controller parameters"; parameter Data.Controller datCtlPlaAw( cfg( typ=Buildings.Templates.Plants.Controls.Types.PlantHeatPump.Reversible, have_hrc=false, have_inpSch=false, have_chiWat=true, typPumHeaWatPri=Buildings.Templates.Plants.HeatPumps.Types.PumpsPrimary.Variable, typPumChiWatPri=Buildings.Templates.Plants.HeatPumps.Types.PumpsPrimary.None, typPumHeaWatSec=Buildings.Templates.Plants.HeatPumps.Types.PumpsSecondary.None, typTanHeaWat=Buildings.Templates.Components.Types.IntegrationPoint.None, typTanChiWat=Buildings.Templates.Components.Types.IntegrationPoint.None, typDis=Buildings.Templates.Plants.HeatPumps.Types.Distribution.Constant1Only, nPumChiWatSec=0, rhoHeaWat_default=Buildings.Media.Water.d_const, typCtl=Buildings.Templates.Plants.HeatPumps.Types.Controller.OpenLoop, is_rev=hpAw.is_rev, typHp=hpAw.typHp, rhoChiWat_default=Buildings.Media.Water.d_const, cpChiWat_default=hpAw.cpChiWat_default, have_hotWat=false, have_valChiWatMinByp=false, have_valHeaWatMinByp=false, have_valHpInlIso=true, have_valHpOutIso=true, cpHeaWat_default=hpAw.cpHeaWat_default, cpSou_default=hpAw.cpSou_default, have_senDpChiWatRemWir=true, typArrPumPri=Buildings.Templates.Components.Types.PumpArrangement.Dedicated, nHp=nHp, nPumHeaWatPri=nHp, have_heaWat=true, nPumHeaWatSec=0, rhoSou_default=Buildings.Media.Air.dStp, have_senDpHeaWatRemWir=true, typPumChiWatSec=Buildings.Templates.Plants.HeatPumps.Types.PumpsSecondary.None, nPumChiWatPri=nHp, nSenDpHeaWatRem=1, nSenDpChiWatRem=1, nAirHan=0, nEquZon=0, final have_hp=hpAw.have_hp, final have_php=hpAw.have_php, final nPhp=hpAw.nPhp, have_valPhpInlIso=false, have_valPhpOutIso=false, have_pumChiWatPriDedHp=false), THeaWatSup_nominal=datHpAw.THeaWatSupHp_nominal, TChiWatSup_nominal=datHpAw.TChiWatSupHp_nominal, dpChiWatRemSet_max=fill(Buildings.Templates.Data.Defaults.dpChiWatRemSet_max, datCtlPlaAw.cfg.nSenDpChiWatRem), dpHeaWatRemSet_max=fill(Buildings.Templates.Data.Defaults.dpHeaWatRemSet_max, datCtlPlaAw.cfg.nSenDpHeaWatRem), staHp={fill(1, nHp)}) "Controller parameters"; parameter Buildings.Templates.Plants.HeatPumps.Components.Data.HeatPumpGroup datHpAwNrv( final cpHeaWat_default=hpAwNrv.cpHeaWat_default, final cpSou_default=hpAwNrv.cpSou_default, final typHp=hpAwNrv.typHp, final is_rev=hpAwNrv.is_rev, mHeaWatHp_flow_nominal=datHpAwNrv.capHeaHp_nominal / abs( datHpAwNrv.THeaWatSupHp_nominal - Buildings.Templates.Data.Defaults.THeaWatRetMed) / Buildings.Utilities.Psychrometrics.Constants.cpWatLiq, dpHeaWatHp_nominal=Buildings.Templates.Data.Defaults.dpHeaWatHp, capHeaHp_nominal=500E3, THeaWatSupHp_nominal=Buildings.Templates.Data.Defaults.THeaWatSupMed, TSouHeaHp_nominal=Buildings.Templates.Data.Defaults.TOutHpHeaLow, PHp_min=1.0E3, perHeaHp( fileName=Modelica.Utilities.Files.loadResource( "modelica://Buildings/Resources/Data/Templates/Components/HeatPumps/Validation/AWHP_Heating.txt"), PLRSup={1}, use_TEvaOutForTab=false, use_TConOutForTab=true, tabUppBou=[263.15, 323.15; 313.15, 323.15]), have_hp=true, have_php=false) "Non-reversible AWHP parameters"; parameter Buildings.Templates.Plants.HeatPumps.Components.Data.HeatPumpGroup datHpAw( final cpHeaWat_default=hpAw.cpHeaWat_default, final cpSou_default=hpAw.cpSou_default, final typHp=hpAw.typHp, final is_rev=hpAw.is_rev, mHeaWatHp_flow_nominal=datHpAw.capHeaHp_nominal / abs( datHpAw.THeaWatSupHp_nominal - Buildings.Templates.Data.Defaults.THeaWatRetMed) / Buildings.Utilities.Psychrometrics.Constants.cpWatLiq, dpHeaWatHp_nominal=Buildings.Templates.Data.Defaults.dpHeaWatHp, capHeaHp_nominal=500E3, THeaWatSupHp_nominal=Buildings.Templates.Data.Defaults.THeaWatSupMed, TSouHeaHp_nominal=Buildings.Templates.Data.Defaults.TOutHpHeaLow, mChiWatHp_flow_nominal=datHpAw.capCooHp_nominal / abs( datHpAw.TChiWatSupHp_nominal - Buildings.Templates.Data.Defaults.TChiWatRet) / Buildings.Utilities.Psychrometrics.Constants.cpWatLiq, capCooHp_nominal=500E3, TChiWatSupHp_nominal=Buildings.Templates.Data.Defaults.TChiWatSup, TSouCooHp_nominal=Buildings.Templates.Data.Defaults.TOutHpCoo, PHp_min=1.0E3, perHeaHp( fileName=Modelica.Utilities.Files.loadResource( "modelica://Buildings/Resources/Data/Templates/Components/HeatPumps/Validation/AWHP_Heating.txt"), PLRSup={1}, use_TEvaOutForTab=false, use_TConOutForTab=true, tabUppBou=[263.15, 323.15; 313.15, 323.15]), perCooHp( fileName=Modelica.Utilities.Files.loadResource( "modelica://Buildings/Resources/Data/Templates/Components/HeatPumps/Validation/AWHP_Cooling.txt"), PLRSup={1}), have_hp=true, have_php=false) "Reversible AWHP parameters"; Fluid.Sources.Boundary_pT sup( redeclare final package Medium=Medium, p=Buildings.Templates.Data.Defaults.pHeaWat_rel_nominal + 101325, nPorts=nHp) "Boundary condition at distribution system supply"; Fluid.Sources.Boundary_pT inlHp1( redeclare final package Medium=Medium, use_p_in=true, use_T_in=true, nPorts=nHp) "Boundary conditions at HP inlet"; BoundaryConditions.WeatherData.ReaderTMY3 weaDat( filNam=Modelica.Utilities.Files.loadResource( "modelica://Buildings/Resources/weatherdata/USA_CA_San.Francisco.Intl.AP.724940_TMY3.mos")); Fluid.Sensors.TemperatureTwoPort TRet1[nHp]( redeclare each final package Medium=Medium, each final m_flow_nominal=datHpAwNrv.mHeaWatHp_flow_nominal) "Return temperature"; Fluid.Sensors.TemperatureTwoPort TSup1[nHp]( redeclare each final package Medium=Medium, each final m_flow_nominal=datHpAwNrv.mHeaWatHp_flow_nominal) "Supply temperature"; Controls.OpenLoop ctlPlaAwNrv( final cfg=datCtlPlaAwNrv.cfg, final dat=datCtlPlaAwNrv) "Plant controller"; HeatPumpGroups.AirToWater hpAwNrv( redeclare final package MediumHeaWat=Medium, final nHp=nHp, is_rev=false, final dat=datHpAwNrv, final energyDynamics=energyDynamics) "Non reversible AWHP"; Buildings.Controls.OBC.CDL.Reals.Sources.Sin THeaWatRet( amplitude=datHpAwNrv.THeaWatSupHp_nominal - datHpAwNrv.THeaWatRetHp_nominal, freqHz=3 / 3000, y(final unit="K", displayUnit="degC"), offset=datHpAwNrv.THeaWatRetHp_nominal, startTime=0) "HW return temperature value"; Buildings.Controls.OBC.CDL.Reals.Sources.Constant pHeaWatInl( k=sup.p + datHpAwNrv.dpHeaWatHp_nominal) "HW inlet pressure"; HeatPumpGroups.AirToWater hpAw( redeclare final package MediumHeaWat=Medium, final nHp=nHp, is_rev=true, final dat=datHpAw, final energyDynamics=energyDynamics) "Reversible AWHP"; Controls.OpenLoop ctlPlaAw(final cfg=datCtlPlaAw.cfg, final dat=datCtlPlaAw) "Plant controller"; Fluid.Sources.Boundary_pT inlHp( redeclare final package Medium=Medium, use_p_in=true, use_T_in=true, nPorts=nHp) "Boundary conditions at HP inlet"; Fluid.Sensors.TemperatureTwoPort TRet[nHp]( redeclare each final package Medium=Medium, each final m_flow_nominal=datHpAw.mHeaWatHp_flow_nominal) "Return temperature"; Fluid.Sources.Boundary_pT sup1( redeclare final package Medium=Medium, p=Buildings.Templates.Data.Defaults.pHeaWat_rel_nominal + 101325, nPorts=nHp) "Boundary condition at distribution system supply"; Fluid.Sensors.TemperatureTwoPort TSup[nHp]( redeclare each final package Medium=Medium, each final m_flow_nominal=datHpAw.mHeaWatHp_flow_nominal) "Supply temperature"; Buildings.Controls.OBC.CDL.Reals.Sources.Sin THeaWatRet1( amplitude=datHpAw.THeaWatSupHp_nominal - datHpAw.THeaWatRetHp_nominal, freqHz=3 / 3000, y(final unit="K", displayUnit="degC"), offset=datHpAw.THeaWatRetHp_nominal, startTime=0) "HW return temperature value"; Buildings.Controls.OBC.CDL.Reals.Sources.Sin TChiWatRet( amplitude=datHpAw.TChiWatRetHp_nominal - datHpAw.TChiWatSupHp_nominal, freqHz=3 / 3000, y(final unit="K", displayUnit="degC"), offset=datHpAw.TChiWatRetHp_nominal, startTime=0) "CHW return temperature value"; Buildings.Controls.OBC.CDL.Reals.Sources.Constant pHeaWatInl1( k=sup.p + hpAw.dpHeaWatHp_nominal) "HW inlet pressure"; Buildings.Controls.OBC.CDL.Reals.Sources.Constant pChiWatInl( k=sup.p + hpAw.dpChiWatHp_nominal) "CHW inlet pressure"; Buildings.Controls.OBC.CDL.Reals.Switch TRetAct "Active return temperature"; Buildings.Controls.OBC.CDL.Reals.Switch pInl_rel "Active inlet gaupe pressure"; Buildings.Templates.Plants.HeatPumps.Interfaces.Bus busPla "Plant controller"; Buildings.Templates.Components.Interfaces.Bus busHp[nHp] "HP control bus"; equation connect(ctlPlaAwNrv.bus, hpAwNrv.bus); connect(inlHp1.ports, TRet1.port_a); connect(TRet1.port_b, hpAwNrv.ports_aChiHeaWatHp); connect(hpAwNrv.ports_bChiHeaWatHp, TSup1.port_a); connect(TSup1.port_b, sup.ports); connect(weaDat.weaBus, hpAwNrv.busWea); connect(THeaWatRet.y, inlHp1.T_in); connect(pHeaWatInl.y, inlHp1.p_in); connect(weaDat.weaBus, hpAw.busWea); connect(ctlPlaAw.bus, hpAw.bus); connect(inlHp.ports, TRet.port_a); connect(TRet.port_b, hpAw.ports_aChiHeaWatHp); connect(TSup.port_b, sup1.ports); connect(hpAw.ports_bChiHeaWatHp, TSup.port_a); connect(THeaWatRet1.y, TRetAct.u1); connect(TChiWatRet.y, TRetAct.u3); connect(pHeaWatInl1.y, pInl_rel.u1); connect(pChiWatInl.y, pInl_rel.u3); connect(pInl_rel.y, inlHp.p_in); connect(TRetAct.y, inlHp.T_in); connect(busPla, ctlPlaAw.bus); connect(busPla.hp, busHp); connect(busHp[1].y1Hea, pInl_rel.u2); connect(pInl_rel.u2, TRetAct.u2); end HeatPumpGroupAirToWater;

Buildings.Templates.Plants.HeatPumps.Components.Validation.HeatPumpGroupAirToWaterPolyvalent Buildings.Templates.Plants.HeatPumps.Components.Validation.HeatPumpGroupAirToWaterPolyvalent

Validation model for AWHP group with polyvalent HP

Buildings.Templates.Plants.HeatPumps.Components.Validation.HeatPumpGroupAirToWaterPolyvalent

Information

This model validates the model Buildings.Templates.Plants.HeatPumps.Components.HeatPumpGroups.AirToWater in a configuration in which the heat pump group components are exposed to a constant differential pressure and a varying return temperature.

The model is configured to represent either a single polyvalent HP without reversible heat pumps (component php) or a group of reversible heat pumps with a single polyvalent HP (component hpPhp).

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

Parameters

TypeNameDefaultDescription
replaceable package MediumBuildings.Media.WaterCHW/HW medium
ControllerdatCtlPlaPhpdatCtlPlaPhp(cfg(typ=Buildin...Controller parameters
ControllerdatCtlPlaHpPhpdatCtlPlaHpPhp(cfg(typ=Build...Controller parameters
HeatPumpGroupdatPhpdatPhp(have_hp=false, have_p...Parameters for group of polyvalent HPs
HeatPumpGroupdatHpPhpdatHpPhp(have_hp=true, have_...Parameters for group of reversible AWHP and polyvalent HP
Dynamics
Conservation equations
DynamicsenergyDynamicsModelica.Fluid.Types.Dynamic...Type of energy balance: dynamic (3 initialization options) or steady state

Connectors

TypeNameDescription
replaceable package MediumCHW/HW medium
BusbusPlaPlant controller
BusbusHp[nHp]HP control bus

Modelica definition

model HeatPumpGroupAirToWaterPolyvalent "Validation model for AWHP group with polyvalent HP" extends Modelica.Icons.Example; replaceable package Medium = Buildings.Media.Water constrainedby Modelica.Media.Interfaces.PartialMedium "CHW/HW medium"; final parameter Integer nHp = 3 "Number of heat pumps (excluding polyvalent units)"; final parameter Integer nPhp = 1 "Number of polyvalent heat pumps"; parameter Modelica.Fluid.Types.Dynamics energyDynamics = Modelica.Fluid.Types.Dynamics.FixedInitial "Type of energy balance: dynamic (3 initialization options) or steady state"; parameter Data.Controller datCtlPlaPhp( cfg( typ=Buildings.Templates.Plants.Controls.Types.PlantHeatPump.ReversiblePolyvalent, have_hrc=false, have_inpSch=false, have_chiWat=true, typPumHeaWatPri=Buildings.Templates.Plants.HeatPumps.Types.PumpsPrimary.Variable, typPumChiWatPri=Buildings.Templates.Plants.HeatPumps.Types.PumpsPrimary.Variable, typPumHeaWatSec=Buildings.Templates.Plants.HeatPumps.Types.PumpsSecondary.None, typTanHeaWat=Buildings.Templates.Components.Types.IntegrationPoint.None, typTanChiWat=Buildings.Templates.Components.Types.IntegrationPoint.None, typDis=Buildings.Templates.Plants.HeatPumps.Types.Distribution.Constant1Only, nPumChiWatSec=0, rhoHeaWat_default=Buildings.Media.Water.d_const, typCtl=Buildings.Templates.Plants.HeatPumps.Types.Controller.OpenLoop, is_rev=php.is_rev, typHp=php.typHp, rhoChiWat_default=Buildings.Media.Water.d_const, cpChiWat_default=php.cpChiWat_default, have_hotWat=false, have_valChiWatMinByp=false, have_valHeaWatMinByp=false, have_valHpInlIso=false, have_valHpOutIso=false, cpHeaWat_default=php.cpHeaWat_default, cpSou_default=php.cpSou_default, have_senDpChiWatRemWir=true, typArrPumPri=Buildings.Templates.Components.Types.PumpArrangement.Dedicated, nHp=0, final nPumHeaWatPri=nPhp, have_heaWat=true, nPumHeaWatSec=0, rhoSou_default=Buildings.Media.Air.dStp, have_senDpHeaWatRemWir=true, typPumChiWatSec=Buildings.Templates.Plants.HeatPumps.Types.PumpsSecondary.None, final nPumChiWatPri=nPhp, nSenDpHeaWatRem=1, nSenDpChiWatRem=1, nAirHan=0, nEquZon=0, final have_hp=php.have_hp, final have_php=php.have_php, final nPhp=nPhp, have_valPhpInlIso=false, have_valPhpOutIso=false, have_pumChiWatPriDedHp=false), THeaWatSup_nominal=datPhp.THeaWatSupHp_nominal, TChiWatSup_nominal=datHpPhp.TChiWatSupHp_nominal, dpChiWatRemSet_max=fill( Buildings.Templates.Data.Defaults.dpChiWatRemSet_max, datCtlPlaPhp.cfg.nSenDpChiWatRem), dpHeaWatRemSet_max=fill( Buildings.Templates.Data.Defaults.dpHeaWatRemSet_max, datCtlPlaPhp.cfg.nSenDpHeaWatRem), staHp={fill(1, nHp)}) "Controller parameters"; parameter Data.Controller datCtlPlaHpPhp( cfg( typ=Buildings.Templates.Plants.Controls.Types.PlantHeatPump.ReversiblePolyvalent, have_hrc=false, have_inpSch=false, have_chiWat=true, typPumHeaWatPri=Buildings.Templates.Plants.HeatPumps.Types.PumpsPrimary.Variable, typPumChiWatPri=Buildings.Templates.Plants.HeatPumps.Types.PumpsPrimary.Variable, typPumHeaWatSec=Buildings.Templates.Plants.HeatPumps.Types.PumpsSecondary.None, typTanHeaWat=Buildings.Templates.Components.Types.IntegrationPoint.None, typTanChiWat=Buildings.Templates.Components.Types.IntegrationPoint.None, typDis=Buildings.Templates.Plants.HeatPumps.Types.Distribution.Constant1Only, nPumChiWatSec=0, rhoHeaWat_default=Buildings.Media.Water.d_const, typCtl=Buildings.Templates.Plants.HeatPumps.Types.Controller.OpenLoop, is_rev=hpPhp.is_rev, typHp=hpPhp.typHp, rhoChiWat_default=Buildings.Media.Water.d_const, cpChiWat_default=hpPhp.cpChiWat_default, have_hotWat=false, have_valChiWatMinByp=false, have_valHeaWatMinByp=false, have_valHpInlIso=true, have_valHpOutIso=true, cpHeaWat_default=hpPhp.cpHeaWat_default, cpSou_default=hpPhp.cpSou_default, have_senDpChiWatRemWir=true, typArrPumPri=Buildings.Templates.Components.Types.PumpArrangement.Dedicated, nHp=nHp, final nPumHeaWatPri=nHp + nPhp, have_heaWat=true, nPumHeaWatSec=0, rhoSou_default=Buildings.Media.Air.dStp, have_senDpHeaWatRemWir=true, typPumChiWatSec=Buildings.Templates.Plants.HeatPumps.Types.PumpsSecondary.None, final nPumChiWatPri=nPhp, nSenDpHeaWatRem=1, nSenDpChiWatRem=1, nAirHan=0, nEquZon=0, final have_hp=hpPhp.have_hp, final have_php=hpPhp.have_php, final nPhp=nPhp, have_valPhpInlIso=false, have_valPhpOutIso=false, have_pumChiWatPriDedHp=false), THeaWatSup_nominal=datHpPhp.THeaWatSupHp_nominal, TChiWatSup_nominal=datHpPhp.TChiWatSupHp_nominal, dpChiWatRemSet_max=fill( Buildings.Templates.Data.Defaults.dpChiWatRemSet_max, datCtlPlaHpPhp.cfg.nSenDpChiWatRem), dpHeaWatRemSet_max=fill( Buildings.Templates.Data.Defaults.dpHeaWatRemSet_max, datCtlPlaHpPhp.cfg.nSenDpHeaWatRem), staHp={fill(1, nHp)}) "Controller parameters"; parameter Data.HeatPumpGroup datPhp( have_hp=false, have_php=true, is_rev=false, final cpHeaWat_default=php.cpHeaWat_default, final cpSou_default=php.cpSou_default, final typHp=php.typHp, mHeaWatPhp_flow_nominal=datHpPhp.capHeaPhp_nominal / abs( datHpPhp.THeaWatSupPhp_nominal - Buildings.Templates.Data.Defaults.THeaWatRetMed) / Buildings.Utilities.Psychrometrics.Constants.cpWatLiq, dpHeaWatPhp_nominal=Buildings.Templates.Data.Defaults.dpHeaWatHp, capHeaPhp_nominal=500E3, THeaWatSupPhp_nominal=Buildings.Templates.Data.Defaults.THeaWatSupMed, TSouHeaPhp_nominal=Buildings.Templates.Data.Defaults.TOutHpHeaLow, mChiWatPhp_flow_nominal=datHpPhp.capCooPhp_nominal / abs( datHpPhp.TChiWatSupPhp_nominal - Buildings.Templates.Data.Defaults.TChiWatRet) / Buildings.Utilities.Psychrometrics.Constants.cpWatLiq, capCooPhp_nominal=500E3, dpChiWatPhp_nominal=Buildings.Templates.Data.Defaults.dpChiWatChi, TChiWatSupPhp_nominal=Buildings.Templates.Data.Defaults.TChiWatSup, TSouCooPhp_nominal=Buildings.Templates.Data.Defaults.TOutHpCoo, PPhp_min=1.0E3, capHeaShcPhp_nominal=500E3, capCooShcPhp_nominal=500E3, perPhp( 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"))) "Parameters for group of polyvalent HPs"; parameter Data.HeatPumpGroup datHpPhp( have_hp=true, have_php=true, final cpHeaWat_default=hpPhp.cpHeaWat_default, final cpSou_default=hpPhp.cpSou_default, final typHp=hpPhp.typHp, final is_rev=hpPhp.is_rev, mHeaWatHp_flow_nominal=datHpPhp.capHeaHp_nominal / abs( datHpPhp.THeaWatSupHp_nominal - Buildings.Templates.Data.Defaults.THeaWatRetMed) / Buildings.Utilities.Psychrometrics.Constants.cpWatLiq, dpHeaWatHp_nominal=Buildings.Templates.Data.Defaults.dpHeaWatHp, capHeaHp_nominal=500E3, THeaWatSupHp_nominal=Buildings.Templates.Data.Defaults.THeaWatSupMed, TSouHeaHp_nominal=Buildings.Templates.Data.Defaults.TOutHpHeaLow, mChiWatHp_flow_nominal=datHpPhp.capCooHp_nominal / abs( datHpPhp.TChiWatSupHp_nominal - Buildings.Templates.Data.Defaults.TChiWatRet) / Buildings.Utilities.Psychrometrics.Constants.cpWatLiq, capCooHp_nominal=500E3, TChiWatSupHp_nominal=Buildings.Templates.Data.Defaults.TChiWatSup, TSouCooHp_nominal=Buildings.Templates.Data.Defaults.TOutHpCoo, PHp_min=1.0E3, perHeaHp( fileName=Modelica.Utilities.Files.loadResource( "modelica://Buildings/Resources/Data/Templates/Components/HeatPumps/Validation/AWHP_Heating.txt"), PLRSup={1}, use_TEvaOutForTab=false, use_TConOutForTab=true, tabUppBou=[263.15, 323.15; 313.15, 323.15]), perCooHp( fileName=Modelica.Utilities.Files.loadResource( "modelica://Buildings/Resources/Data/Templates/Components/HeatPumps/Validation/AWHP_Cooling.txt"), PLRSup={1}), mHeaWatPhp_flow_nominal=datHpPhp.capHeaPhp_nominal / abs( datHpPhp.THeaWatSupPhp_nominal - Buildings.Templates.Data.Defaults.THeaWatRetMed) / Buildings.Utilities.Psychrometrics.Constants.cpWatLiq, dpHeaWatPhp_nominal=Buildings.Templates.Data.Defaults.dpHeaWatHp, capHeaPhp_nominal=500E3, THeaWatSupPhp_nominal=Buildings.Templates.Data.Defaults.THeaWatSupMed, TSouHeaPhp_nominal=Buildings.Templates.Data.Defaults.TOutHpHeaLow, mChiWatPhp_flow_nominal=datHpPhp.capCooPhp_nominal / abs( datHpPhp.TChiWatSupPhp_nominal - Buildings.Templates.Data.Defaults.TChiWatRet) / Buildings.Utilities.Psychrometrics.Constants.cpWatLiq, capCooPhp_nominal=500E3, dpChiWatPhp_nominal=Buildings.Templates.Data.Defaults.dpChiWatChi, TChiWatSupPhp_nominal=Buildings.Templates.Data.Defaults.TChiWatSup, TSouCooPhp_nominal=Buildings.Templates.Data.Defaults.TOutHpCoo, PPhp_min=1.0E3, capHeaShcPhp_nominal=500E3, capCooShcPhp_nominal=500E3, perPhp( 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"))) "Parameters for group of reversible AWHP and polyvalent HP"; Fluid.Sources.Boundary_pT sup( redeclare final package Medium=Medium, p=Buildings.Templates.Data.Defaults.pHeaWat_rel_nominal + 101325, nPorts=2) "Boundary condition at distribution system supply"; BoundaryConditions.WeatherData.ReaderTMY3 weaDat( filNam=Modelica.Utilities.Files.loadResource( "modelica://Buildings/Resources/weatherdata/USA_CA_San.Francisco.Intl.AP.724940_TMY3.mos")); Controls.OpenLoop ctlPlaShc( final cfg=datCtlPlaPhp.cfg, final dat=datCtlPlaPhp) "Plant controller"; HeatPumpGroups.AirToWater php( redeclare final package MediumHeaWat=Medium, have_hp=false, have_php=true, final nHp=0, final nPhp=nPhp, is_rev=false, final dat=datPhp, final energyDynamics=energyDynamics, show_T=true) "Polyvalent HP only"; HeatPumpGroups.AirToWater hpPhp( redeclare final package MediumHeaWat=Medium, have_php=true, final nHp=nHp, final nPhp=nPhp, is_rev=true, final dat=datHpPhp, final energyDynamics=energyDynamics, show_T=true) "AWHP group with reversible and polyvalent units"; Controls.OpenLoop ctlPlaAw( final cfg=datCtlPlaHpPhp.cfg, final dat=datCtlPlaHpPhp) "Plant controller"; Fluid.Sources.Boundary_pT inlHp( redeclare final package Medium=Medium, use_p_in=true, use_T_in=true, nPorts=nHp) "Boundary conditions at HP inlet"; Fluid.Sensors.TemperatureTwoPort TChiHeaWatRetHp[nHp]( redeclare each final package Medium=Medium, each final m_flow_nominal=datHpPhp.mHeaWatHp_flow_nominal) "Reversible HP CHW/HW return temperature"; Fluid.Sources.Boundary_pT sup1( redeclare final package Medium=Medium, p=Buildings.Templates.Data.Defaults.pHeaWat_rel_nominal + 101325, nPorts=5) "Boundary condition at distribution system supply"; Fluid.Sensors.TemperatureTwoPort TChiHeaWatSupHp[nHp]( redeclare each final package Medium=Medium, each final m_flow_nominal=datHpPhp.mHeaWatHp_flow_nominal) "Reversible HP CHW/HW supply temperature"; Buildings.Controls.OBC.CDL.Reals.Sources.Sin THeaWatRet1( amplitude=datHpPhp.THeaWatSupHp_nominal - datHpPhp.THeaWatRetHp_nominal, freqHz=3 / 3000, y(final unit="K", displayUnit="degC"), offset=datHpPhp.THeaWatRetHp_nominal, startTime=0) "HW return temperature value"; Buildings.Controls.OBC.CDL.Reals.Sources.Sin TChiWatRet( amplitude=datHpPhp.TChiWatRetHp_nominal - datHpPhp.TChiWatSupHp_nominal, freqHz=3 / 3000, y(final unit="K", displayUnit="degC"), offset=datHpPhp.TChiWatRetHp_nominal, startTime=0) "CHW return temperature value"; Buildings.Controls.OBC.CDL.Reals.Sources.Constant pHeaWatInl1( k=sup.p + hpPhp.dpHeaWatHp_nominal) "HW inlet pressure"; Buildings.Controls.OBC.CDL.Reals.Sources.Constant pChiWatInl( k=sup.p + hpPhp.dpChiWatHp_nominal) "CHW inlet pressure"; Buildings.Controls.OBC.CDL.Reals.Switch TRetAct "Active return temperature"; Buildings.Controls.OBC.CDL.Reals.Switch pInl_rel "Active inlet gaupe pressure"; Buildings.Templates.Plants.HeatPumps.Interfaces.Bus busPla "Plant controller"; Buildings.Templates.Components.Interfaces.Bus busHp[nHp] "HP control bus"; Fluid.Sources.Boundary_pT inlHeaWatPhp( redeclare final package Medium=Medium, p=sup1.p + datHpPhp.dpHeaWatPhp_nominal, use_T_in=true, nPorts=2) "Boundary conditions at polyvalent HP inlet"; Fluid.Sources.Boundary_pT inlChiWatPhp( redeclare final package Medium=Medium, p=sup1.p + datHpPhp.dpChiWatPhp_nominal, use_T_in=true, nPorts=2) "Boundary conditions at polyvalent HP inlet"; equation connect(ctlPlaShc.bus, php.bus); connect(weaDat.weaBus, php.busWea); connect(weaDat.weaBus, hpPhp.busWea); connect(ctlPlaAw.bus, hpPhp.bus); connect(inlHp.ports, TChiHeaWatRetHp.port_a); connect(TChiHeaWatRetHp.port_b, hpPhp.ports_aChiHeaWatHp); connect(TChiHeaWatSupHp.port_b, sup1.ports[1:3]); connect(hpPhp.ports_bChiHeaWatHp, TChiHeaWatSupHp.port_a); connect(THeaWatRet1.y, TRetAct.u1); connect(TChiWatRet.y, TRetAct.u3); connect(pHeaWatInl1.y, pInl_rel.u1); connect(pChiWatInl.y, pInl_rel.u3); connect(pInl_rel.y, inlHp.p_in); connect(TRetAct.y, inlHp.T_in); connect(busPla, ctlPlaAw.bus); connect(busPla.hp, busHp); connect(busHp[1].y1Hea, pInl_rel.u2); connect(pInl_rel.u2, TRetAct.u2); connect(hpPhp.ports_bChiWatPhp[1], sup1.ports[4]); connect(hpPhp.ports_bHeaWatPhp[1], sup1.ports[5]); connect(inlHeaWatPhp.ports[1], hpPhp.ports_aHeaWatPhp[1]); connect(inlChiWatPhp.ports[1], hpPhp.ports_aChiWatPhp[1]); connect(TChiWatRet.y, inlChiWatPhp.T_in); connect(THeaWatRet1.y, inlHeaWatPhp.T_in); connect(inlHeaWatPhp.ports[2], php.ports_aHeaWatPhp[1]); connect(inlChiWatPhp.ports[2], php.ports_aChiWatPhp[1]); connect(php.ports_bHeaWatPhp[1], sup.ports[1]); connect(php.ports_bChiWatPhp, sup.ports[2:2]); end HeatPumpGroupAirToWaterPolyvalent;

Buildings.Templates.Plants.HeatPumps.Components.Validation.HeatRecoveryChiller Buildings.Templates.Plants.HeatPumps.Components.Validation.HeatRecoveryChiller

Validation model for heat recovery chiller

Buildings.Templates.Plants.HeatPumps.Components.Validation.HeatRecoveryChiller

Information

This model validates the model Buildings.Templates.Plants.HeatPumps.Components.HeatRecoveryChiller.

The CHW and HW return temperatures and flow rates are at their design values. The HRC supply temperature setpoint is switched from the design CHW supply temperature to the design HW supply temperature when the HRC operating mode is switched from cooling to heating.

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

Parameters

TypeNameDefaultDescription
replaceable package MediumBuildings.Media.WaterCHW/HW medium
EfficiencyCOP_nominal3.6Coefficient of performance at design cooling conditions [1]
ChillerdatHrcdatHrc(final typ=Buildings.T...HRC parameters
PumpSingledatPumChiWatHrcdatPumChiWatHrc(final typ=Bu...HRC CHW pump parameters
PumpSingledatPumHeaWatHrcdatPumHeaWatHrc(final typ=Bu...HRC HW pump parameters
Dynamics
Conservation equations
DynamicsenergyDynamicsModelica.Fluid.Types.Dynamic...Type of energy balance: dynamic (3 initialization options) or steady state

Connectors

TypeNameDescription
replaceable package MediumCHW/HW medium
BusbusHrcHRC control bus
BusbusPumChiWatHrcHRC CHW pump control bus
BusbusPumHeaWatHrcHRC HW pump control bus
BusbusPlant control bus

Modelica definition

model HeatRecoveryChiller "Validation model for heat recovery chiller" extends Modelica.Icons.Example; replaceable package Medium=Buildings.Media.Water constrainedby Modelica.Media.Interfaces.PartialMedium "CHW/HW 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.Efficiency COP_nominal = 3.6 "Coefficient of performance at design cooling conditions"; parameter Buildings.Templates.Components.Data.Chiller datHrc( final typ=Buildings.Templates.Components.Types.Chiller.WaterCooled, TCon_nominal=Buildings.Templates.Data.Defaults.THeaWatSupMed, cap_nominal=500E3, dpChiWat_nominal=Buildings.Templates.Data.Defaults.dpChiWatChi, dpCon_nominal=Buildings.Templates.Data.Defaults.dpConWatChi, TChiWatSup_nominal=Buildings.Templates.Data.Defaults.TChiWatSup, mChiWat_flow_nominal=datHrc.cap_nominal / abs(datHrc.TChiWatSup_nominal - Buildings.Templates.Data.Defaults.TChiWatRet) / Buildings.Utilities.Psychrometrics.Constants.cpWatLiq, mCon_flow_nominal=datHrc.cap_nominal * (1 + 1/COP_nominal) / abs(datHrc.TCon_nominal - Buildings.Templates.Data.Defaults.THeaWatRetMed) / Buildings.Utilities.Psychrometrics.Constants.cpWatLiq, per( fileName=Modelica.Utilities.Files.loadResource( "modelica://Buildings/Resources/Data/Fluid/HeatPumps/ModularReversible/Examples/TableData2DLoadDep_Chiller.txt"), PLRSup={0.45,0.5,0.55,0.6,0.65,0.7,0.75,0.8,0.9,1.0}, PLRCyc_min=0.2, use_TEvaOutForTab=true, use_TConOutForTab=true), P_min=50) "HRC parameters"; parameter Buildings.Templates.Components.Data.PumpSingle datPumChiWatHrc( final typ=Buildings.Templates.Components.Types.Pump.Single, m_flow_nominal=datHrc.mChiWat_flow_nominal, dp_nominal=datHrc.dpChiWat_nominal) "HRC CHW pump parameters"; parameter Buildings.Templates.Components.Data.PumpSingle datPumHeaWatHrc( final typ=Buildings.Templates.Components.Types.Pump.Single, m_flow_nominal=datHrc.mCon_flow_nominal, dp_nominal=datHrc.dpCon_nominal) "HRC HW pump parameters"; Buildings.Templates.Plants.HeatPumps.Components.HeatRecoveryChiller hrc( redeclare final package MediumChiWat=Medium, redeclare final package MediumHeaWat=Medium, final datPumChiWat=datPumChiWatHrc, final datPumHeaWat=datPumHeaWatHrc, final datHrc=datHrc, final energyDynamics=energyDynamics); Fluid.Sources.Boundary_pT inlChiWat( redeclare final package Medium=Medium, T=hrc.TChiWatRet_nominal, nPorts=1) "Boundary conditions for HRC entering CHW"; Fluid.Sources.Boundary_pT inlHeaWat( redeclare final package Medium=Medium, T=hrc.TConEnt_nominal, nPorts=1) "Boundary conditions for HRC entering HW"; Fluid.Sources.Boundary_pT outHeaWat( redeclare final package Medium=Medium, nPorts=1) "Boundary conditions for HRC leaving HW"; Fluid.Sources.Boundary_pT outChiWat( redeclare final package Medium=Medium, nPorts=1) "Boundary conditions for HRC leaving CHW"; Buildings.Templates.Components.Interfaces.Bus busHrc "HRC control bus"; Buildings.Templates.Components.Interfaces.Bus busPumChiWatHrc "HRC CHW pump control bus"; Buildings.Templates.Components.Interfaces.Bus busPumHeaWatHrc "HRC HW pump control bus"; Buildings.Controls.OBC.CDL.Logical.Sources.TimeTable y1( table=[ 0, 0, 0; 0.1, 1, 1; 0.5, 1, 0; 0.9, 0, 0], timeScale=1000, period=1000) "Source for DO signals"; Buildings.Controls.OBC.CDL.Reals.Sources.Constant TChiWatSupSet( final k=datHrc.TChiWatSup_nominal) "CHW supply temperature setpoint"; Buildings.Controls.OBC.CDL.Reals.Sources.Constant THeaWatSupSet( final k=datHrc.TCon_nominal) "HW supply temperature setpoint"; Fluid.Sensors.TemperatureTwoPort THeaWatLvg( redeclare final package Medium=Medium, final m_flow_nominal=datHrc.mCon_flow_nominal) "HRC leaving HW temperature"; Fluid.Sensors.TemperatureTwoPort TChiWatLvg( redeclare final package Medium=Medium, final m_flow_nominal=datHrc.mChiWat_flow_nominal) "HRC leaving CHW temperature"; Buildings.Templates.Plants.HeatPumps.Interfaces.Bus bus "Plant control bus"; equation connect(inlHeaWat.ports[1], hrc.port_a1); connect(y1.y[1], busPumHeaWatHrc.y1); connect(y1.y[1], busPumChiWatHrc.y1); connect(y1.y[1], busHrc.y1); connect(y1.y[2], busHrc.y1Coo); connect(outHeaWat.ports[1], THeaWatLvg.port_b); connect(THeaWatLvg.port_a, hrc.port_b1); connect(hrc.port_b2, TChiWatLvg.port_a); connect(TChiWatLvg.port_b, outChiWat.ports[1]); connect(inlChiWat.ports[1], hrc.port_a2); connect(busHrc, bus.hrc); connect(bus, hrc.bus); connect(busPumChiWatHrc, bus.pumChiWatHrc); connect(busPumHeaWatHrc, bus.pumHeaWatHrc); connect(TChiWatSupSet.y, busHrc.TChiWatSet); connect(THeaWatSupSet.y, busHrc.THeaWatSet); end HeatRecoveryChiller;

Buildings.Templates.Plants.HeatPumps.Components.Validation.PumpsPrimaryDedicated Buildings.Templates.Plants.HeatPumps.Components.Validation.PumpsPrimaryDedicated

Validation model for dedicated primary pump component

Buildings.Templates.Plants.HeatPumps.Components.Validation.PumpsPrimaryDedicated

Information

This model validates the model Buildings.Templates.Plants.HeatPumps.Components.PumpsPrimaryDedicated for the following configurations.

In each configuration, two identical heat pumps are represented by fixed flow resistances (components hp*).

The model uses open loop controls and the simulation allows verifying that design flow is obtained in each loop and each heat pump when the pumps are enabled.

In the configuration with a single dedicated primary pump serving both CHW and HW circuits, this requires adjusting the design pressure drop of the balancing valves which are modeled by fixed flow resistances in the isolation valve components valHeaWatIsoCom and valChiWatIsoCom. This adjustment is done programmatically using the function Buildings.Templates.Utilities.computeBalancingPressureDrop.

Similarly, in the configuration with variable speed pumps pumPriHea, the design head of the pumps is voluntarily chosen higher than necessary and the required pump speed needed to provide the design HP flow is computed at initialization by solving for a balancing valve pressure drop of zero. Note that this requires solving a numerical Jacobian at initialization. Although this is handled well by various Modelica tools, the parameter use_spePumIni allows switching to a default value in this validation model for better integration into the continuous integration test workflow.

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

Parameters

TypeNameDefaultDescription
replaceable package MediumBuildings.Media.WaterCHW/HW medium
IntegernHp2Number of heat pumps (excluding polyvalent HPs)
Booleanuse_spePumInifalseSet to true to compute pump speed at initialization, false to use default value
Realr_N[datPumHeaWatHea.nPum] Relative revolution, r_N=N/N_nominal [1]
Realr_NDef[datPumHeaWatHea.nPum]fill(0.85, datPumHeaWatHea.n...Default value for relative revolution, r_N=N/N_nominal [1]
ControllerdatCtldatCtl(cfg(typ=Buildings.Tem...Controller parameters
ControllerdatCtlNoDeddatCtlNoDed(cfg(typ=Building...Controller parameters
ControllerdatCtlSepdatCtlSep(cfg(typ=Buildings....Controller parameters
ControllerdatCtlHeadatCtlHea(cfg(typ=Buildings....Controller parameters
HeatPumpGroupdatHpdatHp(have_hp=true, have_php...Reversible AWHP parameters
PumpMultipledatPumPriComdatPumPriCom(typ=Buildings.T...Primary pump parameters
PumpMultipledatPumHeaWatdatPumHeaWat(typ=Buildings.T...Dedicated primary HW pump parameters
PumpMultipledatPumChiWatdatPumChiWat(typ=Buildings.T...Dedicated primary CHW pump parameters
PumpMultipledatPumHeaWatHeadatPumHeaWatHea(typ=Building...Dedicated primary HW pump parameters – Heating-only system
PumpMultipledatPumHeaWatHdrdatPumHeaWatHdr(typ=Building...Headered primary HW pump parameters
PumpMultipledatPumChiWatHdrdatPumChiWatHdr(typ=Building...Headered primary CHW pump parameters
Dynamics
Conservation equations
DynamicsenergyDynamicsModelica.Fluid.Types.Dynamic...Type of energy balance: dynamic (3 initialization options) or steady state

Connectors

TypeNameDescription
replaceable package MediumCHW/HW medium
BusbusPlaPlant control bus
BusbusPla1Plant control bus
BusbusPla2Plant control bus

Modelica definition

model PumpsPrimaryDedicated "Validation model for dedicated primary pump component" extends Modelica.Icons.Example; replaceable package Medium = Buildings.Media.Water constrainedby Modelica.Media.Interfaces.PartialMedium "CHW/HW medium"; parameter Integer nHp = 2 "Number of heat pumps (excluding polyvalent HPs)"; parameter Boolean use_spePumIni = false "Set to true to compute pump speed at initialization, false to use default value"; parameter Modelica.Fluid.Types.Dynamics energyDynamics = Modelica.Fluid.Types.Dynamics.FixedInitial "Type of energy balance: dynamic (3 initialization options) or steady state"; // Calculation of pump speed to meet design flow. parameter Real r_N[datPumHeaWatHea.nPum]( each fixed=false, each start=1, each unit="1") "Relative revolution, r_N=N/N_nominal"; parameter Real r_NDef[datPumHeaWatHea.nPum](each start=1, each unit="1") = fill(0.85, datPumHeaWatHea.nPum) "Default value for relative revolution, r_N=N/N_nominal"; parameter Data.Controller datCtl( cfg( typ=Buildings.Templates.Plants.Controls.Types.PlantHeatPump.Reversible, have_inpSch=false, have_hp=true, have_hrc=false, have_valHpOutIso=false, have_valHpInlIso=true, have_valPhpOutIso=false, have_valPhpInlIso=false, have_chiWat=true, have_php=false, nPhp=0, typPumHeaWatPri=Buildings.Templates.Plants.HeatPumps.Types.PumpsPrimary.Constant, typPumChiWatPri=Buildings.Templates.Plants.HeatPumps.Types.PumpsPrimary.None, typPumHeaWatSec=Buildings.Templates.Plants.HeatPumps.Types.PumpsSecondary.None, typTanHeaWat=Buildings.Templates.Components.Types.IntegrationPoint.None, typTanChiWat=Buildings.Templates.Components.Types.IntegrationPoint.None, typDis=Buildings.Templates.Plants.HeatPumps.Types.Distribution.Constant1Only, nPumChiWatSec=0, rhoHeaWat_default=Buildings.Media.Water.d_const, typCtl=Buildings.Templates.Plants.HeatPumps.Types.Controller.OpenLoop, is_rev=true, typHp=Buildings.Templates.Components.Types.HeatPump.AirToWater, rhoChiWat_default=Buildings.Media.Water.d_const, cpChiWat_default=Buildings.Utilities.Psychrometrics.Constants.cpWatLiq, have_hotWat=false, have_valChiWatMinByp=false, have_valHeaWatMinByp=false, cpHeaWat_default=Buildings.Utilities.Psychrometrics.Constants.cpWatLiq, cpSou_default=Buildings.Utilities.Psychrometrics.Constants.cpWatLiq, have_senDpChiWatRemWir=true, typArrPumPri=Buildings.Templates.Components.Types.PumpArrangement.Dedicated, final nHp=nHp, final nPumHeaWatPri=nHp, have_heaWat=true, nPumHeaWatSec=0, rhoSou_default=Buildings.Media.Air.dStp, have_senDpHeaWatRemWir=true, typPumChiWatSec=Buildings.Templates.Plants.HeatPumps.Types.PumpsSecondary.None, nPumChiWatPri=0, nSenDpHeaWatRem=0, nSenDpChiWatRem=0, nAirHan=0, nEquZon=0, have_pumChiWatPriDedHp=false), THeaWatSup_nominal=Buildings.Templates.Data.Defaults.THeaWatSupMed, TChiWatSup_nominal=Buildings.Templates.Data.Defaults.TChiWatSup, dpChiWatRemSet_max=fill(Buildings.Templates.Data.Defaults.dpChiWatRemSet_max, datCtl.cfg.nSenDpChiWatRem), dpHeaWatRemSet_max=fill(Buildings.Templates.Data.Defaults.dpHeaWatRemSet_max, datCtl.cfg.nSenDpHeaWatRem), staHp={fill(1, datCtl.cfg.nHp)}) "Controller parameters"; parameter Data.Controller datCtlNoDed( cfg( typ=Buildings.Templates.Plants.Controls.Types.PlantHeatPump.Reversible, have_inpSch=false, have_hp=true, have_hrc=false, have_valHpOutIso=false, have_valHpInlIso=true, have_valPhpOutIso=false, have_valPhpInlIso=false, have_chiWat=true, have_php=false, nPhp=0, typPumHeaWatPri=Buildings.Templates.Plants.HeatPumps.Types.PumpsPrimary.Variable, typPumChiWatPri=Buildings.Templates.Plants.HeatPumps.Types.PumpsPrimary.Variable, typPumHeaWatSec=Buildings.Templates.Plants.HeatPumps.Types.PumpsSecondary.None, typTanHeaWat=Buildings.Templates.Components.Types.IntegrationPoint.None, typTanChiWat=Buildings.Templates.Components.Types.IntegrationPoint.None, typDis=Buildings.Templates.Plants.HeatPumps.Types.Distribution.Constant1Only, nPumChiWatSec=0, rhoHeaWat_default=Buildings.Media.Water.d_const, typCtl=Buildings.Templates.Plants.HeatPumps.Types.Controller.OpenLoop, is_rev=true, typHp=Buildings.Templates.Components.Types.HeatPump.AirToWater, rhoChiWat_default=Buildings.Media.Water.d_const, cpChiWat_default=Buildings.Utilities.Psychrometrics.Constants.cpWatLiq, have_hotWat=false, have_valChiWatMinByp=false, have_valHeaWatMinByp=false, cpHeaWat_default=Buildings.Utilities.Psychrometrics.Constants.cpWatLiq, cpSou_default=Buildings.Utilities.Psychrometrics.Constants.cpWatLiq, have_senDpChiWatRemWir=true, typArrPumPri=Buildings.Templates.Components.Types.PumpArrangement.Headered, final nHp=nHp, final nPumHeaWatPri=nHp, have_heaWat=true, nPumHeaWatSec=0, rhoSou_default=Buildings.Media.Air.dStp, have_senDpHeaWatRemWir=true, typPumChiWatSec=Buildings.Templates.Plants.HeatPumps.Types.PumpsSecondary.None, nPumChiWatPri=nHp, nSenDpHeaWatRem=0, nSenDpChiWatRem=0, nAirHan=0, nEquZon=0, have_pumChiWatPriDedHp=false), THeaWatSup_nominal=Buildings.Templates.Data.Defaults.THeaWatSupMed, TChiWatSup_nominal=Buildings.Templates.Data.Defaults.TChiWatSup, dpChiWatRemSet_max=fill(Buildings.Templates.Data.Defaults.dpChiWatRemSet_max, datCtlNoDed.cfg.nSenDpChiWatRem), dpHeaWatRemSet_max=fill(Buildings.Templates.Data.Defaults.dpHeaWatRemSet_max, datCtlNoDed.cfg.nSenDpHeaWatRem), staHp={fill(1, datCtlNoDed.cfg.nHp)}) "Controller parameters"; parameter Data.Controller datCtlSep( cfg( typ=Buildings.Templates.Plants.Controls.Types.PlantHeatPump.Reversible, have_inpSch=false, have_hp=true, have_hrc=false, have_valHpOutIso=false, have_valHpInlIso=true, have_valPhpOutIso=false, have_valPhpInlIso=false, have_chiWat=true, have_php=false, nPhp=0, typPumHeaWatPri=Buildings.Templates.Plants.HeatPumps.Types.PumpsPrimary.Constant, typPumChiWatPri=Buildings.Templates.Plants.HeatPumps.Types.PumpsPrimary.Constant, typPumHeaWatSec=Buildings.Templates.Plants.HeatPumps.Types.PumpsSecondary.None, typTanHeaWat=Buildings.Templates.Components.Types.IntegrationPoint.None, typTanChiWat=Buildings.Templates.Components.Types.IntegrationPoint.None, typDis=Buildings.Templates.Plants.HeatPumps.Types.Distribution.Constant1Only, nPumChiWatSec=0, rhoHeaWat_default=Buildings.Media.Water.d_const, typCtl=Buildings.Templates.Plants.HeatPumps.Types.Controller.OpenLoop, is_rev=true, typHp=Buildings.Templates.Components.Types.HeatPump.AirToWater, rhoChiWat_default=Buildings.Media.Water.d_const, cpChiWat_default=Buildings.Utilities.Psychrometrics.Constants.cpWatLiq, have_hotWat=false, have_valChiWatMinByp=false, have_valHeaWatMinByp=false, cpHeaWat_default=Buildings.Utilities.Psychrometrics.Constants.cpWatLiq, cpSou_default=Buildings.Utilities.Psychrometrics.Constants.cpWatLiq, have_senDpChiWatRemWir=true, typArrPumPri=Buildings.Templates.Components.Types.PumpArrangement.Dedicated, final nHp=nHp, final nPumHeaWatPri=nHp, final nPumChiWatPri=nHp, have_heaWat=true, nPumHeaWatSec=0, rhoSou_default=Buildings.Media.Air.dStp, have_senDpHeaWatRemWir=true, typPumChiWatSec=Buildings.Templates.Plants.HeatPumps.Types.PumpsSecondary.None, nSenDpHeaWatRem=0, nSenDpChiWatRem=0, nAirHan=0, nEquZon=0, have_pumChiWatPriDedHp=true), THeaWatSup_nominal=Buildings.Templates.Data.Defaults.THeaWatSupMed, TChiWatSup_nominal=Buildings.Templates.Data.Defaults.TChiWatSup, dpChiWatRemSet_max=fill(Buildings.Templates.Data.Defaults.dpChiWatRemSet_max, datCtlSep.cfg.nSenDpChiWatRem), dpHeaWatRemSet_max=fill(Buildings.Templates.Data.Defaults.dpHeaWatRemSet_max, datCtlSep.cfg.nSenDpHeaWatRem), staHp={fill(1, datCtlSep.cfg.nHp)}) "Controller parameters"; parameter Data.Controller datCtlHea( cfg( typ=Buildings.Templates.Plants.Controls.Types.PlantHeatPump.HeatingOnly, have_inpSch=false, have_hp=true, have_hrc=false, have_valHpOutIso=false, have_valHpInlIso=false, have_valPhpOutIso=false, have_valPhpInlIso=false, have_chiWat=false, have_php=false, nPhp=0, typPumHeaWatPri=Buildings.Templates.Plants.HeatPumps.Types.PumpsPrimary.Variable, typPumChiWatPri=Buildings.Templates.Plants.HeatPumps.Types.PumpsPrimary.None, typPumHeaWatSec=Buildings.Templates.Plants.HeatPumps.Types.PumpsSecondary.None, typTanHeaWat=Buildings.Templates.Components.Types.IntegrationPoint.None, typTanChiWat=Buildings.Templates.Components.Types.IntegrationPoint.None, typDis=Buildings.Templates.Plants.HeatPumps.Types.Distribution.Constant1Only, nPumChiWatSec=0, rhoHeaWat_default=Buildings.Media.Water.d_const, typCtl=Buildings.Templates.Plants.HeatPumps.Types.Controller.OpenLoop, is_rev=false, typHp=Buildings.Templates.Components.Types.HeatPump.AirToWater, rhoChiWat_default=Buildings.Media.Water.d_const, cpChiWat_default=Buildings.Utilities.Psychrometrics.Constants.cpWatLiq, have_hotWat=false, have_valChiWatMinByp=false, have_valHeaWatMinByp=false, cpHeaWat_default=Buildings.Utilities.Psychrometrics.Constants.cpWatLiq, cpSou_default=Buildings.Utilities.Psychrometrics.Constants.cpWatLiq, have_senDpChiWatRemWir=true, typArrPumPri=Buildings.Templates.Components.Types.PumpArrangement.Dedicated, final nHp=nHp, final nPumHeaWatPri=nHp, nPumChiWatPri=0, have_heaWat=true, nPumHeaWatSec=0, rhoSou_default=Buildings.Media.Air.dStp, have_senDpHeaWatRemWir=true, typPumChiWatSec=Buildings.Templates.Plants.HeatPumps.Types.PumpsSecondary.None, nSenDpHeaWatRem=0, nSenDpChiWatRem=0, nAirHan=0, nEquZon=0, have_pumChiWatPriDedHp=false), THeaWatSup_nominal=Buildings.Templates.Data.Defaults.THeaWatSupMed, dpChiWatRemSet_max=fill(Buildings.Templates.Data.Defaults.dpChiWatRemSet_max, datCtlHea.cfg.nSenDpChiWatRem), dpHeaWatRemSet_max=fill(Buildings.Templates.Data.Defaults.dpHeaWatRemSet_max, datCtlHea.cfg.nSenDpHeaWatRem), staHp={fill(1, datCtlHea.cfg.nHp)}) "Controller parameters"; parameter Data.HeatPumpGroup datHp( have_hp=true, have_php=false, final typHp=Buildings.Templates.Components.Types.HeatPump.AirToWater, final is_rev=true, mHeaWatHp_flow_nominal=datHp.capHeaHp_nominal / abs( datHp.THeaWatSupHp_nominal - Buildings.Templates.Data.Defaults.THeaWatRetMed) / Buildings.Utilities.Psychrometrics.Constants.cpWatLiq, dpHeaWatHp_nominal=Buildings.Templates.Data.Defaults.dpHeaWatHp, capHeaHp_nominal=500E3, THeaWatSupHp_nominal=Buildings.Templates.Data.Defaults.THeaWatSupMed, TSouHeaHp_nominal=Buildings.Templates.Data.Defaults.TOutHpHeaLow, mChiWatHp_flow_nominal=datHp.capCooHp_nominal / abs( datHp.TChiWatSupHp_nominal - Buildings.Templates.Data.Defaults.TChiWatRet) / Buildings.Utilities.Psychrometrics.Constants.cpWatLiq, capCooHp_nominal=500E3, TChiWatSupHp_nominal=Buildings.Templates.Data.Defaults.TChiWatSup, TSouCooHp_nominal=Buildings.Templates.Data.Defaults.TOutHpCoo, PHp_min=1.0E3, perHeaHp( fileName=Modelica.Utilities.Files.loadResource( "modelica://Buildings/Resources/Data/Templates/Components/HeatPumps/Validation/AWHP_Heating.txt"), PLRSup={1}, use_TEvaOutForTab=false, use_TConOutForTab=true, tabUppBou=[263.15, 323.15; 313.15, 323.15]), perCooHp( fileName=Modelica.Utilities.Files.loadResource( "modelica://Buildings/Resources/Data/Templates/Components/HeatPumps/Validation/AWHP_Cooling.txt"), PLRSup={1})) "Reversible AWHP parameters"; parameter Buildings.Templates.Components.Data.PumpMultiple datPumPriCom( typ=Buildings.Templates.Components.Types.Pump.Multiple, nPum=nHp, m_flow_nominal=fill( max(datHp.mHeaWatHp_flow_nominal, datHp.mChiWatHp_flow_nominal), nHp), dp_nominal=fill( max(datHp.dpHeaWatHp_nominal, datHp.dpChiWatHp_nominal) + Buildings.Templates.Data.Defaults.dpValChe + max( max(valChiWatIsoCom.dpValve_nominal), max(valHeaWatIsoCom.dpValve_nominal)), nHp)) "Primary pump parameters"; parameter Buildings.Templates.Components.Data.PumpMultiple datPumHeaWat( typ=Buildings.Templates.Components.Types.Pump.Multiple, nPum=nHp, m_flow_nominal=fill(datHp.mHeaWatHp_flow_nominal, nHp), dp_nominal=fill( datHp.dpHeaWatHp_nominal + Buildings.Templates.Data.Defaults.dpValChe + max(valHeaWatIsoCom.dpValve_nominal), nHp)) "Dedicated primary HW pump parameters"; parameter Buildings.Templates.Components.Data.PumpMultiple datPumChiWat( typ=Buildings.Templates.Components.Types.Pump.Multiple, final nPum=nHp, m_flow_nominal=fill(datHp.mChiWatHp_flow_nominal, nHp), dp_nominal=fill( datHp.dpChiWatHp_nominal + Buildings.Templates.Data.Defaults.dpValChe + max(valHeaWatIsoCom.dpValve_nominal), nHp)) "Dedicated primary CHW pump parameters"; parameter Buildings.Templates.Components.Data.PumpMultiple datPumHeaWatHea( typ=Buildings.Templates.Components.Types.Pump.Multiple, final nPum=nHp, m_flow_nominal=fill(datHp.mHeaWatHp_flow_nominal, nHp), dp_nominal=1.5 * fill( datHp.dpHeaWatHp_nominal + Buildings.Templates.Data.Defaults.dpValChe + max(valHeaWatIsoCom.dpValve_nominal), nHp)) "Dedicated primary HW pump parameters – Heating-only system"; parameter Buildings.Templates.Components.Data.PumpMultiple datPumHeaWatHdr( typ=Buildings.Templates.Components.Types.Pump.Multiple, nPum=nHp, m_flow_nominal=fill( datHp.mHeaWatHp_flow_nominal * nHp / datPumHeaWatHdr.nPum, datPumHeaWatHdr.nPum), dp_nominal=fill( datHp.dpHeaWatHp_nominal + Buildings.Templates.Data.Defaults.dpValChe + max(valHeaWatIsoHdr.dpValve_nominal), datPumHeaWatHdr.nPum)) "Headered primary HW pump parameters"; parameter Buildings.Templates.Components.Data.PumpMultiple datPumChiWatHdr( typ=Buildings.Templates.Components.Types.Pump.Multiple, final nPum=nHp, m_flow_nominal=fill( datHp.mChiWatHp_flow_nominal * nHp / datPumChiWatHdr.nPum, datPumChiWatHdr.nPum), dp_nominal=fill( datHp.dpChiWatHp_nominal + Buildings.Templates.Data.Defaults.dpValChe + max(valChiWatIsoHdr.dpValve_nominal), datPumChiWatHdr.nPum)) "Headered primary CHW pump parameters"; Buildings.Templates.Plants.HeatPumps.Components.PumpsPrimaryDedicated pumPriCom( redeclare final package Medium=Medium, final nPumHeaWat=nHp, final nPumChiWat=0, final nHp=nHp, typArrPumPri=Buildings.Templates.Components.Types.PumpArrangement.Dedicated, have_pumPriComHp=true, have_pumHeaWatPriVar=false, have_pumChiWatPriVar=false, datPumHeaWat=datPumPriCom, final energyDynamics=energyDynamics) "Primary pumps - Heating and cooling system with common constant speed dedicated primary pumps"; Fluid.FixedResistances.PressureDrop hpCom[nHp]( redeclare each final package Medium=Medium, each m_flow_nominal=datHp.mHeaWatHp_flow_nominal, each dp_nominal=datHp.dpHeaWatHp_nominal) "Heat pump HX"; Fluid.Sources.Boundary_pT ret( redeclare final package Medium=Medium, p=Buildings.Templates.Data.Defaults.pHeaWat_rel_nominal + 101325, nPorts=nHp) "Boundary condition at return"; Controls.OpenLoop ctl(final cfg=datCtl.cfg, final dat=datCtl) "Plant controller"; Buildings.Templates.Plants.HeatPumps.Components.PumpsPrimaryDedicated pumPriNoDed( redeclare final package Medium=Medium, nPumHeaWat=0, nPumChiWat=0, final nHp=nHp, typArrPumPri=Buildings.Templates.Components.Types.PumpArrangement.Headered, have_pumHeaWatPriVar=false, have_pumChiWatPriVar=false, datPumHeaWat=datPumPriCom, final energyDynamics=energyDynamics) "No dedicated primary pumps (headered pumps)"; Fluid.FixedResistances.PressureDrop hpHdr[nHp]( redeclare each final package Medium=Medium, each m_flow_nominal=datHp.mHeaWatHp_flow_nominal, each dp_nominal=datHp.dpHeaWatHp_nominal) "Heat pump HX"; Fluid.Sources.Boundary_pT ret1( redeclare final package Medium=Medium, p=Buildings.Templates.Data.Defaults.pHeaWat_rel_nominal + 101325, nPorts=nHp) "Boundary condition at return"; Controls.OpenLoop ctlNoDed(final cfg=datCtlNoDed.cfg, final dat=datCtlNoDed) "Plant controller"; Buildings.Templates.Components.Pumps.Multiple pumHeaWatPriHdr( have_var=false, final energyDynamics=energyDynamics, nPum=nHp, dat=datPumHeaWatHdr) "Headered primary HW pumps"; Buildings.Templates.Plants.HeatPumps.Interfaces.Bus busPla "Plant control bus"; Buildings.Templates.Plants.HeatPumps.Components.PumpsPrimaryDedicated pumPriSep( redeclare final package Medium=Medium, final nPumHeaWat=nHp, final nPumChiWat=nHp, final nHp=nHp, typArrPumPri=Buildings.Templates.Components.Types.PumpArrangement.Dedicated, have_pumPriComHp=false, have_pumHeaWatPriVar=false, have_pumChiWatPriVar=false, datPumHeaWat=datPumHeaWat, final datPumChiWat=datPumChiWat, final energyDynamics=energyDynamics) "Primary pumps - Heating and cooling system with separate constant speed dedicated CHW pumps"; Controls.OpenLoop ctlSep(final cfg=datCtlSep.cfg, final dat=datCtlSep) "Plant controller"; Fluid.FixedResistances.PressureDrop hpSep[nHp]( redeclare each final package Medium=Medium, each m_flow_nominal=datHp.mHeaWatHp_flow_nominal, each dp_nominal=datHp.dpHeaWatHp_nominal) "Heat pump HX"; Buildings.Templates.Components.Actuators.Valve valHeaWatIsoCom[nHp]( redeclare each final package Medium=Medium, each typ=Buildings.Templates.Components.Types.Valve.TwoWayTwoPosition, dat( each m_flow_nominal=datHp.mHeaWatHp_flow_nominal, each dpValve_nominal=Buildings.Templates.Data.Defaults.dpValIso, dpFixed_nominal=Buildings.Templates.Utilities.computeBalancingPressureDrop( V_flow_nominal=fill(datHp.mHeaWatHp_flow_nominal, nHp) / datPumPriCom.rho_default, dp_nominal=pumPriCom.dpValCheHeaWat_nominal * (datHp.mHeaWatHp_flow_nominal / max( datHp.mHeaWatHp_flow_nominal, datHp.mChiWatHp_flow_nominal)) ^ 2 .+ fill( datHp.dpHeaWatHp_nominal, nHp) .+ valHeaWatIsoCom.dpValve_nominal, prePum=datPumPriCom.per.pressure)), each from_dp=true) "Primary HW loop isolation valve"; Buildings.Templates.Components.Actuators.Valve valChiWatIsoCom[nHp]( redeclare each final package Medium=Medium, each typ=Buildings.Templates.Components.Types.Valve.TwoWayTwoPosition, dat( each m_flow_nominal=datHp.mChiWatHp_flow_nominal, each dpValve_nominal=Buildings.Templates.Data.Defaults.dpValIso, dpFixed_nominal=Buildings.Templates.Utilities.computeBalancingPressureDrop( V_flow_nominal=fill(datHp.mChiWatHp_flow_nominal, nHp) / datPumPriCom.rho_default, dp_nominal=pumPriCom.dpValCheHeaWat_nominal * (datHp.mChiWatHp_flow_nominal / max( datHp.mHeaWatHp_flow_nominal, datHp.mChiWatHp_flow_nominal)) ^ 2 .+ fill( datHp.dpChiWatHp_nominal, nHp) .+ valChiWatIsoCom.dpValve_nominal, prePum=datPumPriCom.per.pressure)), each from_dp=true) "Primary CHW loop isolation valve"; Buildings.Templates.Plants.HeatPumps.Interfaces.Bus busPla1 "Plant control bus"; Buildings.Templates.Components.Actuators.Valve valChiWatIsoHdr[nHp]( redeclare each final package Medium=Medium, each typ=Buildings.Templates.Components.Types.Valve.TwoWayTwoPosition, dat( each m_flow_nominal=datHp.mChiWatHp_flow_nominal, each dpValve_nominal=Buildings.Templates.Data.Defaults.dpValIso, each dpFixed_nominal=0), each from_dp=true) "Primary CHW loop isolation valve"; Buildings.Templates.Components.Actuators.Valve valHeaWatIsoHdr[nHp]( redeclare each final package Medium=Medium, each typ=Buildings.Templates.Components.Types.Valve.TwoWayTwoPosition, dat( each m_flow_nominal=datHp.mHeaWatHp_flow_nominal, each dpValve_nominal=Buildings.Templates.Data.Defaults.dpValIso, each dpFixed_nominal=0), each from_dp=true) "Primary HW loop isolation valve"; Buildings.Templates.Plants.HeatPumps.Interfaces.Bus busPla2 "Plant control bus"; Buildings.Templates.Plants.HeatPumps.Components.PumpsPrimaryDedicated pumPriHea( redeclare final package Medium=Medium, nPumHeaWat=nHp, nPumChiWat=0, final nHp=nHp, typArrPumPri=Buildings.Templates.Components.Types.PumpArrangement.Dedicated, have_pumPriComHp=false, have_pumHeaWatPriVar=true, have_pumChiWatPriVar=false, datPumHeaWat=datPumHeaWatHea, final energyDynamics=energyDynamics) "Primary pumps - Heating-only system with variable speed dedicated primary pumps"; Fluid.Sources.Boundary_pT ret3( redeclare final package Medium=Medium, p=Buildings.Templates.Data.Defaults.pHeaWat_rel_nominal + 101325, nPorts=1) "Boundary condition at return"; Controls.OpenLoop ctlHea( final cfg=datCtlHea.cfg, final dat=datCtlHea, yPumHeaWatPriDed(k=r_N)) "Plant controller"; Fluid.FixedResistances.PressureDrop hpHea[nHp]( redeclare each final package Medium=Medium, each m_flow_nominal=datHp.mHeaWatHp_flow_nominal, each dp_nominal=datHp.dpHeaWatHp_nominal) "Heat pump HX"; Fluid.FixedResistances.PressureDrop priHeaWat( redeclare final package Medium=Medium, final m_flow_nominal=sum(datPumHeaWat.m_flow_nominal), final dp_nominal=0) "Primary HW loop"; Fluid.Sources.Boundary_pT ret2( redeclare final package Medium=Medium, p=Buildings.Templates.Data.Defaults.pHeaWat_rel_nominal + 101325, nPorts=nHp) "Boundary condition at return"; Buildings.Templates.Components.Actuators.Valve valHeaWatIsoSep[nHp]( redeclare each final package Medium=Medium, each typ=Buildings.Templates.Components.Types.Valve.TwoWayTwoPosition, dat( each m_flow_nominal=datHp.mHeaWatHp_flow_nominal, each dpValve_nominal=Buildings.Templates.Data.Defaults.dpValIso), each from_dp=true, each linearized=true) "Primary HW loop isolation valve"; Buildings.Templates.Components.Actuators.Valve valChiWatIsoSep[nHp]( redeclare each final package Medium=Medium, each typ=Buildings.Templates.Components.Types.Valve.TwoWayTwoPosition, dat( each m_flow_nominal=datHp.mChiWatHp_flow_nominal, each dpValve_nominal=Buildings.Templates.Data.Defaults.dpValIso), each from_dp=true, each linearized=true) "Primary CHW loop isolation valve"; Buildings.Templates.Components.Pumps.Multiple pumChiWatPriHdr( have_var=false, final energyDynamics=energyDynamics, nPum=nHp, dat=datPumChiWatHdr) "Headered primary CHW pumps"; initial equation // Calculation of pump speed to provide design flow. if use_spePumIni then fill(0, nHp) = Buildings.Templates.Utilities.computeBalancingPressureDrop( V_flow_nominal=fill(datHp.mHeaWatHp_flow_nominal, nHp) / datPumHeaWatHea.rho_default, dp_nominal=pumPriHea.dpValCheHeaWat_nominal .+ fill( datHp.dpHeaWatHp_nominal, nHp) .+ fill(Buildings.Templates.Data.Defaults.dpValIso, nHp), prePum=datPumHeaWatHea.per.pressure, r_N=r_N); else r_N = r_NDef; end if; equation for i in 1:nHp loop connect(priHeaWat.port_a, pumPriHea.ports_bHeaWat[i]); connect(priHeaWat.port_b, pumPriHea.ports_aChiHeaWat[i]); end for; connect(pumPriCom.ports_bChiHeaWatHp, hpCom.port_a); connect(hpCom.port_b, pumPriCom.ports_aChiHeaWatHp); connect(pumPriNoDed.ports_bChiHeaWatHp, hpHdr.port_a); connect(hpHdr.port_b, pumPriNoDed.ports_aChiHeaWatHp); connect(pumPriNoDed.ports_bChiHeaWat, pumHeaWatPriHdr.ports_a); connect(ctlNoDed.bus, busPla); connect(busPla.pumHeaWatPri, pumHeaWatPriHdr.bus); connect(pumPriSep.ports_bChiHeaWatHp, hpSep.port_a); connect(hpSep.port_b, pumPriSep.ports_aChiHeaWatHp); connect(pumPriCom.ports_bChiHeaWat, valHeaWatIsoCom.port_a); connect(valHeaWatIsoCom.port_b, pumPriCom.ports_aChiHeaWat); connect(pumPriCom.ports_bChiHeaWat, valChiWatIsoCom.port_a); connect(valChiWatIsoCom.port_b, pumPriCom.ports_aChiHeaWat); connect(ctl.bus, busPla1); connect(busPla1.valHeaWatHpInlIso, valHeaWatIsoCom.bus); connect(busPla1.valChiWatHpInlIso, valChiWatIsoCom.bus); connect(pumHeaWatPriHdr.ports_b, valHeaWatIsoHdr.port_a); connect(valHeaWatIsoHdr.port_b, pumPriNoDed.ports_aChiHeaWat); connect(valChiWatIsoHdr.port_b, pumPriNoDed.ports_aChiHeaWat); connect(ret1.ports, valHeaWatIsoHdr.port_b); connect(busPla.valHeaWatHpInlIso, valHeaWatIsoHdr.bus); connect(busPla.valChiWatHpInlIso, valChiWatIsoHdr.bus); connect(busPla1, pumPriCom.bus); connect(ctlSep.bus, busPla2); connect(pumPriHea.ports_bChiHeaWatHp, hpHea.port_a); connect(hpHea.port_b, pumPriHea.ports_aChiHeaWatHp); connect(ctlHea.bus, pumPriHea.bus); connect(ret3.ports[1], priHeaWat.port_b); connect(valHeaWatIsoCom.port_b, ret.ports); connect(busPla2.valHeaWatHpInlIso, valHeaWatIsoSep.bus); connect(busPla2.valChiWatHpInlIso, valChiWatIsoSep.bus); connect(pumPriSep.ports_bHeaWat, valHeaWatIsoSep.port_a); connect(valHeaWatIsoSep.port_b, pumPriSep.ports_aChiHeaWat); connect(busPla2, pumPriSep.bus); connect(valHeaWatIsoSep.port_b, ret2.ports); connect(pumPriSep.ports_bChiWat, valChiWatIsoSep.port_a); connect(valChiWatIsoSep.port_b, pumPriSep.ports_aChiHeaWat); connect(pumChiWatPriHdr.ports_b, valChiWatIsoHdr.port_a); connect(pumPriNoDed.ports_bChiHeaWat, pumChiWatPriHdr.ports_a); connect(busPla.pumChiWatPri, pumChiWatPriHdr.bus); end PumpsPrimaryDedicated;

Buildings.Templates.Plants.HeatPumps.Components.Validation.PumpsPrimaryDedicatedPolyvalent Buildings.Templates.Plants.HeatPumps.Components.Validation.PumpsPrimaryDedicatedPolyvalent

Validation model for dedicated primary pump component with polyvalent heat pumps

Buildings.Templates.Plants.HeatPumps.Components.Validation.PumpsPrimaryDedicatedPolyvalent

Information

This model validates the model Buildings.Templates.Plants.HeatPumps.Components.PumpsPrimaryDedicated for the following plant configurations.

In each configuration, two identical heat pumps and two identical polyvalent units are represented by fixed flow resistances (components hp*, phpCon* and phpEva*).

The model uses open loop controls and the simulation allows verifying that design flow is obtained in each loop and each unit when the pumps are enabled.

In the configurations with headered pumps, or with a single dedicated primary pump serving both CHW and HW circuits, this requires adjusting the design pressure drop of the balancing valves which are modeled by fixed flow resistances in the isolation valve components valHeaWatIso* and valChiWatIso*. This adjustment is done programmatically using the function Buildings.Templates.Utilities.computeBalancingPressureDrop.

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

Parameters

TypeNameDefaultDescription
replaceable package MediumBuildings.Media.WaterCHW/HW medium
ControllerdatCtldatCtl(cfg(typ=Buildings.Tem...Controller parameters
ControllerdatCtlNoDeddatCtlNoDed(cfg(typ=Building...Controller parameters
ControllerdatCtlSepdatCtlSep(cfg(typ=Buildings....Controller parameters
HeatPumpGroupdatHpPhpdatHpPhp(have_hp=true, have_...Parameters for reversible and polyvalent heat pumps
PumpMultipledatPumPriComdatPumPriCom(typ=Buildings.T...Primary pump parameters – Configuration with common HW/CHW pump for HP
PumpMultipledatPumHeaWatdatPumHeaWat(typ=Buildings.T...Dedicated primary HW pump parameters – HP and polyvalent HPs
PumpMultipledatPumChiWatdatPumChiWat(typ=Buildings.T...Dedicated primary CHW pump parameters – HP and polyvalent HPs
PumpMultipledatPumHeaWatHdrdatPumHeaWatHdr(typ=Building...Headered primary HW pump parameters – HP and polyvalent HPs
PumpMultipledatPumChiWatHdrdatPumChiWatHdr(typ=Building...Headered primary CHW pump parameters – HP and polyvalent HPs
PumpMultipledatPumChiWatPhpdatPumChiWatPhp(typ=Building...Dedicated primary CHW pump parameters – Polyvalent heat pumps
Dynamics
Conservation equations
DynamicsenergyDynamicsModelica.Fluid.Types.Dynamic...Type of energy balance: dynamic (3 initialization options) or steady state

Connectors

TypeNameDescription
replaceable package MediumCHW/HW medium
BusbusPla2Plant control bus
BusbusPlaPlant control bus
BusbusPla1Plant control bus

Modelica definition

model PumpsPrimaryDedicatedPolyvalent "Validation model for dedicated primary pump component with polyvalent heat pumps" extends Modelica.Icons.Example; replaceable package Medium = Buildings.Media.Water constrainedby Modelica.Media.Interfaces.PartialMedium "CHW/HW medium"; final parameter Integer nHp = 2 "Number of heat pumps (excluding polyvalent HPs)"; final parameter Integer nPhp = 2 "Number of polyvalent heat pumps"; parameter Modelica.Fluid.Types.Dynamics energyDynamics = Modelica.Fluid.Types.Dynamics.FixedInitial "Type of energy balance: dynamic (3 initialization options) or steady state"; parameter Data.Controller datCtl( cfg( typ=Buildings.Templates.Plants.Controls.Types.PlantHeatPump.ReversiblePolyvalent, have_inpSch=false, have_hp=true, have_hrc=false, have_valHpOutIso=false, have_valHpInlIso=true, have_valPhpOutIso=false, have_valPhpInlIso=false, have_chiWat=true, have_php=true, final nPhp=nPhp, typPumHeaWatPri=Buildings.Templates.Plants.HeatPumps.Types.PumpsPrimary.Constant, typPumChiWatPri=Buildings.Templates.Plants.HeatPumps.Types.PumpsPrimary.Constant, typPumHeaWatSec=Buildings.Templates.Plants.HeatPumps.Types.PumpsSecondary.None, typTanHeaWat=Buildings.Templates.Components.Types.IntegrationPoint.None, typTanChiWat=Buildings.Templates.Components.Types.IntegrationPoint.None, typDis=Buildings.Templates.Plants.HeatPumps.Types.Distribution.Constant1Only, nPumChiWatSec=0, rhoHeaWat_default=Buildings.Media.Water.d_const, typCtl=Buildings.Templates.Plants.HeatPumps.Types.Controller.OpenLoop, is_rev=true, typHp=Buildings.Templates.Components.Types.HeatPump.AirToWater, rhoChiWat_default=Buildings.Media.Water.d_const, cpChiWat_default=Buildings.Utilities.Psychrometrics.Constants.cpWatLiq, have_hotWat=false, have_valChiWatMinByp=false, have_valHeaWatMinByp=false, cpHeaWat_default=Buildings.Utilities.Psychrometrics.Constants.cpWatLiq, cpSou_default=Buildings.Utilities.Psychrometrics.Constants.cpWatLiq, have_senDpChiWatRemWir=true, typArrPumPri=Buildings.Templates.Components.Types.PumpArrangement.Dedicated, final nHp=nHp, final nPumHeaWatPri=nHp + nPhp, final nPumChiWatPri=nPhp, have_heaWat=true, nPumHeaWatSec=0, rhoSou_default=Buildings.Media.Air.dStp, have_senDpHeaWatRemWir=true, typPumChiWatSec=Buildings.Templates.Plants.HeatPumps.Types.PumpsSecondary.None, nSenDpHeaWatRem=0, nSenDpChiWatRem=0, nAirHan=0, nEquZon=0, have_pumChiWatPriDedHp=false), THeaWatSup_nominal=Buildings.Templates.Data.Defaults.THeaWatSupMed, TChiWatSup_nominal=Buildings.Templates.Data.Defaults.TChiWatSup, dpChiWatRemSet_max=fill( Buildings.Templates.Data.Defaults.dpChiWatRemSet_max, datCtl.cfg.nSenDpChiWatRem), dpHeaWatRemSet_max=fill( Buildings.Templates.Data.Defaults.dpHeaWatRemSet_max, datCtl.cfg.nSenDpHeaWatRem), staHp={fill(1, datCtl.cfg.nHp)}) "Controller parameters"; parameter Data.Controller datCtlNoDed( cfg( typ=Buildings.Templates.Plants.Controls.Types.PlantHeatPump.ReversiblePolyvalent, have_inpSch=false, have_hp=true, have_hrc=false, have_valHpOutIso=true, have_valHpInlIso=true, have_valPhpOutIso=false, have_valPhpInlIso=true, have_chiWat=true, have_php=true, final nPhp=nPhp, typPumHeaWatPri=Buildings.Templates.Plants.HeatPumps.Types.PumpsPrimary.Constant, typPumChiWatPri=Buildings.Templates.Plants.HeatPumps.Types.PumpsPrimary.Constant, typPumHeaWatSec=Buildings.Templates.Plants.HeatPumps.Types.PumpsSecondary.None, typTanHeaWat=Buildings.Templates.Components.Types.IntegrationPoint.None, typTanChiWat=Buildings.Templates.Components.Types.IntegrationPoint.None, typDis=Buildings.Templates.Plants.HeatPumps.Types.Distribution.Constant1Only, nPumChiWatSec=0, rhoHeaWat_default=Buildings.Media.Water.d_const, typCtl=Buildings.Templates.Plants.HeatPumps.Types.Controller.OpenLoop, is_rev=true, typHp=Buildings.Templates.Components.Types.HeatPump.AirToWater, rhoChiWat_default=Buildings.Media.Water.d_const, cpChiWat_default=Buildings.Utilities.Psychrometrics.Constants.cpWatLiq, have_hotWat=false, have_valChiWatMinByp=false, have_valHeaWatMinByp=false, cpHeaWat_default=Buildings.Utilities.Psychrometrics.Constants.cpWatLiq, cpSou_default=Buildings.Utilities.Psychrometrics.Constants.cpWatLiq, have_senDpChiWatRemWir=true, typArrPumPri=Buildings.Templates.Components.Types.PumpArrangement.Headered, final nHp=nHp, final nPumHeaWatPri=nHp + nPhp, have_heaWat=true, nPumHeaWatSec=0, rhoSou_default=Buildings.Media.Air.dStp, have_senDpHeaWatRemWir=true, typPumChiWatSec=Buildings.Templates.Plants.HeatPumps.Types.PumpsSecondary.None, final nPumChiWatPri=nHp + nPhp, nSenDpHeaWatRem=0, nSenDpChiWatRem=0, nAirHan=0, nEquZon=0, have_pumChiWatPriDedHp=false), THeaWatSup_nominal=Buildings.Templates.Data.Defaults.THeaWatSupMed, TChiWatSup_nominal=Buildings.Templates.Data.Defaults.TChiWatSup, dpChiWatRemSet_max=fill( Buildings.Templates.Data.Defaults.dpChiWatRemSet_max, datCtlNoDed.cfg.nSenDpChiWatRem), dpHeaWatRemSet_max=fill( Buildings.Templates.Data.Defaults.dpHeaWatRemSet_max, datCtlNoDed.cfg.nSenDpHeaWatRem), staHp={fill(1, datCtlNoDed.cfg.nHp)}) "Controller parameters"; parameter Data.Controller datCtlSep( cfg( typ=Buildings.Templates.Plants.Controls.Types.PlantHeatPump.ReversiblePolyvalent, have_inpSch=false, have_hp=true, have_hrc=false, have_valHpOutIso=false, have_valHpInlIso=true, have_valPhpOutIso=false, have_valPhpInlIso=false, have_chiWat=true, have_php=true, final nPhp=nPhp, typPumHeaWatPri=Buildings.Templates.Plants.HeatPumps.Types.PumpsPrimary.Constant, typPumChiWatPri=Buildings.Templates.Plants.HeatPumps.Types.PumpsPrimary.Constant, typPumHeaWatSec=Buildings.Templates.Plants.HeatPumps.Types.PumpsSecondary.None, typTanHeaWat=Buildings.Templates.Components.Types.IntegrationPoint.None, typTanChiWat=Buildings.Templates.Components.Types.IntegrationPoint.None, typDis=Buildings.Templates.Plants.HeatPumps.Types.Distribution.Constant1Only, nPumChiWatSec=0, rhoHeaWat_default=Buildings.Media.Water.d_const, typCtl=Buildings.Templates.Plants.HeatPumps.Types.Controller.OpenLoop, is_rev=true, typHp=Buildings.Templates.Components.Types.HeatPump.AirToWater, rhoChiWat_default=Buildings.Media.Water.d_const, cpChiWat_default=Buildings.Utilities.Psychrometrics.Constants.cpWatLiq, have_hotWat=false, have_valChiWatMinByp=false, have_valHeaWatMinByp=false, cpHeaWat_default=Buildings.Utilities.Psychrometrics.Constants.cpWatLiq, cpSou_default=Buildings.Utilities.Psychrometrics.Constants.cpWatLiq, have_senDpChiWatRemWir=true, typArrPumPri=Buildings.Templates.Components.Types.PumpArrangement.Dedicated, final nHp=nHp, final nPumHeaWatPri=nHp + nPhp, final nPumChiWatPri=nHp + nPhp, have_heaWat=true, nPumHeaWatSec=0, rhoSou_default=Buildings.Media.Air.dStp, have_senDpHeaWatRemWir=true, typPumChiWatSec=Buildings.Templates.Plants.HeatPumps.Types.PumpsSecondary.None, nSenDpHeaWatRem=0, nSenDpChiWatRem=0, nAirHan=0, nEquZon=0, have_pumChiWatPriDedHp=true), THeaWatSup_nominal=Buildings.Templates.Data.Defaults.THeaWatSupMed, TChiWatSup_nominal=Buildings.Templates.Data.Defaults.TChiWatSup, dpChiWatRemSet_max=fill( Buildings.Templates.Data.Defaults.dpChiWatRemSet_max, datCtlSep.cfg.nSenDpChiWatRem), dpHeaWatRemSet_max=fill( Buildings.Templates.Data.Defaults.dpHeaWatRemSet_max, datCtlSep.cfg.nSenDpHeaWatRem), staHp={fill(1, datCtlSep.cfg.nHp)}) "Controller parameters"; parameter Data.HeatPumpGroup datHpPhp( have_hp=true, have_php=true, final typHp=Buildings.Templates.Components.Types.HeatPump.AirToWater, final is_rev=true, mHeaWatHp_flow_nominal=datHpPhp.capHeaHp_nominal / abs( datHpPhp.THeaWatSupHp_nominal - Buildings.Templates.Data.Defaults.THeaWatRetMed) / Buildings.Utilities.Psychrometrics.Constants.cpWatLiq, dpHeaWatHp_nominal=Buildings.Templates.Data.Defaults.dpHeaWatHp, capHeaHp_nominal=500E3, THeaWatSupHp_nominal=Buildings.Templates.Data.Defaults.THeaWatSupMed, TSouHeaHp_nominal=Buildings.Templates.Data.Defaults.TOutHpHeaLow, mChiWatHp_flow_nominal=datHpPhp.capCooHp_nominal / abs( datHpPhp.TChiWatSupHp_nominal - Buildings.Templates.Data.Defaults.TChiWatRet) / Buildings.Utilities.Psychrometrics.Constants.cpWatLiq, capCooHp_nominal=500E3, TChiWatSupHp_nominal=Buildings.Templates.Data.Defaults.TChiWatSup, TSouCooHp_nominal=Buildings.Templates.Data.Defaults.TOutHpCoo, PHp_min=1.0E3, perHeaHp( fileName=Modelica.Utilities.Files.loadResource( "modelica://Buildings/Resources/Data/Templates/Components/HeatPumps/Validation/AWHP_Heating.txt"), PLRSup={1}, use_TEvaOutForTab=false, use_TConOutForTab=true, tabUppBou=[263.15, 323.15; 313.15, 323.15]), perCooHp( fileName=Modelica.Utilities.Files.loadResource( "modelica://Buildings/Resources/Data/Templates/Components/HeatPumps/Validation/AWHP_Cooling.txt"), PLRSup={1}), mHeaWatPhp_flow_nominal=datHpPhp.capHeaPhp_nominal / abs( datHpPhp.THeaWatSupPhp_nominal - Buildings.Templates.Data.Defaults.THeaWatRetMed) / Buildings.Utilities.Psychrometrics.Constants.cpWatLiq, dpHeaWatPhp_nominal=Buildings.Templates.Data.Defaults.dpHeaWatHp, capHeaPhp_nominal=500E3, THeaWatSupPhp_nominal=Buildings.Templates.Data.Defaults.THeaWatSupMed, TSouHeaPhp_nominal=Buildings.Templates.Data.Defaults.TOutHpHeaLow, mChiWatPhp_flow_nominal=datHpPhp.capCooPhp_nominal / abs( datHpPhp.TChiWatSupPhp_nominal - Buildings.Templates.Data.Defaults.TChiWatRet) / Buildings.Utilities.Psychrometrics.Constants.cpWatLiq, capCooPhp_nominal=500E3, dpChiWatPhp_nominal=Buildings.Templates.Data.Defaults.dpChiWatChi, TChiWatSupPhp_nominal=Buildings.Templates.Data.Defaults.TChiWatSup, TSouCooPhp_nominal=Buildings.Templates.Data.Defaults.TOutHpCoo, PPhp_min=1.0E3, capHeaShcPhp_nominal=500E3, capCooShcPhp_nominal=500E3, perPhp( 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"))) "Parameters for reversible and polyvalent heat pumps"; parameter Buildings.Templates.Components.Data.PumpMultiple datPumPriCom( typ=Buildings.Templates.Components.Types.Pump.Multiple, nPum=nHp + nPhp, m_flow_nominal=cat( 1, fill( max(datHpPhp.mHeaWatHp_flow_nominal, datHpPhp.mChiWatHp_flow_nominal), nHp), fill(datHpPhp.mHeaWatPhp_flow_nominal, nPhp)), dp_nominal=cat( 1, fill( max(datHpPhp.dpHeaWatHp_nominal, datHpPhp.dpChiWatHp_nominal) + Buildings.Templates.Data.Defaults.dpValChe + max( max(valChiWatIsoCom.dpValve_nominal), max(valHeaWatIsoCom.dpValve_nominal)), nHp), fill( datHpPhp.dpHeaWatHp_nominal + Buildings.Templates.Data.Defaults.dpValChe, nPhp))) "Primary pump parameters – Configuration with common HW/CHW pump for HP"; parameter Buildings.Templates.Components.Data.PumpMultiple datPumHeaWat( typ=Buildings.Templates.Components.Types.Pump.Multiple, nPum=nHp + nPhp, m_flow_nominal=cat( 1, fill(datHpPhp.mHeaWatHp_flow_nominal, nHp), fill(datHpPhp.mHeaWatPhp_flow_nominal, nPhp)), dp_nominal=cat( 1, fill( datHpPhp.dpHeaWatHp_nominal + Buildings.Templates.Data.Defaults.dpValChe + max( valHeaWatIsoCom.dpValve_nominal), nHp), fill( datHpPhp.dpHeaWatPhp_nominal + Buildings.Templates.Data.Defaults.dpValChe, nPhp))) "Dedicated primary HW pump parameters – HP and polyvalent HPs"; parameter Buildings.Templates.Components.Data.PumpMultiple datPumChiWat( typ=Buildings.Templates.Components.Types.Pump.Multiple, final nPum=nHp + nPhp, m_flow_nominal=cat( 1, fill(datHpPhp.mChiWatHp_flow_nominal, nHp), fill(datHpPhp.mChiWatPhp_flow_nominal, nPhp)), dp_nominal=cat( 1, fill( datHpPhp.dpChiWatHp_nominal + Buildings.Templates.Data.Defaults.dpValChe + max( valHeaWatIsoCom.dpValve_nominal), nHp), fill( datHpPhp.dpChiWatPhp_nominal + Buildings.Templates.Data.Defaults.dpValChe, nPhp))) "Dedicated primary CHW pump parameters – HP and polyvalent HPs"; parameter Buildings.Templates.Components.Data.PumpMultiple datPumHeaWatHdr( typ=Buildings.Templates.Components.Types.Pump.Multiple, nPum=nHp + nPhp, m_flow_nominal=fill( (datHpPhp.mHeaWatHp_flow_nominal * nHp + datHpPhp.mHeaWatPhp_flow_nominal * nPhp) / datPumHeaWatHdr.nPum, datPumHeaWatHdr.nPum), dp_nominal=fill( max(datHpPhp.dpHeaWatHp_nominal, datHpPhp.dpHeaWatPhp_nominal) + Buildings.Templates.Data.Defaults.dpValChe + max( valHeaWatIsoHdr.dpValve_nominal), datPumHeaWatHdr.nPum)) "Headered primary HW pump parameters – HP and polyvalent HPs"; parameter Buildings.Templates.Components.Data.PumpMultiple datPumChiWatHdr( typ=Buildings.Templates.Components.Types.Pump.Multiple, final nPum=nHp + nPhp, m_flow_nominal=fill( (datHpPhp.mChiWatHp_flow_nominal * nHp + datHpPhp.mChiWatPhp_flow_nominal * nPhp) / datPumChiWatHdr.nPum, datPumChiWatHdr.nPum), dp_nominal=fill( max(datHpPhp.dpChiWatHp_nominal, datHpPhp.dpChiWatPhp_nominal) + Buildings.Templates.Data.Defaults.dpValChe + max( valChiWatIsoHdr.dpValve_nominal), datPumChiWatHdr.nPum)) "Headered primary CHW pump parameters – HP and polyvalent HPs"; parameter Buildings.Templates.Components.Data.PumpMultiple datPumChiWatPhp( typ=Buildings.Templates.Components.Types.Pump.Multiple, final nPum=nPhp, m_flow_nominal=fill(datHpPhp.mChiWatPhp_flow_nominal, nPhp), dp_nominal=fill( datHpPhp.dpChiWatPhp_nominal + Buildings.Templates.Data.Defaults.dpValChe, nPhp)) "Dedicated primary CHW pump parameters – Polyvalent heat pumps"; Buildings.Templates.Plants.HeatPumps.Interfaces.Bus busPla2 "Plant control bus"; Buildings.Templates.Plants.HeatPumps.Components.PumpsPrimaryDedicated pumPriCom( redeclare final package Medium=Medium, final nPumHeaWat=nHp + nPhp, final nPumChiWat=nPhp, have_hp=true, have_php=true, final nHp=nHp, final nPhp=nPhp, typArrPumPri=Buildings.Templates.Components.Types.PumpArrangement.Dedicated, have_pumPriComHp=true, have_pumHeaWatPriVar=false, have_pumChiWatPriVar=false, datPumHeaWat=datPumPriCom, final datPumChiWat=datPumChiWatPhp, final energyDynamics=energyDynamics) "Primary pumps – Heat pumps with common constant speed dedicated primary pumps"; Fluid.FixedResistances.PressureDrop hpCom[nHp]( redeclare each final package Medium=Medium, each m_flow_nominal=datHpPhp.mHeaWatHp_flow_nominal, each dp_nominal=datHpPhp.dpHeaWatHp_nominal) "Heat pump HX"; Fluid.Sources.Boundary_pT ret( redeclare final package Medium=Medium, p=Buildings.Templates.Data.Defaults.pHeaWat_rel_nominal + 101325, nPorts=nHp) "Boundary condition at return"; Controls.OpenLoop ctl(final cfg=datCtl.cfg, final dat=datCtl) "Plant controller"; Buildings.Templates.Plants.HeatPumps.Components.PumpsPrimaryDedicated pumPriNoDed( redeclare final package Medium=Medium, final nPumHeaWat=0, final nPumChiWat=0, have_hp=true, have_php=true, final nHp=nHp, final nPhp=nPhp, typArrPumPri=Buildings.Templates.Components.Types.PumpArrangement.Headered, have_pumPriComHp=false, have_pumHeaWatPriVar=false, have_pumChiWatPriVar=false, datPumHeaWat=datPumPriCom, final energyDynamics=energyDynamics) "No dedicated primary pumps (headered pumps)"; Fluid.FixedResistances.PressureDrop hpHdr[nHp]( redeclare each final package Medium=Medium, each m_flow_nominal=datHpPhp.mHeaWatHp_flow_nominal, each dp_nominal=datHpPhp.dpHeaWatHp_nominal) "Heat pump HX"; Controls.OpenLoop ctlNoDed(final cfg=datCtlNoDed.cfg, final dat=datCtlNoDed) "Plant controller"; Buildings.Templates.Components.Pumps.Multiple pumHeaWatPriHdr( have_var=false, final energyDynamics=energyDynamics, nPum=nHp + nPhp, dat=datPumHeaWatHdr) "Headered primary HW pumps"; Buildings.Templates.Plants.HeatPumps.Interfaces.Bus busPla "Plant control bus"; Buildings.Templates.Plants.HeatPumps.Components.PumpsPrimaryDedicated pumPriSep( redeclare final package Medium=Medium, final nPumHeaWat=nHp + nPhp, final nPumChiWat=nHp + nPhp, have_hp=true, have_php=true, final nHp=nHp, final nPhp=nPhp, typArrPumPri=Buildings.Templates.Components.Types.PumpArrangement.Dedicated, have_pumPriComHp=false, have_pumHeaWatPriVar=false, have_pumChiWatPriVar=false, datPumHeaWat=datPumHeaWat, final datPumChiWat=datPumChiWat, final energyDynamics=energyDynamics) "Primary pumps – Heat pumps with separate constant speed dedicated CHW pumps"; Fluid.Sources.Boundary_pT ret2( redeclare final package Medium=Medium, p=Buildings.Templates.Data.Defaults.pHeaWat_rel_nominal + 101325, nPorts=nHp) "Boundary condition at return"; Controls.OpenLoop ctlSep(final cfg=datCtlSep.cfg, final dat=datCtlSep) "Plant controller"; Fluid.FixedResistances.PressureDrop hpSep[nHp]( redeclare each final package Medium=Medium, each m_flow_nominal=datHpPhp.mHeaWatHp_flow_nominal, each dp_nominal=datHpPhp.dpHeaWatHp_nominal) "Heat pump HX"; Buildings.Templates.Components.Actuators.Valve valHeaWatIsoCom[nHp]( redeclare each final package Medium=Medium, each typ=Buildings.Templates.Components.Types.Valve.TwoWayTwoPosition, dat( each m_flow_nominal=datHpPhp.mHeaWatHp_flow_nominal, each dpValve_nominal=Buildings.Templates.Data.Defaults.dpValIso, dpFixed_nominal=Buildings.Templates.Utilities.computeBalancingPressureDrop( V_flow_nominal=fill(datHpPhp.mHeaWatHp_flow_nominal, nHp) / datPumPriCom.rho_default, dp_nominal=pumPriCom.dpValCheHeaWat_nominal[1:nHp] * (datHpPhp.mHeaWatHp_flow_nominal / max( datHpPhp.mHeaWatHp_flow_nominal, datHpPhp.mChiWatHp_flow_nominal)) ^ 2 .+ fill(datHpPhp.dpHeaWatHp_nominal, nHp) .+ valHeaWatIsoCom.dpValve_nominal, prePum=datPumPriCom.per[1:nHp].pressure)), each from_dp=true) "Primary HW loop isolation valve"; Buildings.Templates.Components.Actuators.Valve valChiWatIsoCom[nHp]( redeclare each final package Medium=Medium, each typ=Buildings.Templates.Components.Types.Valve.TwoWayTwoPosition, dat( each m_flow_nominal=datHpPhp.mChiWatHp_flow_nominal, each dpValve_nominal=Buildings.Templates.Data.Defaults.dpValIso, dpFixed_nominal=Buildings.Templates.Utilities.computeBalancingPressureDrop( V_flow_nominal=fill(datHpPhp.mChiWatHp_flow_nominal, nHp) / datPumPriCom.rho_default, dp_nominal=pumPriCom.dpValCheHeaWat_nominal[1:nHp] * (datHpPhp.mChiWatHp_flow_nominal / max( datHpPhp.mHeaWatHp_flow_nominal, datHpPhp.mChiWatHp_flow_nominal)) ^ 2 .+ fill(datHpPhp.dpChiWatHp_nominal, nHp) .+ valChiWatIsoCom.dpValve_nominal, prePum=datPumPriCom.per[1:nHp].pressure)), each from_dp=true) "Primary CHW loop isolation valve"; Buildings.Templates.Plants.HeatPumps.Interfaces.Bus busPla1 "Plant control bus"; Buildings.Templates.Components.Actuators.Valve valChiWatIsoHdr[nHp + nPhp]( redeclare each final package Medium=Medium, each typ=Buildings.Templates.Components.Types.Valve.TwoWayTwoPosition, dat( m_flow_nominal=cat( 1, fill(datHpPhp.mChiWatHp_flow_nominal, nHp), fill(datHpPhp.mChiWatPhp_flow_nominal, nPhp)), each dpValve_nominal=Buildings.Templates.Data.Defaults.dpValIso, dpFixed_nominal=Buildings.Templates.Utilities.computeBalancingPressureDrop( V_flow_nominal=valChiWatIsoHdr.m_flow_nominal / datPumChiWatHdr.rho_default, dp_nominal=pumChiWatPriHdr.dpValChe_nominal .+ cat( 1, fill(datHpPhp.dpChiWatHp_nominal, nHp), fill(datHpPhp.dpChiWatPhp_nominal, nPhp)) .+ valChiWatIsoHdr.dpValve_nominal, prePum=datPumChiWatHdr.per.pressure)), each from_dp=true) "CHW isolation valve"; Buildings.Templates.Components.Actuators.Valve valHeaWatIsoHdr[nHp + nPhp]( redeclare each final package Medium=Medium, each typ=Buildings.Templates.Components.Types.Valve.TwoWayTwoPosition, dat( m_flow_nominal=cat( 1, fill(datHpPhp.mHeaWatHp_flow_nominal, nHp), fill(datHpPhp.mHeaWatPhp_flow_nominal, nPhp)), each dpValve_nominal=Buildings.Templates.Data.Defaults.dpValIso, dpFixed_nominal=Buildings.Templates.Utilities.computeBalancingPressureDrop( V_flow_nominal=valHeaWatIsoHdr.m_flow_nominal / datPumHeaWatHdr.rho_default, dp_nominal=pumHeaWatPriHdr.dpValChe_nominal .+ cat( 1, fill(datHpPhp.dpHeaWatHp_nominal, nHp), fill(datHpPhp.dpHeaWatPhp_nominal, nPhp)) .+ valHeaWatIsoHdr.dpValve_nominal, prePum=datPumHeaWatHdr.per.pressure)), each from_dp=true) "HW isolation valve"; Buildings.Templates.Components.Actuators.Valve valHeaWatIsoSep[nHp]( redeclare each final package Medium=Medium, each typ=Buildings.Templates.Components.Types.Valve.TwoWayTwoPosition, dat( each m_flow_nominal=datHpPhp.mHeaWatHp_flow_nominal, each dpValve_nominal=Buildings.Templates.Data.Defaults.dpValIso), each from_dp=true, each linearized=true) "Primary HW loop isolation valve"; Buildings.Templates.Components.Actuators.Valve valChiWatIsoSep[nHp]( redeclare each final package Medium=Medium, each typ=Buildings.Templates.Components.Types.Valve.TwoWayTwoPosition, dat( each m_flow_nominal=datHpPhp.mChiWatHp_flow_nominal, each dpValve_nominal=Buildings.Templates.Data.Defaults.dpValIso), each from_dp=true, each linearized=true) "Primary CHW loop isolation valve"; Buildings.Templates.Components.Pumps.Multiple pumChiWatPriHdr( have_var=false, final energyDynamics=energyDynamics, nPum=nHp + nPhp, dat=datPumChiWatHdr) "Headered primary CHW pumps"; Fluid.FixedResistances.PressureDrop phpConSep[nPhp]( redeclare each final package Medium=Medium, each m_flow_nominal=datHpPhp.mHeaWatPhp_flow_nominal, each dp_nominal=datHpPhp.dpHeaWatPhp_nominal) "Polyvalent HP condenser"; Fluid.FixedResistances.PressureDrop phpEvaSep[nPhp]( redeclare each final package Medium=Medium, each m_flow_nominal=datHpPhp.mChiWatPhp_flow_nominal, each dp_nominal=datHpPhp.dpChiWatPhp_nominal) "Polyvalent HP evaporator"; Fluid.FixedResistances.PressureDrop phpConHdr[nPhp]( redeclare each final package Medium=Medium, each m_flow_nominal=datHpPhp.mHeaWatPhp_flow_nominal, each dp_nominal=datHpPhp.dpHeaWatPhp_nominal) "Polyvalent HP condenser"; Fluid.FixedResistances.PressureDrop phpEvaHdr[nPhp]( redeclare each final package Medium=Medium, each m_flow_nominal=datHpPhp.mChiWatPhp_flow_nominal, each dp_nominal=datHpPhp.dpChiWatPhp_nominal) "Polyvalent HP evaporator"; Fluid.FixedResistances.PressureDrop phpConCom[nPhp]( redeclare each final package Medium=Medium, each m_flow_nominal=datHpPhp.mHeaWatPhp_flow_nominal, each dp_nominal=datHpPhp.dpHeaWatPhp_nominal) "Polyvalent HP condenser"; Fluid.FixedResistances.PressureDrop phpEvaCom[nPhp]( redeclare each final package Medium=Medium, each m_flow_nominal=datHpPhp.mChiWatPhp_flow_nominal, each dp_nominal=datHpPhp.dpChiWatPhp_nominal) "Polyvalent HP evaporator"; Fluid.Sources.Boundary_pT ret3( redeclare final package Medium=Medium, p=Buildings.Templates.Data.Defaults.pHeaWat_rel_nominal + 101325, nPorts=nPhp) "Boundary condition at return"; Fluid.Sources.Boundary_pT ret4( redeclare final package Medium=Medium, p=Buildings.Templates.Data.Defaults.pChiWat_rel_nominal + 101325, nPorts=nPhp) "Boundary condition at return"; Fluid.Sources.Boundary_pT ret7( redeclare final package Medium=Medium, p=Buildings.Templates.Data.Defaults.pHeaWat_rel_nominal + 101325, nPorts=nPhp) "Boundary condition at return"; Fluid.Sources.Boundary_pT ret8( redeclare final package Medium=Medium, p=Buildings.Templates.Data.Defaults.pChiWat_rel_nominal + 101325, nPorts=nPhp) "Boundary condition at return"; Fluid.Sources.Boundary_pT ret1( redeclare final package Medium=Medium, p=Buildings.Templates.Data.Defaults.pHeaWat_rel_nominal + 101325, nPorts=nHp + nPhp) "Boundary condition at return"; Fluid.Sources.Boundary_pT ret5( redeclare final package Medium=Medium, p=Buildings.Templates.Data.Defaults.pHeaWat_rel_nominal + 101325, nPorts=nPhp) "Boundary condition at return"; equation connect(pumPriCom.ports_bChiHeaWatHp, hpCom.port_a); connect(hpCom.port_b, pumPriCom.ports_aChiHeaWatHp); connect(pumPriNoDed.ports_bChiHeaWatHp, hpHdr.port_a); connect(hpHdr.port_b, pumPriNoDed.ports_aChiHeaWatHp); connect(ctlNoDed.bus, busPla); connect(busPla.pumHeaWatPri, pumHeaWatPriHdr.bus); connect(pumPriSep.ports_bChiHeaWatHp, hpSep.port_a); connect(hpSep.port_b, pumPriSep.ports_aChiHeaWatHp); connect(pumPriCom.ports_bChiHeaWat, valHeaWatIsoCom.port_a); connect(valHeaWatIsoCom.port_b, pumPriCom.ports_aChiHeaWat); connect(pumPriCom.ports_bChiHeaWat, valChiWatIsoCom.port_a); connect(valChiWatIsoCom.port_b, pumPriCom.ports_aChiHeaWat); connect(ctl.bus, busPla1); connect(busPla1.valHeaWatHpInlIso, valHeaWatIsoCom.bus); connect(busPla1.valChiWatHpInlIso, valChiWatIsoCom.bus); connect(ret.ports, valHeaWatIsoCom.port_b); connect(busPla1, pumPriCom.bus); connect(pumPriSep.ports_bHeaWat, valHeaWatIsoSep.port_a); connect(pumPriSep.ports_bChiWat, valChiWatIsoSep.port_a); connect(valHeaWatIsoSep.port_b, pumPriSep.ports_aChiHeaWat); connect(valChiWatIsoSep.port_b, pumPriSep.ports_aChiHeaWat); connect(ret2.ports, valHeaWatIsoSep.port_b); connect(valChiWatIsoHdr[nHp + 1:nHp + nPhp].port_b, pumPriNoDed.ports_aChiWat); connect(valHeaWatIsoHdr[nHp + 1:nHp + nPhp].port_b, pumPriNoDed.ports_aHeaWat); connect(phpConSep.port_b, pumPriSep.ports_aHeaWatPhp); connect(pumPriSep.ports_bHeaWatRetShc, phpConSep.port_a); connect(pumPriSep.ports_bChiWatRetShc, phpEvaSep.port_a); connect(phpEvaSep.port_b, pumPriSep.ports_aChiWatPhp); connect(pumPriNoDed.ports_bChiWatRetShc, phpEvaHdr.port_a); connect(phpEvaHdr.port_b, pumPriNoDed.ports_aChiWatPhp); connect(pumPriNoDed.ports_bHeaWatRetShc, phpConHdr.port_a); connect(phpConHdr.port_b, pumPriNoDed.ports_aHeaWatPhp); connect(pumPriCom.ports_bChiWatRetShc, phpEvaCom.port_a); connect(phpEvaCom.port_b, pumPriCom.ports_aChiWatPhp); connect(pumPriCom.ports_bHeaWatRetShc, phpConCom.port_a); connect(phpConCom.port_b, pumPriCom.ports_aHeaWatPhp); connect(pumPriCom.ports_bHeaWatSupShc, pumPriCom.ports_aHeaWat); connect(pumPriCom.ports_bChiWatSupShc, pumPriCom.ports_aChiWat); connect(pumPriSep.ports_bHeaWatSupShc, pumPriSep.ports_aHeaWat); connect(pumPriSep.ports_bChiWatSupShc, pumPriSep.ports_aChiWat); connect(busPla.pumChiWatPri, pumChiWatPriHdr.bus); connect(ret3.ports, pumPriSep.ports_aHeaWat); connect(ret4.ports, pumPriSep.ports_aChiWat); connect(ret7.ports, pumPriCom.ports_aHeaWat); connect(ret8.ports, pumPriCom.ports_aChiWat); // HACK(AntoineGautier): Connecting busPla.valHeaWatPhpInlIso directly // to valHeaWatIsoHdr[nHp + 1:nHp + nPhp].bus i.e. // connect(busPla.valHeaWatPhpInlIso, valHeaWatIsoHdr[nHp + 1:nHp + nPhp].bus) // yields a translation error with OCT 1.55. connect(busPla2, pumPriSep.bus); // HACK(AntoineGautier): Connecting busPla2.valHeaWatHpInlIso and busPla2.valChiWatHpInlIso // **before** connecting busPla2 yields a NullPointerException with OCT 1.55. connect(ctlSep.bus, busPla2); connect(busPla2.valHeaWatHpInlIso, valHeaWatIsoSep.bus); connect(busPla2.valChiWatHpInlIso, valChiWatIsoSep.bus); connect(valHeaWatIsoHdr[1:nHp].port_b, pumPriNoDed.ports_aChiHeaWat); connect(valChiWatIsoHdr[1:nHp].port_b, pumPriNoDed.ports_aChiHeaWat); connect(busPla.valHeaWatPhpInlIso, valHeaWatIsoHdr[nHp + 1:nHp + nPhp].bus); connect(busPla.valChiWatPhpInlIso, valChiWatIsoHdr[nHp + 1:nHp + nPhp].bus); connect(busPla.valHeaWatHpInlIso[1:nHp], valHeaWatIsoHdr[1:nHp].bus); connect(busPla.valChiWatHpInlIso[1:nHp], valChiWatIsoHdr[1:nHp].bus); connect(pumPriNoDed.ports_bChiWatSupShc, pumChiWatPriHdr.ports_a[nHp + 1:nHp + nPhp]); connect(pumPriNoDed.ports_bHeaWatSupShc, pumHeaWatPriHdr.ports_a[nHp + 1:nHp + nPhp]); connect(pumPriNoDed.ports_bChiHeaWat, pumHeaWatPriHdr.ports_a[1:nHp]); connect(pumPriNoDed.ports_bChiHeaWat, pumChiWatPriHdr.ports_a[1:nHp]); connect(pumChiWatPriHdr.ports_b, valChiWatIsoHdr.port_a); connect(pumHeaWatPriHdr.ports_b, valHeaWatIsoHdr.port_a); connect(ret1.ports, valHeaWatIsoHdr.port_b); connect(ret5.ports, valChiWatIsoHdr[nHp + 1:nHp + nPhp].port_b); end PumpsPrimaryDedicatedPolyvalent;

Buildings.Templates.Plants.HeatPumps.Components.Validation.ValvesIsolation Buildings.Templates.Plants.HeatPumps.Components.Validation.ValvesIsolation

Validation model for isolation valve component

Buildings.Templates.Plants.HeatPumps.Components.Validation.ValvesIsolation

Information

This model validates the model Buildings.Templates.Plants.HeatPumps.Components.ValvesIsolation for the following configurations.

In each configuration, two identical heat pumps are represented by fixed flow resistances (components hp*).

Open-loop controls are used throughout. The simulation allows verifying that design flow is achieved in each loop and each heat pump when the valves are open and the primary pumps are on.

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

Parameters

TypeNameDefaultDescription
ControllertypCtlBuildings.Templates.Plants.H... 
replaceable package MediumBuildings.Media.WaterCHW/HW medium
ControllerdatCtldatCtl(cfg(typ=Buildings.Tem...Controller parameters
ControllerdatCtlHeaInldatCtlHeaInl(cfg(typ=Buildin...Controller parameters
ControllerdatCtlSepdatCtlSep(cfg(typ=Buildings....Controller parameters
HeatPumpGroupdatHpdatHp(final have_hp=true, fi...Reversible AWHP parameters
Dynamics
Conservation equations
DynamicsenergyDynamicsModelica.Fluid.Types.Dynamic...Type of energy balance: dynamic (3 initialization options) or steady state

Connectors

TypeNameDescription
replaceable package MediumCHW/HW medium
BusbusPlaPlant controller
BusbusPumHeaWatPriPrimary HW pump control bus
BusbusPumChiWatPriPrimary CHW pump control bus

Modelica definition

model ValvesIsolation "Validation model for isolation valve component" extends Modelica.Icons.Example; parameter Buildings.Templates.Plants.HeatPumps.Types.Controller typCtl = Buildings.Templates.Plants.HeatPumps.Types.Controller.OpenLoop; replaceable package Medium = Buildings.Media.Water constrainedby Modelica.Media.Interfaces.PartialMedium "CHW/HW medium"; parameter Modelica.Fluid.Types.Dynamics energyDynamics = Modelica.Fluid.Types.Dynamics.FixedInitial "Type of energy balance: dynamic (3 initialization options) or steady state"; parameter Data.Controller datCtl( cfg( typ=Buildings.Templates.Plants.Controls.Types.PlantHeatPump.Reversible, have_inpSch=false, have_hrc=false, have_hp=true, have_php=false, have_valHpOutIso=valIsoCom.have_valHpOutIso, have_valHpInlIso=valIsoCom.have_valHpInlIso, have_valPhpOutIso=valIsoCom.have_valPhpOutIso, have_valPhpInlIso=valIsoCom.have_valPhpInlIso, have_chiWat=valIsoCom.have_chiWat, typPumHeaWatPri=Buildings.Templates.Plants.HeatPumps.Types.PumpsPrimary.Variable, typPumChiWatPri=Buildings.Templates.Plants.HeatPumps.Types.PumpsPrimary.None, typPumHeaWatSec=Buildings.Templates.Plants.HeatPumps.Types.PumpsSecondary.None, typTanHeaWat=Buildings.Templates.Components.Types.IntegrationPoint.None, typTanChiWat=Buildings.Templates.Components.Types.IntegrationPoint.None, typDis=Buildings.Templates.Plants.HeatPumps.Types.Distribution.Constant1Only, nPumChiWatSec=0, rhoHeaWat_default=Buildings.Media.Water.d_const, typCtl=Buildings.Templates.Plants.HeatPumps.Types.Controller.OpenLoop, is_rev=true, typHp=Buildings.Templates.Components.Types.HeatPump.AirToWater, rhoChiWat_default=Buildings.Media.Water.d_const, cpChiWat_default=Buildings.Utilities.Psychrometrics.Constants.cpWatLiq, have_hotWat=false, have_valChiWatMinByp=false, have_valHeaWatMinByp=false, cpHeaWat_default=Buildings.Utilities.Psychrometrics.Constants.cpWatLiq, cpSou_default=Buildings.Utilities.Psychrometrics.Constants.cpWatLiq, have_senDpChiWatRemWir=true, typArrPumPri=Buildings.Templates.Components.Types.PumpArrangement.Dedicated, nHp=2, nPhp=0, nPumHeaWatPri=2, have_heaWat=true, nPumHeaWatSec=0, rhoSou_default=Buildings.Media.Air.dStp, have_senDpHeaWatRemWir=true, typPumChiWatSec=Buildings.Templates.Plants.HeatPumps.Types.PumpsSecondary.None, nPumChiWatPri=0, nSenDpHeaWatRem=0, nSenDpChiWatRem=0, nAirHan=0, nEquZon=0, have_pumChiWatPriDedHp=false), THeaWatSup_nominal=Buildings.Templates.Data.Defaults.THeaWatSupMed, TChiWatSup_nominal=Buildings.Templates.Data.Defaults.TChiWatSup, dpChiWatRemSet_max=fill(Buildings.Templates.Data.Defaults.dpChiWatRemSet_max, datCtl.cfg.nSenDpChiWatRem), dpHeaWatRemSet_max=fill(Buildings.Templates.Data.Defaults.dpHeaWatRemSet_max, datCtl.cfg.nSenDpHeaWatRem), staHp={fill(1, datCtl.cfg.nHp)}) "Controller parameters"; parameter Data.Controller datCtlHeaInl( cfg( typ=Buildings.Templates.Plants.Controls.Types.PlantHeatPump.HeatingOnly, have_inpSch=false, have_hrc=false, have_hp=true, have_php=false, have_valHpOutIso=valIsoHeaInl.have_valHpOutIso, have_valHpInlIso=valIsoHeaInl.have_valHpInlIso, have_valPhpOutIso=valIsoHeaInl.have_valPhpOutIso, have_valPhpInlIso=valIsoHeaInl.have_valPhpInlIso, have_chiWat=false, typPumHeaWatPri=Buildings.Templates.Plants.HeatPumps.Types.PumpsPrimary.Variable, typPumChiWatPri=Buildings.Templates.Plants.HeatPumps.Types.PumpsPrimary.None, typTanHeaWat=Buildings.Templates.Components.Types.IntegrationPoint.None, typTanChiWat=Buildings.Templates.Components.Types.IntegrationPoint.None, is_rev=false, typPumHeaWatSec=Buildings.Templates.Plants.HeatPumps.Types.PumpsSecondary.None, typDis=Buildings.Templates.Plants.HeatPumps.Types.Distribution.Constant1Only, nPumChiWatSec=0, rhoHeaWat_default=Buildings.Media.Water.d_const, typCtl=Buildings.Templates.Plants.HeatPumps.Types.Controller.OpenLoop, typHp=Buildings.Templates.Components.Types.HeatPump.AirToWater, rhoChiWat_default=Buildings.Media.Water.d_const, cpChiWat_default=Buildings.Utilities.Psychrometrics.Constants.cpWatLiq, have_hotWat=false, have_valChiWatMinByp=false, have_valHeaWatMinByp=false, cpHeaWat_default=Buildings.Utilities.Psychrometrics.Constants.cpWatLiq, cpSou_default=Buildings.Utilities.Psychrometrics.Constants.cpWatLiq, have_senDpChiWatRemWir=true, typArrPumPri=Buildings.Templates.Components.Types.PumpArrangement.Dedicated, nHp=2, nPhp=0, nPumHeaWatPri=2, have_heaWat=true, nPumHeaWatSec=0, rhoSou_default=Buildings.Media.Air.dStp, have_senDpHeaWatRemWir=true, typPumChiWatSec=Buildings.Templates.Plants.HeatPumps.Types.PumpsSecondary.None, nPumChiWatPri=0, nSenDpHeaWatRem=0, nSenDpChiWatRem=0, nAirHan=0, nEquZon=0, have_pumChiWatPriDedHp=false), THeaWatSup_nominal=Buildings.Templates.Data.Defaults.THeaWatSupMed, TChiWatSup_nominal=Buildings.Templates.Data.Defaults.TChiWatSup, dpChiWatRemSet_max=fill(Buildings.Templates.Data.Defaults.dpChiWatRemSet_max, datCtlHeaInl.cfg.nSenDpChiWatRem), dpHeaWatRemSet_max=fill(Buildings.Templates.Data.Defaults.dpHeaWatRemSet_max, datCtlHeaInl.cfg.nSenDpHeaWatRem), staHp={fill(1, datCtlHeaInl.cfg.nHp)}) "Controller parameters"; parameter Data.Controller datCtlSep( cfg( typ=Buildings.Templates.Plants.Controls.Types.PlantHeatPump.Reversible, have_inpSch=false, have_hrc=false, have_hp=true, have_php=false, have_valHpOutIso=valIsoSep.have_valHpOutIso, have_valHpInlIso=valIsoSep.have_valHpInlIso, have_valPhpInlIso=valIsoSep.have_valPhpInlIso, have_valPhpOutIso=valIsoSep.have_valPhpOutIso, have_chiWat=valIsoSep.have_chiWat, typPumHeaWatPri=Buildings.Templates.Plants.HeatPumps.Types.PumpsPrimary.Variable, typPumChiWatPri=Buildings.Templates.Plants.HeatPumps.Types.PumpsPrimary.Variable, typPumHeaWatSec=Buildings.Templates.Plants.HeatPumps.Types.PumpsSecondary.None, typTanHeaWat=Buildings.Templates.Components.Types.IntegrationPoint.None, typTanChiWat=Buildings.Templates.Components.Types.IntegrationPoint.None, typDis=Buildings.Templates.Plants.HeatPumps.Types.Distribution.Constant1Only, nPumChiWatSec=0, rhoHeaWat_default=Buildings.Media.Water.d_const, typCtl=Buildings.Templates.Plants.HeatPumps.Types.Controller.OpenLoop, is_rev=true, typHp=Buildings.Templates.Components.Types.HeatPump.AirToWater, rhoChiWat_default=Buildings.Media.Water.d_const, cpChiWat_default=Buildings.Utilities.Psychrometrics.Constants.cpWatLiq, have_hotWat=false, have_valChiWatMinByp=false, have_valHeaWatMinByp=false, cpHeaWat_default=Buildings.Utilities.Psychrometrics.Constants.cpWatLiq, cpSou_default=Buildings.Utilities.Psychrometrics.Constants.cpWatLiq, have_senDpChiWatRemWir=true, typArrPumPri=Buildings.Templates.Components.Types.PumpArrangement.Dedicated, nHp=2, nPhp=0, nPumHeaWatPri=2, have_heaWat=true, nPumHeaWatSec=0, rhoSou_default=Buildings.Media.Air.dStp, have_senDpHeaWatRemWir=true, typPumChiWatSec=Buildings.Templates.Plants.HeatPumps.Types.PumpsSecondary.None, nPumChiWatPri=2, nSenDpHeaWatRem=0, nSenDpChiWatRem=0, nAirHan=0, nEquZon=0, have_pumChiWatPriDedHp=valIsoSep.have_pumChiWatDedHp), THeaWatSup_nominal=Buildings.Templates.Data.Defaults.THeaWatSupMed, TChiWatSup_nominal=Buildings.Templates.Data.Defaults.TChiWatSup, dpChiWatRemSet_max=fill(Buildings.Templates.Data.Defaults.dpChiWatRemSet_max, datCtlSep.cfg.nSenDpChiWatRem), dpHeaWatRemSet_max=fill(Buildings.Templates.Data.Defaults.dpHeaWatRemSet_max, datCtlSep.cfg.nSenDpHeaWatRem), staHp={fill(1, datCtlSep.cfg.nHp)}) "Controller parameters"; parameter Data.HeatPumpGroup datHp( final have_hp=true, final have_php=false, final typHp=Buildings.Templates.Components.Types.HeatPump.AirToWater, final is_rev=true, mHeaWatHp_flow_nominal=datHp.capHeaHp_nominal / abs( datHp.THeaWatSupHp_nominal - Buildings.Templates.Data.Defaults.THeaWatRetMed) / Buildings.Utilities.Psychrometrics.Constants.cpWatLiq, dpHeaWatHp_nominal=Buildings.Templates.Data.Defaults.dpHeaWatHp, capHeaHp_nominal=500E3, THeaWatSupHp_nominal=Buildings.Templates.Data.Defaults.THeaWatSupMed, TSouHeaHp_nominal=Buildings.Templates.Data.Defaults.TOutHpHeaLow, mChiWatHp_flow_nominal=datHp.capCooHp_nominal / abs( datHp.TChiWatSupHp_nominal - Buildings.Templates.Data.Defaults.TChiWatRet) / Buildings.Utilities.Psychrometrics.Constants.cpWatLiq, capCooHp_nominal=500E3, TChiWatSupHp_nominal=Buildings.Templates.Data.Defaults.TChiWatSup, TSouCooHp_nominal=Buildings.Templates.Data.Defaults.TOutHpCoo, PHp_min=1.0E3, perHeaHp( fileName=Modelica.Utilities.Files.loadResource( "modelica://Buildings/Resources/Data/Templates/Components/HeatPumps/Validation/AWHP_Heating.txt"), PLRSup={1}, use_TEvaOutForTab=false, use_TConOutForTab=true, tabUppBou=[263.15, 323.15; 313.15, 323.15]), perCooHp( fileName=Modelica.Utilities.Files.loadResource( "modelica://Buildings/Resources/Data/Templates/Components/HeatPumps/Validation/AWHP_Cooling.txt"), PLRSup={1})) "Reversible AWHP parameters"; Buildings.Templates.Plants.HeatPumps.Components.ValvesIsolation valIsoCom( redeclare final package Medium=Medium, nHp=2, have_chiWat=true, nPhp=0, have_valHpInlIso=true, have_valHpOutIso=true, have_pumChiWatDedHp=false, final mHeaWatUni_flow_nominal=fill(datHp.mHeaWatHp_flow_nominal, valIsoCom.nHp), dpHeaWatUni_nominal=fill(datHp.dpHeaWatHp_nominal, valIsoCom.nHp), mChiWatUni_flow_nominal=fill(datHp.mChiWatHp_flow_nominal, valIsoCom.nHp), final energyDynamics=energyDynamics, y_start=0) "Isolation valves - Heating and cooling system with common dedicated primary HW and CHW pumps"; Fluid.FixedResistances.PressureDrop hpCom[valIsoCom.nHp]( redeclare each final package Medium=Medium, m_flow_nominal=valIsoCom.mHeaWatUni_flow_nominal, dp_nominal=fill(0, valIsoCom.nHp)) "Heat pump HX with zero fluid resistance: pressure drop computed in valve component"; Fluid.Sources.Boundary_pT retChiWat( redeclare final package Medium=Medium, p=supChiWat.p + max(valIsoCom.dpChiWat_nominal), T=Buildings.Templates.Data.Defaults.TChiWatRet, nPorts=1) "Boundary condition at CHW return"; Fluid.Sources.Boundary_pT retHeaWat( redeclare final package Medium=Medium, p=supHeaWat.p + max(valIsoCom.dpHeaWat_nominal), T=Buildings.Templates.Data.Defaults.THeaWatRetMed, nPorts=1) "Boundary condition at HW return"; Fluid.Sources.Boundary_pT supChiWat( redeclare final package Medium=Medium, p=Buildings.Templates.Data.Defaults.pChiWat_rel_nominal + 101325, nPorts=1) "Boundary condition at CHW supply"; Fluid.Sources.Boundary_pT supHeaWat( redeclare final package Medium=Medium, p=Buildings.Templates.Data.Defaults.pHeaWat_rel_nominal + 101325, nPorts=1) "Boundary condition at HW supply"; Controls.OpenLoop ctl(final cfg=datCtl.cfg, final dat=datCtl) "Plant controller"; Buildings.Templates.Plants.HeatPumps.Components.ValvesIsolation valIsoHeaInl( redeclare final package Medium=Medium, nHp=2, have_chiWat=false, nPhp=0, have_pumChiWatDedHp=false, have_valHpInlIso=true, have_valHpOutIso=false, final mHeaWatUni_flow_nominal=fill(datHp.mHeaWatHp_flow_nominal, valIsoCom.nHp), dpHeaWatUni_nominal=fill(datHp.dpHeaWatHp_nominal, valIsoCom.nHp), mChiWatUni_flow_nominal=fill(datHp.mChiWatHp_flow_nominal, valIsoCom.nHp), final energyDynamics=energyDynamics, y_start=0) "Isolation valves - Heating-only system with isolation valves at HP inlet"; Fluid.FixedResistances.PressureDrop hpHea[valIsoHeaInl.nHp]( redeclare each final package Medium=Medium, m_flow_nominal=valIsoHeaInl.mHeaWatUni_flow_nominal, dp_nominal=fill(0, valIsoHeaInl.nHp)) "Heat pump HX with zero fluid resistance: pressure drop computed in valve component"; Fluid.Sources.Boundary_pT retHeaWat1( redeclare final package Medium=Medium, p=supHeaWat1.p + max(valIsoHeaInl.dpHeaWat_nominal), T=Buildings.Templates.Data.Defaults.THeaWatRetMed, nPorts=1) "Boundary condition at HW return"; Fluid.Sources.Boundary_pT supHeaWat1( redeclare final package Medium=Medium, p=Buildings.Templates.Data.Defaults.pHeaWat_rel_nominal + 101325, nPorts=1) "Boundary condition at HW supply"; Controls.OpenLoop ctlHeaInl( final cfg=datCtlHeaInl.cfg, final dat=datCtlHeaInl) "Plant controller"; Buildings.Templates.Plants.HeatPumps.Components.ValvesIsolation valIsoSep( redeclare final package Medium=Medium, nHp=2, have_chiWat=true, have_valHpInlIso=true, have_valHpOutIso=false, have_pumChiWatDedHp=true, final mHeaWatUni_flow_nominal=fill(datHp.mHeaWatHp_flow_nominal, valIsoCom.nHp), dpHeaWatUni_nominal=fill(datHp.dpHeaWatHp_nominal, valIsoCom.nHp), mChiWatUni_flow_nominal=fill(datHp.mChiWatHp_flow_nominal, valIsoCom.nHp), final energyDynamics=energyDynamics, y_start=0, from_dp=false) "Isolation valves - Heating and cooling system with separate dedicated primary HW and CHW pumps"; Fluid.FixedResistances.PressureDrop hpSep[valIsoSep.nHp]( redeclare each final package Medium=Medium, m_flow_nominal=valIsoSep.mHeaWatUni_flow_nominal, dp_nominal=fill(0, valIsoSep.nHp)) "Heat pump HX with zero fluid resistance: pressure drop computed in valve component"; Fluid.Sources.Boundary_pT supHeaWat2( redeclare final package Medium=Medium, p=Buildings.Templates.Data.Defaults.pHeaWat_rel_nominal + 101325, nPorts=2) "Boundary condition at HW supply"; Controls.OpenLoop ctlSep(final cfg=datCtlSep.cfg, final dat=datCtlSep) "Plant controller"; Fluid.Movers.Preconfigured.SpeedControlled_y pumChiWatPri[2]( redeclare each final package Medium=Medium, each addPowerToMedium=false, each m_flow_nominal=datHp.mChiWatHp_flow_nominal, each final energyDynamics=energyDynamics, dp_nominal=valIsoSep.dpChiWat_nominal + cheValChiWat.dpValve_nominal) "Primary CHW pump"; Fluid.Movers.Preconfigured.SpeedControlled_y pumHeaWatPri[2]( redeclare each final package Medium=Medium, each addPowerToMedium=false, each m_flow_nominal=datHp.mHeaWatHp_flow_nominal, each final energyDynamics=energyDynamics, dp_nominal=valIsoSep.dpHeaWat_nominal + cheValHeaWat.dpValve_nominal) "Primary HW pump"; Buildings.Templates.Plants.HeatPumps.Interfaces.Bus busPla "Plant controller"; Buildings.Controls.OBC.CDL.Conversions.BooleanToReal yPumHeaWatPri[2] "Primary HW pump speed command"; Buildings.Controls.OBC.CDL.Conversions.BooleanToReal yPumChiWatPri[2] "Primary CHW pump speed command"; Buildings.Templates.Components.Interfaces.Bus busPumHeaWatPri "Primary HW pump control bus"; Buildings.Templates.Components.Interfaces.Bus busPumChiWatPri "Primary CHW pump control bus"; Fluid.FixedResistances.CheckValve cheValHeaWat[2]( redeclare each final package Medium=Medium, each m_flow_nominal=datHp.mHeaWatHp_flow_nominal, each dpValve_nominal=Buildings.Templates.Data.Defaults.dpValChe) "Check valve"; Fluid.FixedResistances.CheckValve cheValChiWat[2]( redeclare each final package Medium=Medium, each m_flow_nominal=datHp.mChiWatHp_flow_nominal, each dpValve_nominal=Buildings.Templates.Data.Defaults.dpValChe) "Check valve"; equation connect(retHeaWat.ports[1], valIsoCom.port_aHeaWat); connect(retChiWat.ports[1], valIsoCom.port_aChiWat); connect(valIsoCom.port_bChiWat, supChiWat.ports[1]); connect(valIsoCom.port_bHeaWat, supHeaWat.ports[1]); connect(ctl.bus, valIsoCom.bus); connect(retHeaWat1.ports[1], valIsoHeaInl.port_aHeaWat); connect(valIsoHeaInl.port_bHeaWat, supHeaWat1.ports[1]); connect(ctlHeaInl.bus, valIsoHeaInl.bus); connect(valIsoCom.ports_bChiHeaWatHp, hpCom.port_a); connect(hpCom.port_b, valIsoCom.ports_aChiHeaWatHp); connect(valIsoHeaInl.ports_bChiHeaWatHp, hpHea.port_a); connect(hpHea.port_b, valIsoHeaInl.ports_aChiHeaWatHp); connect(valIsoSep.port_bHeaWat, supHeaWat2.ports[1]); connect(ctlSep.bus, valIsoSep.bus); connect(valIsoSep.ports_bChiHeaWatHp, hpSep.port_a); connect(supHeaWat2.ports[2], valIsoSep.port_aHeaWat); connect(ctlSep.bus, busPla); connect(busPla.pumHeaWatPri, busPumHeaWatPri); connect(busPumHeaWatPri.y1, yPumHeaWatPri.u); connect(yPumHeaWatPri.y, pumHeaWatPri.y); connect(busPla.pumChiWatPri, busPumChiWatPri); connect(busPumChiWatPri.y1, yPumChiWatPri.u); connect(yPumChiWatPri.y, pumChiWatPri.y); connect(pumHeaWatPri.port_b, cheValHeaWat.port_a); connect(cheValHeaWat.port_b, valIsoSep.ports_aHeaWatHp); connect(cheValChiWat.port_b, valIsoSep.ports_aChiWatHp); connect(pumChiWatPri.port_b, cheValChiWat.port_a); connect(hpSep.port_b, pumChiWatPri.port_a); connect(hpSep.port_b, pumHeaWatPri.port_a); connect(valIsoSep.port_bChiWat, valIsoSep.port_aChiWat); end ValvesIsolation;

Buildings.Templates.Plants.HeatPumps.Components.Validation.ValvesIsolationPolyvalent Buildings.Templates.Plants.HeatPumps.Components.Validation.ValvesIsolationPolyvalent

Validation model for isolation valve component with polyvalent heat pumps

Buildings.Templates.Plants.HeatPumps.Components.Validation.ValvesIsolationPolyvalent

Information

This model validates the model Buildings.Templates.Plants.HeatPumps.Components.ValvesIsolation for two configurations, each with two identical AWHP and two identical polyvalent units.

Open-loop controls are used throughout. The simulation allows verifying that the design flow rate is achieved in each unit when the isolation valves are open and/or the primary pumps are on.

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

Parameters

TypeNameDefaultDescription
ControllertypCtlBuildings.Templates.Plants.H... 
replaceable package MediumBuildings.Media.WaterCHW/HW medium
ControllerdatCtldatCtl(cfg(typ=Buildings.Tem...Controller parameters
ControllerdatCtlSepdatCtlSep(cfg(typ=Buildings....Controller parameters
HeatPumpGroupdatHpPhpdatHpPhp(final have_hp=true,...Parameters for reversible and polyvalent heat pumps
Dynamics
Conservation equations
DynamicsenergyDynamicsModelica.Fluid.Types.Dynamic...Type of energy balance: dynamic (3 initialization options) or steady state

Connectors

TypeNameDescription
replaceable package MediumCHW/HW medium
BusbusPla1Plant controller
BusbusHp[nHp]HP control bus
BusbusPhp[nPhp]Polyvalent HP control bus
BusbusPlaPlant controller
BusbusPumHeaWatPriPrimary HW pump control bus
BusbusPumChiWatPriPrimary CHW pump control bus

Modelica definition

model ValvesIsolationPolyvalent "Validation model for isolation valve component with polyvalent heat pumps" extends Modelica.Icons.Example; parameter Buildings.Templates.Plants.HeatPumps.Types.Controller typCtl = Buildings.Templates.Plants.HeatPumps.Types.Controller.OpenLoop; replaceable package Medium = Buildings.Media.Water constrainedby Modelica.Media.Interfaces.PartialMedium "CHW/HW medium"; final parameter Integer nHp = 2 "Number of heat pumps (excluding polyvalent units)"; final parameter Integer nPhp = 2 "Number of polyvalent heat pumps"; parameter Modelica.Fluid.Types.Dynamics energyDynamics = Modelica.Fluid.Types.Dynamics.FixedInitial "Type of energy balance: dynamic (3 initialization options) or steady state"; parameter Data.Controller datCtl( cfg( typ=Buildings.Templates.Plants.Controls.Types.PlantHeatPump.ReversiblePolyvalent, have_inpSch=false, have_hrc=false, have_hp=true, have_php=true, have_valHpOutIso=valIsoCom.have_valHpOutIso, have_valHpInlIso=valIsoCom.have_valHpInlIso, have_valPhpOutIso=valIsoCom.have_valPhpOutIso, have_valPhpInlIso=valIsoCom.have_valPhpInlIso, have_chiWat=valIsoCom.have_chiWat, typPumHeaWatPri=Buildings.Templates.Plants.HeatPumps.Types.PumpsPrimary.Variable, typPumChiWatPri=Buildings.Templates.Plants.HeatPumps.Types.PumpsPrimary.Variable, typPumHeaWatSec=Buildings.Templates.Plants.HeatPumps.Types.PumpsSecondary.None, typTanHeaWat=Buildings.Templates.Components.Types.IntegrationPoint.None, typTanChiWat=Buildings.Templates.Components.Types.IntegrationPoint.None, typDis=Buildings.Templates.Plants.HeatPumps.Types.Distribution.Constant1Only, nPumChiWatSec=0, rhoHeaWat_default=Buildings.Media.Water.d_const, typCtl=Buildings.Templates.Plants.HeatPumps.Types.Controller.OpenLoop, is_rev=true, typHp=Buildings.Templates.Components.Types.HeatPump.AirToWater, rhoChiWat_default=Buildings.Media.Water.d_const, cpChiWat_default=Buildings.Utilities.Psychrometrics.Constants.cpWatLiq, have_hotWat=false, have_valChiWatMinByp=false, have_valHeaWatMinByp=false, cpHeaWat_default=Buildings.Utilities.Psychrometrics.Constants.cpWatLiq, cpSou_default=Buildings.Utilities.Psychrometrics.Constants.cpWatLiq, have_senDpChiWatRemWir=true, typArrPumPri=Buildings.Templates.Components.Types.PumpArrangement.Dedicated, final nHp=nHp, final nPhp=nPhp, final nPumHeaWatPri=nHp + nPhp, have_heaWat=true, nPumHeaWatSec=0, rhoSou_default=Buildings.Media.Air.dStp, have_senDpHeaWatRemWir=true, typPumChiWatSec=Buildings.Templates.Plants.HeatPumps.Types.PumpsSecondary.None, final nPumChiWatPri=nPhp, nSenDpHeaWatRem=0, nSenDpChiWatRem=0, nAirHan=0, nEquZon=0, have_pumChiWatPriDedHp=valIsoCom.have_pumChiWatDedHp), THeaWatSup_nominal=Buildings.Templates.Data.Defaults.THeaWatSupMed, TChiWatSup_nominal=Buildings.Templates.Data.Defaults.TChiWatSup, dpChiWatRemSet_max=fill( Buildings.Templates.Data.Defaults.dpChiWatRemSet_max, datCtl.cfg.nSenDpChiWatRem), dpHeaWatRemSet_max=fill( Buildings.Templates.Data.Defaults.dpHeaWatRemSet_max, datCtl.cfg.nSenDpHeaWatRem), staHp={fill(1, datCtl.cfg.nHp)}) "Controller parameters"; parameter Data.Controller datCtlSep( cfg( typ=Buildings.Templates.Plants.Controls.Types.PlantHeatPump.ReversiblePolyvalent, have_inpSch=false, have_hrc=false, have_hp=true, have_php=true, have_valHpOutIso=valIsoSep.have_valHpOutIso, have_valHpInlIso=valIsoSep.have_valHpInlIso, have_valPhpInlIso=valIsoSep.have_valPhpInlIso, have_valPhpOutIso=valIsoSep.have_valPhpOutIso, have_chiWat=valIsoSep.have_chiWat, typPumHeaWatPri=Buildings.Templates.Plants.HeatPumps.Types.PumpsPrimary.Variable, typPumChiWatPri=Buildings.Templates.Plants.HeatPumps.Types.PumpsPrimary.Variable, typPumHeaWatSec=Buildings.Templates.Plants.HeatPumps.Types.PumpsSecondary.None, typTanHeaWat=Buildings.Templates.Components.Types.IntegrationPoint.None, typTanChiWat=Buildings.Templates.Components.Types.IntegrationPoint.None, typDis=Buildings.Templates.Plants.HeatPumps.Types.Distribution.Constant1Only, nPumChiWatSec=0, rhoHeaWat_default=Buildings.Media.Water.d_const, typCtl=Buildings.Templates.Plants.HeatPumps.Types.Controller.OpenLoop, is_rev=true, typHp=Buildings.Templates.Components.Types.HeatPump.AirToWater, rhoChiWat_default=Buildings.Media.Water.d_const, cpChiWat_default=Buildings.Utilities.Psychrometrics.Constants.cpWatLiq, have_hotWat=false, have_valChiWatMinByp=false, have_valHeaWatMinByp=false, cpHeaWat_default=Buildings.Utilities.Psychrometrics.Constants.cpWatLiq, cpSou_default=Buildings.Utilities.Psychrometrics.Constants.cpWatLiq, have_senDpChiWatRemWir=true, typArrPumPri=Buildings.Templates.Components.Types.PumpArrangement.Dedicated, final nHp=nHp, final nPhp=nPhp, final nPumHeaWatPri=nHp + nPhp, have_heaWat=true, nPumHeaWatSec=0, rhoSou_default=Buildings.Media.Air.dStp, have_senDpHeaWatRemWir=true, typPumChiWatSec=Buildings.Templates.Plants.HeatPumps.Types.PumpsSecondary.None, final nPumChiWatPri=nHp + nPhp, nSenDpHeaWatRem=0, nSenDpChiWatRem=0, nAirHan=0, nEquZon=0, have_pumChiWatPriDedHp=valIsoSep.have_pumChiWatDedHp), THeaWatSup_nominal=Buildings.Templates.Data.Defaults.THeaWatSupMed, TChiWatSup_nominal=Buildings.Templates.Data.Defaults.TChiWatSup, dpChiWatRemSet_max=fill( Buildings.Templates.Data.Defaults.dpChiWatRemSet_max, datCtlSep.cfg.nSenDpChiWatRem), dpHeaWatRemSet_max=fill( Buildings.Templates.Data.Defaults.dpHeaWatRemSet_max, datCtlSep.cfg.nSenDpHeaWatRem), staHp={fill(1, datCtlSep.cfg.nHp)}) "Controller parameters"; parameter Data.HeatPumpGroup datHpPhp( final have_hp=true, final have_php=true, final typHp=Buildings.Templates.Components.Types.HeatPump.AirToWater, final is_rev=true, mHeaWatHp_flow_nominal=datHpPhp.capHeaHp_nominal / abs( datHpPhp.THeaWatSupHp_nominal - Buildings.Templates.Data.Defaults.THeaWatRetMed) / Buildings.Utilities.Psychrometrics.Constants.cpWatLiq, dpHeaWatHp_nominal=Buildings.Templates.Data.Defaults.dpHeaWatHp, capHeaHp_nominal=500E3, THeaWatSupHp_nominal=Buildings.Templates.Data.Defaults.THeaWatSupMed, TSouHeaHp_nominal=Buildings.Templates.Data.Defaults.TOutHpHeaLow, mChiWatHp_flow_nominal=datHpPhp.capCooHp_nominal / abs( datHpPhp.TChiWatSupHp_nominal - Buildings.Templates.Data.Defaults.TChiWatRet) / Buildings.Utilities.Psychrometrics.Constants.cpWatLiq, capCooHp_nominal=500E3, TChiWatSupHp_nominal=Buildings.Templates.Data.Defaults.TChiWatSup, TSouCooHp_nominal=Buildings.Templates.Data.Defaults.TOutHpCoo, PHp_min=1.0E3, perHeaHp( fileName=Modelica.Utilities.Files.loadResource( "modelica://Buildings/Resources/Data/Templates/Components/HeatPumps/Validation/AWHP_Heating.txt"), PLRSup={1}, use_TEvaOutForTab=false, use_TConOutForTab=true, tabUppBou=[263.15, 323.15; 313.15, 323.15]), perCooHp( fileName=Modelica.Utilities.Files.loadResource( "modelica://Buildings/Resources/Data/Templates/Components/HeatPumps/Validation/AWHP_Cooling.txt"), PLRSup={1}), mHeaWatPhp_flow_nominal=datHpPhp.capHeaPhp_nominal / abs( datHpPhp.THeaWatSupPhp_nominal - Buildings.Templates.Data.Defaults.THeaWatRetMed) / Buildings.Utilities.Psychrometrics.Constants.cpWatLiq, dpHeaWatPhp_nominal=Buildings.Templates.Data.Defaults.dpHeaWatHp, capHeaPhp_nominal=500E3, THeaWatSupPhp_nominal=Buildings.Templates.Data.Defaults.THeaWatSupMed, TSouHeaPhp_nominal=Buildings.Templates.Data.Defaults.TOutHpHeaLow, mChiWatPhp_flow_nominal=datHpPhp.capCooPhp_nominal / abs( datHpPhp.TChiWatSupPhp_nominal - Buildings.Templates.Data.Defaults.TChiWatRet) / Buildings.Utilities.Psychrometrics.Constants.cpWatLiq, capCooPhp_nominal=500E3, dpChiWatPhp_nominal=Buildings.Templates.Data.Defaults.dpChiWatChi, TChiWatSupPhp_nominal=Buildings.Templates.Data.Defaults.TChiWatSup, TSouCooPhp_nominal=Buildings.Templates.Data.Defaults.TOutHpCoo, PPhp_min=1.0E3, capHeaShcPhp_nominal=500E3, capCooShcPhp_nominal=500E3, perPhp( 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"))) "Parameters for reversible and polyvalent heat pumps"; Buildings.Templates.Plants.HeatPumps.Components.ValvesIsolation valIsoCom( redeclare final package Medium=Medium, have_hp=true, have_php=true, final nHp=nHp, have_chiWat=true, final nPhp=nPhp, have_valHpInlIso=true, have_valHpOutIso=true, have_pumChiWatDedHp=false, final mHeaWatUni_flow_nominal=cat( 1, fill(datHpPhp.mHeaWatHp_flow_nominal, nHp), fill(datHpPhp.mHeaWatPhp_flow_nominal, nPhp)), dpHeaWatUni_nominal=cat( 1, fill(datHpPhp.dpHeaWatHp_nominal, nHp), fill(datHpPhp.dpHeaWatPhp_nominal, nPhp)), mChiWatUni_flow_nominal=cat( 1, fill(datHpPhp.mChiWatHp_flow_nominal, nHp), fill(datHpPhp.mChiWatPhp_flow_nominal, nPhp)), final dpChiWatPhp_nominal=fill(datHpPhp.dpChiWatPhp_nominal, nPhp), final energyDynamics=energyDynamics, y_start=0) "Isolation valves – Heat pumps with common dedicated primary HW and CHW pumps, polyvalent HPs with dedicated primary pumps"; Fluid.Sources.Boundary_pT supChiWat( redeclare final package Medium=Medium, p=Buildings.Templates.Data.Defaults.pChiWat_rel_nominal + 101325, nPorts=1) "Boundary condition at CHW supply"; Fluid.Sources.Boundary_pT supHeaWat( redeclare final package Medium=Medium, p=Buildings.Templates.Data.Defaults.pHeaWat_rel_nominal + 101325, nPorts=1) "Boundary condition at HW supply"; Controls.OpenLoop ctl(final cfg=datCtl.cfg, final dat=datCtl) "Plant controller"; Buildings.Templates.Plants.HeatPumps.Components.ValvesIsolation valIsoSep( redeclare final package Medium=Medium, have_hp=true, have_php=true, final nHp=nHp, final nPhp=nPhp, have_chiWat=true, have_valHpInlIso=true, have_valPhpOutIso=true, have_pumChiWatDedHp=true, final mHeaWatUni_flow_nominal=cat( 1, fill(datHpPhp.mHeaWatHp_flow_nominal, nHp), fill(datHpPhp.mHeaWatPhp_flow_nominal, nPhp)), dpHeaWatUni_nominal=cat( 1, fill(datHpPhp.dpHeaWatHp_nominal, nHp), fill(datHpPhp.dpHeaWatPhp_nominal, nPhp)), mChiWatUni_flow_nominal=cat( 1, fill(datHpPhp.mChiWatHp_flow_nominal, nHp), fill(datHpPhp.mChiWatPhp_flow_nominal, nPhp)), final dpChiWatPhp_nominal=fill(datHpPhp.dpChiWatPhp_nominal, nPhp), final energyDynamics=energyDynamics, y_start=0, from_dp=false) "Isolation valves - Plant with separate dedicated primary HW and CHW pumps"; Controls.OpenLoop ctlSep(final cfg=datCtlSep.cfg, final dat=datCtlSep) "Plant controller"; Fluid.Movers.BaseClasses.IdealSource pumChiHeaWatPriHp[nHp]( each m_flow_small=1E-6 * datHpPhp.mHeaWatHp_flow_nominal, each control_m_flow=false, each control_dp=true, redeclare package Medium=Medium) "Ideal pressure rise representing AWHP primary CHW/HW pump"; Buildings.Controls.OBC.CDL.Reals.Switch swi[nHp] "Switch pressure rise depending on operating mode"; Buildings.Controls.OBC.CDL.Reals.Sources.Constant conDp[2, nHp]( final k={-valIsoCom.dpHeaWat_nominal[1:nHp], -valIsoCom.dpChiWat_nominal[1:nHp]}); Buildings.Templates.Plants.HeatPumps.Interfaces.Bus busPla1 "Plant controller"; Buildings.Templates.Components.Interfaces.Bus busHp[nHp] "HP control bus"; Buildings.Controls.OBC.CDL.Reals.Switch swiDpShcCon[nPhp] "Switch pressure rise depending on operating mode"; Buildings.Templates.Components.Interfaces.Bus busPhp[nPhp] "Polyvalent HP control bus"; Buildings.Controls.OBC.CDL.Reals.Sources.Constant conDp1[2, nPhp]( final k={-valIsoCom.dpHeaWat_nominal[nHp + 1:nHp + nPhp], fill(0, nPhp)}); Fluid.Movers.BaseClasses.IdealSource pumHeaWatPriPhp[nPhp]( each m_flow_small=1E-6 * datHpPhp.mHeaWatPhp_flow_nominal, each control_m_flow=false, each control_dp=true, redeclare package Medium=Medium) "Ideal pressure rise representing polyvalent HP primary HW pump"; Buildings.Controls.OBC.CDL.Reals.Switch swiDpShcCon1[nPhp] "Switch pressure rise depending on operating mode"; Buildings.Controls.OBC.CDL.Reals.Sources.Constant conDp2[2, nPhp]( final k={-valIsoCom.dpChiWat_nominal[nHp + 1:nHp + nPhp], fill(0, nPhp)}); Fluid.Movers.BaseClasses.IdealSource pumChiWatPriPhp[nPhp]( each m_flow_small=1E-6 * datHpPhp.mChiWatPhp_flow_nominal, each control_m_flow=false, each control_dp=true, redeclare package Medium=Medium) "Ideal pressure rise representing polyvalent HP primary CHW pump"; Fluid.Sources.Boundary_pT supHeaWat1( redeclare final package Medium=Medium, p=Buildings.Templates.Data.Defaults.pHeaWat_rel_nominal + 101325, nPorts=1) "Boundary condition at HW supply"; Buildings.Templates.Plants.HeatPumps.Interfaces.Bus busPla "Plant controller"; Fluid.Movers.Preconfigured.SpeedControlled_y pumChiWatPri[nHp + nPhp]( redeclare each final package Medium=Medium, each addPowerToMedium=false, final m_flow_nominal=cat( 1, fill(datHpPhp.mChiWatHp_flow_nominal, nHp), fill(datHpPhp.mChiWatPhp_flow_nominal, nPhp)), each final energyDynamics=energyDynamics, dp_nominal=valIsoSep.dpChiWat_nominal) "Primary CHW pump"; Fluid.Movers.Preconfigured.SpeedControlled_y pumHeaWatPri[nHp + nPhp]( redeclare each final package Medium=Medium, each addPowerToMedium=false, final m_flow_nominal=cat( 1, fill(datHpPhp.mHeaWatHp_flow_nominal, nHp), fill(datHpPhp.mHeaWatPhp_flow_nominal, nPhp)), each final energyDynamics=energyDynamics, dp_nominal=valIsoSep.dpHeaWat_nominal) "Primary HW pump"; Buildings.Controls.OBC.CDL.Conversions.BooleanToReal yPumHeaWatPri[nHp + nPhp] "Primary HW pump speed command"; Buildings.Controls.OBC.CDL.Conversions.BooleanToReal yPumChiWatPri[nHp + nPhp] "Primary CHW pump speed command"; Buildings.Templates.Components.Interfaces.Bus busPumHeaWatPri "Primary HW pump control bus"; Buildings.Templates.Components.Interfaces.Bus busPumChiWatPri "Primary CHW pump control bus"; Fluid.FixedResistances.PressureDrop hpSep[nHp]( redeclare each final package Medium=Medium, each m_flow_nominal=datHpPhp.mHeaWatHp_flow_nominal, each dp_nominal=0) "Heat pump HX with zero fluid resistance: pressure drop computed in valve component"; equation connect(valIsoCom.port_bChiWat, supChiWat.ports[1]); connect(valIsoCom.port_bHeaWat, supHeaWat.ports[1]); connect(ctl.bus, valIsoCom.bus); connect(ctlSep.bus, valIsoSep.bus); connect(valIsoCom.port_bChiWat, valIsoCom.port_aChiWat); connect(valIsoCom.port_bHeaWat, valIsoCom.port_aHeaWat); connect(valIsoCom.ports_bChiHeaWatHp, pumChiHeaWatPriHp.port_a); connect(pumChiHeaWatPriHp.port_b, valIsoCom.ports_aChiHeaWatHp); connect(ctl.bus, busPla1); connect(swi.y, pumChiHeaWatPriHp.dp_in); connect(busPla1.hp, busHp); connect(busHp.y1Hea, swi.u2); connect(busPla1.php, busPhp); connect(busPhp.y1Hea, swiDpShcCon.u2); connect(valIsoCom.ports_bHeaWatPhp, pumHeaWatPriPhp.port_a); connect(pumHeaWatPriPhp.port_b, valIsoCom.ports_aHeaWatPhp); connect(swiDpShcCon.y, pumHeaWatPriPhp.dp_in); connect(busPhp.y1Coo, swiDpShcCon1.u2); connect(swiDpShcCon1.y, pumChiWatPriPhp.dp_in); connect(valIsoCom.ports_bChiWatPhp, pumChiWatPriPhp.port_a); connect(pumChiWatPriPhp.port_b, valIsoCom.ports_aChiWatPhp); connect(conDp[2, :].y, swi.u3); connect(conDp[1, :].y, swi.u1); connect(conDp2[1, :].y, swiDpShcCon1.u1); connect(conDp2[2, :].y, swiDpShcCon1.u3); connect(conDp1[1, :].y, swiDpShcCon.u1); connect(conDp1[2, :].y, swiDpShcCon.u3); connect(valIsoSep.port_bHeaWat, valIsoSep.port_aHeaWat); connect(valIsoSep.port_bChiWat, valIsoSep.port_aChiWat); connect(ctlSep.bus, busPla); connect(busPumHeaWatPri.y1, yPumHeaWatPri.u); connect(yPumHeaWatPri.y, pumHeaWatPri.y); connect(busPumChiWatPri.y1, yPumChiWatPri.u); connect(yPumChiWatPri.y, pumChiWatPri.y); connect(valIsoSep.ports_bChiWatPhp, pumChiWatPri[nHp + 1:nHp + nPhp].port_a); connect(busPla.pumHeaWatPri, busPumHeaWatPri); connect(busPla.pumChiWatPri, busPumChiWatPri); connect(valIsoSep.ports_bChiHeaWatHp, hpSep.port_a); connect(hpSep.port_b, pumChiWatPri[1:nHp].port_a); connect(hpSep.port_b, pumHeaWatPri[1:nHp].port_a); connect(valIsoSep.ports_bHeaWatPhp, pumHeaWatPri[nHp + 1:nHp + nPhp].port_a); connect(supHeaWat1.ports[1], pumHeaWatPri[1].port_a); connect(pumChiWatPri[1:nHp].port_b, valIsoSep.ports_aChiWatHp); connect(pumHeaWatPri[1:nHp].port_b, valIsoSep.ports_aHeaWatHp); connect(pumHeaWatPri[nHp + 1:nHp + nPhp].port_b, valIsoSep.ports_aHeaWatPhp); connect(pumChiWatPri[nHp + 1:nHp + nPhp].port_b, valIsoSep.ports_aChiWatPhp); end ValvesIsolationPolyvalent;