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 |
HeatPumpGroupAirToWater
|
Validation model for heat pump group with AWHP |
HeatPumpGroupAirToWaterPolyvalent
|
Validation model for AWHP group with polyvalent HP |
HeatRecoveryChiller
|
Validation model for heat recovery chiller |
PumpsPrimaryDedicated
|
Validation model for dedicated primary pump component |
PumpsPrimaryDedicatedPolyvalent
|
Validation model for dedicated primary pump component with polyvalent heat pumps |
ValvesIsolation
|
Validation model for isolation valve component |
ValvesIsolationPolyvalent
|
Validation model for isolation valve component with polyvalent heat pumps |
Validation model for heat pump group with AWHP
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
| Type | Name | Default | Description |
| replaceable package Medium | Buildings.Media.Water | CHW/HW medium |
| Integer | nHp | 3 | Number of heat pumps (excluding polyvalent HPs) |
| Controller | datCtlPlaAwNrv | datCtlPlaAwNrv(cfg(typ=Build... | Controller parameters |
| Controller | datCtlPlaAw | datCtlPlaAw(cfg(typ=Building... | Controller parameters |
| HeatPumpGroup | datHpAwNrv | datHpAwNrv(final cpHeaWat_de... | Non-reversible AWHP parameters |
| HeatPumpGroup | datHpAw | datHpAw(final cpHeaWat_defau... | Reversible AWHP parameters |
| Dynamics |
| Conservation equations |
| Dynamics | energyDynamics | Modelica.Fluid.Types.Dynamic... | Type of energy balance: dynamic (3 initialization options) or steady state |
Connectors
| Type | Name | Description |
| replaceable package Medium | CHW/HW medium |
| Bus | busPla | Plant controller |
| Bus | busHp[nHp] | HP control bus |
Modelica definition
model HeatPumpGroupAirToWater
extends Modelica.Icons.Example;
replaceable package Medium =
Buildings.Media.Water
constrainedby Modelica.Media.Interfaces.PartialMedium
;
parameter Integer nHp = 3
;
parameter Modelica.Fluid.Types.Dynamics energyDynamics =
Modelica.Fluid.Types.Dynamics.FixedInitial
;
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)}) ;
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)}) ;
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)
;
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)
;
Fluid.Sources.Boundary_pT sup(
redeclare final package Medium=
Medium,
p=Buildings.Templates.Data.Defaults.pHeaWat_rel_nominal + 101325,
nPorts=nHp)
;
Fluid.Sources.Boundary_pT inlHp1(
redeclare final package Medium=
Medium,
use_p_in=true,
use_T_in=true,
nPorts=nHp)
;
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)
;
Fluid.Sensors.TemperatureTwoPort TSup1[nHp](
redeclare each final package Medium=
Medium,
each final m_flow_nominal=datHpAwNrv.mHeaWatHp_flow_nominal)
;
Controls.OpenLoop ctlPlaAwNrv(
final cfg=datCtlPlaAwNrv.cfg,
final dat=datCtlPlaAwNrv)
;
HeatPumpGroups.AirToWater hpAwNrv(
redeclare final package MediumHeaWat=
Medium,
final nHp=nHp,
is_rev=false,
final dat=datHpAwNrv,
final energyDynamics=energyDynamics)
;
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)
;
Buildings.Controls.OBC.CDL.Reals.Sources.Constant pHeaWatInl(
k=sup.p + datHpAwNrv.dpHeaWatHp_nominal)
;
HeatPumpGroups.AirToWater hpAw(
redeclare final package MediumHeaWat=
Medium,
final nHp=nHp,
is_rev=true,
final dat=datHpAw,
final energyDynamics=energyDynamics)
;
Controls.OpenLoop ctlPlaAw(
final cfg=datCtlPlaAw.cfg,
final dat=datCtlPlaAw)
;
Fluid.Sources.Boundary_pT inlHp(
redeclare final package Medium=
Medium,
use_p_in=true,
use_T_in=true,
nPorts=nHp)
;
Fluid.Sensors.TemperatureTwoPort TRet[nHp](
redeclare each final package Medium=
Medium,
each final m_flow_nominal=datHpAw.mHeaWatHp_flow_nominal)
;
Fluid.Sources.Boundary_pT sup1(
redeclare final package Medium=
Medium,
p=Buildings.Templates.Data.Defaults.pHeaWat_rel_nominal + 101325,
nPorts=nHp)
;
Fluid.Sensors.TemperatureTwoPort TSup[nHp](
redeclare each final package Medium=
Medium,
each final m_flow_nominal=datHpAw.mHeaWatHp_flow_nominal)
;
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)
;
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)
;
Buildings.Controls.OBC.CDL.Reals.Sources.Constant pHeaWatInl1(
k=sup.p + hpAw.dpHeaWatHp_nominal)
;
Buildings.Controls.OBC.CDL.Reals.Sources.Constant pChiWatInl(
k=sup.p + hpAw.dpChiWatHp_nominal)
;
Buildings.Controls.OBC.CDL.Reals.Switch TRetAct
;
Buildings.Controls.OBC.CDL.Reals.Switch pInl_rel
;
Buildings.Templates.Plants.HeatPumps.Interfaces.Bus busPla
;
Buildings.Templates.Components.Interfaces.Bus busHp[nHp]
;
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;
Validation model for AWHP group with polyvalent HP
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
| Type | Name | Default | Description |
| replaceable package Medium | Buildings.Media.Water | CHW/HW medium |
| Controller | datCtlPlaPhp | datCtlPlaPhp(cfg(typ=Buildin... | Controller parameters |
| Controller | datCtlPlaHpPhp | datCtlPlaHpPhp(cfg(typ=Build... | Controller parameters |
| HeatPumpGroup | datPhp | datPhp(have_hp=false, have_p... | Parameters for group of polyvalent HPs |
| HeatPumpGroup | datHpPhp | datHpPhp(have_hp=true, have_... | Parameters for group of reversible AWHP and polyvalent HP |
| Dynamics |
| Conservation equations |
| Dynamics | energyDynamics | Modelica.Fluid.Types.Dynamic... | Type of energy balance: dynamic (3 initialization options) or steady state |
Connectors
| Type | Name | Description |
| replaceable package Medium | CHW/HW medium |
| Bus | busPla | Plant controller |
| Bus | busHp[nHp] | HP control bus |
Modelica definition
model HeatPumpGroupAirToWaterPolyvalent
extends Modelica.Icons.Example;
replaceable package Medium =
Buildings.Media.Water
constrainedby Modelica.Media.Interfaces.PartialMedium
;
final parameter Integer nHp = 3
;
final parameter Integer nPhp = 1
;
parameter Modelica.Fluid.Types.Dynamics energyDynamics =
Modelica.Fluid.Types.Dynamics.FixedInitial
;
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)})
;
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)})
;
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")))
;
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")))
;
Fluid.Sources.Boundary_pT sup(
redeclare final package Medium=
Medium,
p=Buildings.Templates.Data.Defaults.pHeaWat_rel_nominal + 101325,
nPorts=2)
;
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)
;
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)
;
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)
;
Controls.OpenLoop ctlPlaAw(
final cfg=datCtlPlaHpPhp.cfg,
final dat=datCtlPlaHpPhp)
;
Fluid.Sources.Boundary_pT inlHp(
redeclare final package Medium=
Medium,
use_p_in=true,
use_T_in=true,
nPorts=nHp)
;
Fluid.Sensors.TemperatureTwoPort TChiHeaWatRetHp[nHp](
redeclare each final package Medium=
Medium,
each final m_flow_nominal=datHpPhp.mHeaWatHp_flow_nominal)
;
Fluid.Sources.Boundary_pT sup1(
redeclare final package Medium=
Medium,
p=Buildings.Templates.Data.Defaults.pHeaWat_rel_nominal + 101325,
nPorts=5)
;
Fluid.Sensors.TemperatureTwoPort TChiHeaWatSupHp[nHp](
redeclare each final package Medium=
Medium,
each final m_flow_nominal=datHpPhp.mHeaWatHp_flow_nominal)
;
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)
;
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)
;
Buildings.Controls.OBC.CDL.Reals.Sources.Constant pHeaWatInl1(
k=sup.p + hpPhp.dpHeaWatHp_nominal)
;
Buildings.Controls.OBC.CDL.Reals.Sources.Constant pChiWatInl(
k=sup.p + hpPhp.dpChiWatHp_nominal)
;
Buildings.Controls.OBC.CDL.Reals.Switch TRetAct
;
Buildings.Controls.OBC.CDL.Reals.Switch pInl_rel
;
Buildings.Templates.Plants.HeatPumps.Interfaces.Bus busPla
;
Buildings.Templates.Components.Interfaces.Bus busHp[nHp]
;
Fluid.Sources.Boundary_pT inlHeaWatPhp(
redeclare final package Medium=
Medium,
p=sup1.p + datHpPhp.dpHeaWatPhp_nominal,
use_T_in=true,
nPorts=2)
;
Fluid.Sources.Boundary_pT inlChiWatPhp(
redeclare final package Medium=
Medium,
p=sup1.p + datHpPhp.dpChiWatPhp_nominal,
use_T_in=true,
nPorts=2)
;
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;
Validation model for heat recovery chiller
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
| Type | Name | Default | Description |
| replaceable package Medium | Buildings.Media.Water | CHW/HW medium |
| Efficiency | COP_nominal | 3.6 | Coefficient of performance at design cooling conditions [1] |
| Chiller | datHrc | datHrc(final typ=Buildings.T... | HRC parameters |
| PumpSingle | datPumChiWatHrc | datPumChiWatHrc(final typ=Bu... | HRC CHW pump parameters |
| PumpSingle | datPumHeaWatHrc | datPumHeaWatHrc(final typ=Bu... | HRC HW pump parameters |
| Dynamics |
| Conservation equations |
| Dynamics | energyDynamics | Modelica.Fluid.Types.Dynamic... | Type of energy balance: dynamic (3 initialization options) or steady state |
Connectors
| Type | Name | Description |
| replaceable package Medium | CHW/HW medium |
| Bus | busHrc | HRC control bus |
| Bus | busPumChiWatHrc | HRC CHW pump control bus |
| Bus | busPumHeaWatHrc | HRC HW pump control bus |
| Bus | bus | Plant control bus |
Modelica definition
model HeatRecoveryChiller
extends Modelica.Icons.Example;
replaceable package Medium=
Buildings.Media.Water
constrainedby Modelica.Media.Interfaces.PartialMedium
;
parameter Modelica.Fluid.Types.Dynamics energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial
;
parameter Modelica.Units.SI.Efficiency COP_nominal = 3.6
;
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)
;
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)
;
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)
;
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)
;
Fluid.Sources.Boundary_pT inlHeaWat(
redeclare final package Medium=
Medium,
T=hrc.TConEnt_nominal,
nPorts=1)
;
Fluid.Sources.Boundary_pT outHeaWat(
redeclare final package Medium=
Medium,
nPorts=1)
;
Fluid.Sources.Boundary_pT outChiWat(
redeclare final package Medium=
Medium,
nPorts=1)
;
Buildings.Templates.Components.Interfaces.Bus busHrc
;
Buildings.Templates.Components.Interfaces.Bus busPumChiWatHrc
;
Buildings.Templates.Components.Interfaces.Bus busPumHeaWatHrc
;
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)
;
Buildings.Controls.OBC.CDL.Reals.Sources.Constant TChiWatSupSet(
final k=datHrc.TChiWatSup_nominal)
;
Buildings.Controls.OBC.CDL.Reals.Sources.Constant THeaWatSupSet(
final k=datHrc.TCon_nominal)
;
Fluid.Sensors.TemperatureTwoPort THeaWatLvg(
redeclare final package Medium=
Medium,
final m_flow_nominal=datHrc.mCon_flow_nominal)
;
Fluid.Sensors.TemperatureTwoPort TChiWatLvg(
redeclare final package Medium=
Medium,
final m_flow_nominal=datHrc.mChiWat_flow_nominal)
;
Buildings.Templates.Plants.HeatPumps.Interfaces.Bus 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;
Validation model for dedicated primary pump component
Information
This model validates the model
Buildings.Templates.Plants.HeatPumps.Components.PumpsPrimaryDedicated
for the following configurations.
-
Reversible heat pumps with a single dedicated primary pump serving both
CHW and HW circuits: component
pumPriCom.
-
Reversible heat pumps with headered constant speed primary pumps:
component
pumPriHdr.
-
Reversible heat pumps with separate constant speed dedicated HW and CHW
pumps: component
pumPriSep.
-
Heating-only heat pumps with variable speed dedicated primary pumps:
component
pumPriHea.
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
| Type | Name | Default | Description |
| replaceable package Medium | Buildings.Media.Water | CHW/HW medium |
| Integer | nHp | 2 | Number of heat pumps (excluding polyvalent HPs) |
| Boolean | use_spePumIni | false | Set to true to compute pump speed at initialization, false to use default value |
| Real | r_N[datPumHeaWatHea.nPum] | | Relative revolution, r_N=N/N_nominal [1] |
| Real | r_NDef[datPumHeaWatHea.nPum] | fill(0.85, datPumHeaWatHea.n... | Default value for relative revolution, r_N=N/N_nominal [1] |
| Controller | datCtl | datCtl(cfg(typ=Buildings.Tem... | Controller parameters |
| Controller | datCtlNoDed | datCtlNoDed(cfg(typ=Building... | Controller parameters |
| Controller | datCtlSep | datCtlSep(cfg(typ=Buildings.... | Controller parameters |
| Controller | datCtlHea | datCtlHea(cfg(typ=Buildings.... | Controller parameters |
| HeatPumpGroup | datHp | datHp(have_hp=true, have_php... | Reversible AWHP parameters |
| PumpMultiple | datPumPriCom | datPumPriCom(typ=Buildings.T... | Primary pump parameters |
| PumpMultiple | datPumHeaWat | datPumHeaWat(typ=Buildings.T... | Dedicated primary HW pump parameters |
| PumpMultiple | datPumChiWat | datPumChiWat(typ=Buildings.T... | Dedicated primary CHW pump parameters |
| PumpMultiple | datPumHeaWatHea | datPumHeaWatHea(typ=Building... | Dedicated primary HW pump parameters – Heating-only system |
| PumpMultiple | datPumHeaWatHdr | datPumHeaWatHdr(typ=Building... | Headered primary HW pump parameters |
| PumpMultiple | datPumChiWatHdr | datPumChiWatHdr(typ=Building... | Headered primary CHW pump parameters |
| Dynamics |
| Conservation equations |
| Dynamics | energyDynamics | Modelica.Fluid.Types.Dynamic... | Type of energy balance: dynamic (3 initialization options) or steady state |
Connectors
| Type | Name | Description |
| replaceable package Medium | CHW/HW medium |
| Bus | busPla | Plant control bus |
| Bus | busPla1 | Plant control bus |
| Bus | busPla2 | Plant control bus |
Modelica definition
model PumpsPrimaryDedicated
extends Modelica.Icons.Example;
replaceable package Medium =
Buildings.Media.Water
constrainedby Modelica.Media.Interfaces.PartialMedium
;
parameter Integer nHp = 2
;
parameter Boolean use_spePumIni = false
;
parameter Modelica.Fluid.Types.Dynamics energyDynamics =
Modelica.Fluid.Types.Dynamics.FixedInitial
;
parameter Real r_N[datPumHeaWatHea.nPum](
each fixed=false,
each start=1,
each unit="1")
;
parameter Real r_NDef[datPumHeaWatHea.nPum](
each start=1,
each unit="1") =
fill(0.85, datPumHeaWatHea.nPum)
;
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)}) ;
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)}) ;
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)}) ;
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)}) ;
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}))
;
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))
;
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))
;
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))
;
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))
;
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))
;
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))
;
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)
;
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)
;
Fluid.Sources.Boundary_pT ret(
redeclare final package Medium=
Medium,
p=Buildings.Templates.Data.Defaults.pHeaWat_rel_nominal + 101325,
nPorts=nHp)
;
Controls.OpenLoop ctl(
final cfg=datCtl.cfg,
final dat=datCtl)
;
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)
;
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)
;
Fluid.Sources.Boundary_pT ret1(
redeclare final package Medium=
Medium,
p=Buildings.Templates.Data.Defaults.pHeaWat_rel_nominal + 101325,
nPorts=nHp)
;
Controls.OpenLoop ctlNoDed(
final cfg=datCtlNoDed.cfg,
final dat=datCtlNoDed)
;
Buildings.Templates.Components.Pumps.Multiple pumHeaWatPriHdr(
have_var=false,
final energyDynamics=energyDynamics,
nPum=nHp,
dat=datPumHeaWatHdr)
;
Buildings.Templates.Plants.HeatPumps.Interfaces.Bus busPla
;
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)
;
Controls.OpenLoop ctlSep(
final cfg=datCtlSep.cfg,
final dat=datCtlSep)
;
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)
;
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)
;
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)
;
Buildings.Templates.Plants.HeatPumps.Interfaces.Bus busPla1
;
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)
;
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)
;
Buildings.Templates.Plants.HeatPumps.Interfaces.Bus busPla2
;
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)
;
Fluid.Sources.Boundary_pT ret3(
redeclare final package Medium=
Medium,
p=Buildings.Templates.Data.Defaults.pHeaWat_rel_nominal + 101325,
nPorts=1)
;
Controls.OpenLoop ctlHea(
final cfg=datCtlHea.cfg,
final dat=datCtlHea,
yPumHeaWatPriDed(k=r_N))
;
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)
;
Fluid.FixedResistances.PressureDrop priHeaWat(
redeclare final package Medium=
Medium,
final m_flow_nominal=
sum(datPumHeaWat.m_flow_nominal),
final dp_nominal=0)
;
Fluid.Sources.Boundary_pT ret2(
redeclare final package Medium=
Medium,
p=Buildings.Templates.Data.Defaults.pHeaWat_rel_nominal + 101325,
nPorts=nHp)
;
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)
;
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)
;
Buildings.Templates.Components.Pumps.Multiple pumChiWatPriHdr(
have_var=false,
final energyDynamics=energyDynamics,
nPum=nHp,
dat=datPumChiWatHdr)
;
initial equation
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;
Validation model for dedicated primary pump component with polyvalent heat pumps
Information
This model validates the model
Buildings.Templates.Plants.HeatPumps.Components.PumpsPrimaryDedicated
for the following plant configurations.
-
Heat pumps with a single dedicated primary pump serving both CHW and HW
circuits, polyvalent units with constant speed dedicated primary pumps:
component
pumPriCom.
-
Plant with headered constant speed primary pumps: component
pumPriHdr.
-
Plant with separate constant speed dedicated HW and CHW pumps: component
pumPriSep.
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
| Type | Name | Default | Description |
| replaceable package Medium | Buildings.Media.Water | CHW/HW medium |
| Controller | datCtl | datCtl(cfg(typ=Buildings.Tem... | Controller parameters |
| Controller | datCtlNoDed | datCtlNoDed(cfg(typ=Building... | Controller parameters |
| Controller | datCtlSep | datCtlSep(cfg(typ=Buildings.... | Controller parameters |
| HeatPumpGroup | datHpPhp | datHpPhp(have_hp=true, have_... | Parameters for reversible and polyvalent heat pumps |
| PumpMultiple | datPumPriCom | datPumPriCom(typ=Buildings.T... | Primary pump parameters – Configuration with common HW/CHW pump for HP |
| PumpMultiple | datPumHeaWat | datPumHeaWat(typ=Buildings.T... | Dedicated primary HW pump parameters – HP and polyvalent HPs |
| PumpMultiple | datPumChiWat | datPumChiWat(typ=Buildings.T... | Dedicated primary CHW pump parameters – HP and polyvalent HPs |
| PumpMultiple | datPumHeaWatHdr | datPumHeaWatHdr(typ=Building... | Headered primary HW pump parameters – HP and polyvalent HPs |
| PumpMultiple | datPumChiWatHdr | datPumChiWatHdr(typ=Building... | Headered primary CHW pump parameters – HP and polyvalent HPs |
| PumpMultiple | datPumChiWatPhp | datPumChiWatPhp(typ=Building... | Dedicated primary CHW pump parameters – Polyvalent heat pumps |
| Dynamics |
| Conservation equations |
| Dynamics | energyDynamics | Modelica.Fluid.Types.Dynamic... | Type of energy balance: dynamic (3 initialization options) or steady state |
Connectors
| Type | Name | Description |
| replaceable package Medium | CHW/HW medium |
| Bus | busPla2 | Plant control bus |
| Bus | busPla | Plant control bus |
| Bus | busPla1 | Plant control bus |
Modelica definition
model PumpsPrimaryDedicatedPolyvalent
extends Modelica.Icons.Example;
replaceable package Medium =
Buildings.Media.Water
constrainedby Modelica.Media.Interfaces.PartialMedium
;
final parameter Integer nHp = 2
;
final parameter Integer nPhp = 2
;
parameter Modelica.Fluid.Types.Dynamics energyDynamics =
Modelica.Fluid.Types.Dynamics.FixedInitial
;
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)})
;
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)})
;
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)})
;
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")))
;
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)))
;
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)))
;
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)))
;
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))
;
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))
;
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))
;
Buildings.Templates.Plants.HeatPumps.Interfaces.Bus busPla2
;
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)
;
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)
;
Fluid.Sources.Boundary_pT ret(
redeclare final package Medium=
Medium,
p=Buildings.Templates.Data.Defaults.pHeaWat_rel_nominal + 101325,
nPorts=nHp)
;
Controls.OpenLoop ctl(
final cfg=datCtl.cfg,
final dat=datCtl)
;
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)
;
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)
;
Controls.OpenLoop ctlNoDed(
final cfg=datCtlNoDed.cfg,
final dat=datCtlNoDed)
;
Buildings.Templates.Components.Pumps.Multiple pumHeaWatPriHdr(
have_var=false,
final energyDynamics=energyDynamics,
nPum=nHp + nPhp,
dat=datPumHeaWatHdr)
;
Buildings.Templates.Plants.HeatPumps.Interfaces.Bus busPla
;
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)
;
Fluid.Sources.Boundary_pT ret2(
redeclare final package Medium=
Medium,
p=Buildings.Templates.Data.Defaults.pHeaWat_rel_nominal + 101325,
nPorts=nHp)
;
Controls.OpenLoop ctlSep(
final cfg=datCtlSep.cfg,
final dat=datCtlSep)
;
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)
;
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)
;
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)
;
Buildings.Templates.Plants.HeatPumps.Interfaces.Bus busPla1
;
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)
;
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)
;
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)
;
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)
;
Buildings.Templates.Components.Pumps.Multiple pumChiWatPriHdr(
have_var=false,
final energyDynamics=energyDynamics,
nPum=nHp + nPhp,
dat=datPumChiWatHdr)
;
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)
;
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)
;
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)
;
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)
;
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)
;
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)
;
Fluid.Sources.Boundary_pT ret3(
redeclare final package Medium=
Medium,
p=Buildings.Templates.Data.Defaults.pHeaWat_rel_nominal + 101325,
nPorts=nPhp)
;
Fluid.Sources.Boundary_pT ret4(
redeclare final package Medium=
Medium,
p=Buildings.Templates.Data.Defaults.pChiWat_rel_nominal + 101325,
nPorts=nPhp)
;
Fluid.Sources.Boundary_pT ret7(
redeclare final package Medium=
Medium,
p=Buildings.Templates.Data.Defaults.pHeaWat_rel_nominal + 101325,
nPorts=nPhp)
;
Fluid.Sources.Boundary_pT ret8(
redeclare final package Medium=
Medium,
p=Buildings.Templates.Data.Defaults.pChiWat_rel_nominal + 101325,
nPorts=nPhp)
;
Fluid.Sources.Boundary_pT ret1(
redeclare final package Medium=
Medium,
p=Buildings.Templates.Data.Defaults.pHeaWat_rel_nominal + 101325,
nPorts=nHp + nPhp)
;
Fluid.Sources.Boundary_pT ret5(
redeclare final package Medium=
Medium,
p=Buildings.Templates.Data.Defaults.pHeaWat_rel_nominal + 101325,
nPorts=nPhp)
;
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);
connect(busPla2, pumPriSep.bus);
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;
Validation model for isolation valve component
Information
This model validates the model
Buildings.Templates.Plants.HeatPumps.Components.ValvesIsolation for
the following configurations.
-
Heating and cooling system with common dedicated primary HW and CHW pumps
and isolation valves at both heat pump inlet and outlet: component
valIsoCom.
-
Heating-only system with isolation valves at heat pump inlet: component
valIsoHeaInl.
-
Heating and cooling system with separate dedicated primary HW and CHW
pumps and isolation valves at heat pump inlet: component
valIsoSep.
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
| Type | Name | Default | Description |
| Controller | typCtl | Buildings.Templates.Plants.H... | |
| replaceable package Medium | Buildings.Media.Water | CHW/HW medium |
| Controller | datCtl | datCtl(cfg(typ=Buildings.Tem... | Controller parameters |
| Controller | datCtlHeaInl | datCtlHeaInl(cfg(typ=Buildin... | Controller parameters |
| Controller | datCtlSep | datCtlSep(cfg(typ=Buildings.... | Controller parameters |
| HeatPumpGroup | datHp | datHp(final have_hp=true, fi... | Reversible AWHP parameters |
| Dynamics |
| Conservation equations |
| Dynamics | energyDynamics | Modelica.Fluid.Types.Dynamic... | Type of energy balance: dynamic (3 initialization options) or steady state |
Connectors
| Type | Name | Description |
| replaceable package Medium | CHW/HW medium |
| Bus | busPla | Plant controller |
| Bus | busPumHeaWatPri | Primary HW pump control bus |
| Bus | busPumChiWatPri | Primary CHW pump control bus |
Modelica definition
model ValvesIsolation
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
;
parameter Modelica.Fluid.Types.Dynamics energyDynamics =
Modelica.Fluid.Types.Dynamics.FixedInitial
;
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)}) ;
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)}) ;
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)}) ;
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}))
;
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)
;
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))
;
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)
;
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)
;
Fluid.Sources.Boundary_pT supChiWat(
redeclare final package Medium=
Medium,
p=Buildings.Templates.Data.Defaults.pChiWat_rel_nominal + 101325,
nPorts=1)
;
Fluid.Sources.Boundary_pT supHeaWat(
redeclare final package Medium=
Medium,
p=Buildings.Templates.Data.Defaults.pHeaWat_rel_nominal + 101325,
nPorts=1)
;
Controls.OpenLoop ctl(
final cfg=datCtl.cfg,
final dat=datCtl)
;
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)
;
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))
;
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)
;
Fluid.Sources.Boundary_pT supHeaWat1(
redeclare final package Medium=
Medium,
p=Buildings.Templates.Data.Defaults.pHeaWat_rel_nominal + 101325,
nPorts=1)
;
Controls.OpenLoop ctlHeaInl(
final cfg=datCtlHeaInl.cfg,
final dat=datCtlHeaInl)
;
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)
;
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))
;
Fluid.Sources.Boundary_pT supHeaWat2(
redeclare final package Medium=
Medium,
p=Buildings.Templates.Data.Defaults.pHeaWat_rel_nominal + 101325,
nPorts=2)
;
Controls.OpenLoop ctlSep(
final cfg=datCtlSep.cfg,
final dat=datCtlSep)
;
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)
;
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)
;
Buildings.Templates.Plants.HeatPumps.Interfaces.Bus busPla
;
Buildings.Controls.OBC.CDL.Conversions.BooleanToReal yPumHeaWatPri[2]
;
Buildings.Controls.OBC.CDL.Conversions.BooleanToReal yPumChiWatPri[2]
;
Buildings.Templates.Components.Interfaces.Bus busPumHeaWatPri
;
Buildings.Templates.Components.Interfaces.Bus busPumChiWatPri
;
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)
;
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)
;
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;
Validation model for isolation valve component with polyvalent heat pumps
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.
-
AWHP with isolation valves at both the inlet and outlet, polyvalent units
without isolation valves: component
valIsoCom.
-
AWHP with isolation valves at the inlet only, polyvalent units with
isolation valves at the outlet only: component
valIsoSep.
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
| Type | Name | Default | Description |
| Controller | typCtl | Buildings.Templates.Plants.H... | |
| replaceable package Medium | Buildings.Media.Water | CHW/HW medium |
| Controller | datCtl | datCtl(cfg(typ=Buildings.Tem... | Controller parameters |
| Controller | datCtlSep | datCtlSep(cfg(typ=Buildings.... | Controller parameters |
| HeatPumpGroup | datHpPhp | datHpPhp(final have_hp=true,... | Parameters for reversible and polyvalent heat pumps |
| Dynamics |
| Conservation equations |
| Dynamics | energyDynamics | Modelica.Fluid.Types.Dynamic... | Type of energy balance: dynamic (3 initialization options) or steady state |
Connectors
| Type | Name | Description |
| replaceable package Medium | CHW/HW medium |
| Bus | busPla1 | Plant controller |
| Bus | busHp[nHp] | HP control bus |
| Bus | busPhp[nPhp] | Polyvalent HP control bus |
| Bus | busPla | Plant controller |
| Bus | busPumHeaWatPri | Primary HW pump control bus |
| Bus | busPumChiWatPri | Primary CHW pump control bus |
Modelica definition
model ValvesIsolationPolyvalent
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
;
final parameter Integer nHp = 2
;
final parameter Integer nPhp = 2
;
parameter Modelica.Fluid.Types.Dynamics energyDynamics =
Modelica.Fluid.Types.Dynamics.FixedInitial
;
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)})
;
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)})
;
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")))
;
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)
;
Fluid.Sources.Boundary_pT supChiWat(
redeclare final package Medium=
Medium,
p=Buildings.Templates.Data.Defaults.pChiWat_rel_nominal + 101325,
nPorts=1)
;
Fluid.Sources.Boundary_pT supHeaWat(
redeclare final package Medium=
Medium,
p=Buildings.Templates.Data.Defaults.pHeaWat_rel_nominal + 101325,
nPorts=1)
;
Controls.OpenLoop ctl(
final cfg=datCtl.cfg,
final dat=datCtl)
;
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)
;
Controls.OpenLoop ctlSep(
final cfg=datCtlSep.cfg,
final dat=datCtlSep)
;
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)
;
Buildings.Controls.OBC.CDL.Reals.Switch swi[nHp]
;
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
;
Buildings.Templates.Components.Interfaces.Bus busHp[nHp]
;
Buildings.Controls.OBC.CDL.Reals.Switch swiDpShcCon[nPhp]
;
Buildings.Templates.Components.Interfaces.Bus busPhp[nPhp]
;
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)
;
Buildings.Controls.OBC.CDL.Reals.Switch swiDpShcCon1[nPhp]
;
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)
;
Fluid.Sources.Boundary_pT supHeaWat1(
redeclare final package Medium=
Medium,
p=Buildings.Templates.Data.Defaults.pHeaWat_rel_nominal + 101325,
nPorts=1)
;
Buildings.Templates.Plants.HeatPumps.Interfaces.Bus busPla
;
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)
;
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)
;
Buildings.Controls.OBC.CDL.Conversions.BooleanToReal yPumHeaWatPri[nHp + nPhp]
;
Buildings.Controls.OBC.CDL.Conversions.BooleanToReal yPumChiWatPri[nHp + nPhp]
;
Buildings.Templates.Components.Interfaces.Bus busPumHeaWatPri
;
Buildings.Templates.Components.Interfaces.Bus busPumChiWatPri
;
Fluid.FixedResistances.PressureDrop hpSep[nHp](
redeclare each final package Medium=
Medium,
each m_flow_nominal=datHpPhp.mHeaWatHp_flow_nominal,
each dp_nominal=0)
;
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;