Buildings.Experimental.DHC.Loads.BaseClasses

Package with base classes

Information

This package contains base classes that are used to construct the classes in Buildings.Experimental.DHC.Loads.

Extends from Modelica.Icons.BasesPackage (Icon for packages containing base classes).

Package Content

Name Description
Buildings.Experimental.DHC.Loads.BaseClasses.ConstraintViolation ConstraintViolation Block that outputs the fraction of time when a constraint is violated
Buildings.Experimental.DHC.Loads.BaseClasses.PartialBuilding PartialBuilding Partial class for building model
Buildings.Experimental.DHC.Loads.BaseClasses.PartialBuildingWithPartialETS PartialBuildingWithPartialETS Partial model of a building with an energy transfer station
Buildings.Experimental.DHC.Loads.BaseClasses.PartialTerminalUnit PartialTerminalUnit Partial model for HVAC terminal unit
Buildings.Experimental.DHC.Loads.BaseClasses.getPeakLoad getPeakLoad Function that reads the peak load from the load profile
Buildings.Experimental.DHC.Loads.BaseClasses.Validation Validation Collection of validation models

Buildings.Experimental.DHC.Loads.BaseClasses.ConstraintViolation Buildings.Experimental.DHC.Loads.BaseClasses.ConstraintViolation

Block that outputs the fraction of time when a constraint is violated

Buildings.Experimental.DHC.Loads.BaseClasses.ConstraintViolation

Information

Block that outputs the running fractional time during which any element ui of the input signal is not within umin ≤ ui ≤ umax.

Parameters

TypeNameDefaultDescription
RealuMin Minimum value for input
RealuMax Maximum value for input

Connectors

TypeNameDescription
input RealInputu[nu]Variables of interest
output RealOutputyFraction of time when the constraint is violated [1]

Modelica definition

block ConstraintViolation "Block that outputs the fraction of time when a constraint is violated" parameter Real uMin "Minimum value for input"; parameter Real uMax "Maximum value for input"; parameter Integer nu(min=0) = 0 "Number of input connections"; Buildings.Controls.OBC.CDL.Interfaces.RealInput u[nu] "Variables of interest"; Buildings.Controls.OBC.CDL.Interfaces.RealOutput y( final unit="1", start=0, fixed=true) "Fraction of time when the constraint is violated"; Modelica.SIunits.Time t(final start=0, final fixed=true) "Integral of violated time"; protected parameter Modelica.SIunits.Time t0(fixed=false) "First sample time instant"; Boolean vioMin "Flag, true if minimum is violated"; Boolean vioMax "Flag, true if maximum is violated"; initial equation t0 = time - 1E-6; equation vioMin = Modelica.Math.BooleanVectors.anyTrue({u[i] < uMin for i in 1:nu}); vioMax = Modelica.Math.BooleanVectors.anyTrue({u[i] > uMax for i in 1:nu}); if vioMin or vioMax then der(t) = 1; else der(t) = 0; end if; y = t / (time - t0); end ConstraintViolation;

Buildings.Experimental.DHC.Loads.BaseClasses.PartialBuilding Buildings.Experimental.DHC.Loads.BaseClasses.PartialBuilding

Partial class for building model

Buildings.Experimental.DHC.Loads.BaseClasses.PartialBuilding

Information

Partial model to be used for modeling the thermal loads on an energy transfer station or a dedicated plant. Models extending this class are typically used in conjunction with Buildings.Experimental.DHC.Loads.FlowDistribution and models extending Buildings.Experimental.DHC.Loads.BaseClasses.PartialTerminalUnit as described in the schematics here under. The fluid ports represent the connection between the production system and the building distribution system.

Scaling

Scaling is implemented by means of a multiplier factor facMul. Each extensive quantity (mass and heat flow rate, electric power) flowing out through fluid ports, or connected to an output connector is multiplied by facMul. Each extensive quantity (mass and heat flow rate, electric power) flowing in through fluid ports, or connected to an input connector is multiplied by 1/facMul. This allows modeling, with a single instance, multiple identical buildings served by the same energy transfer station.

Examples

See various use cases in Buildings.Experimental.DHC.Loads.Examples.


image

Parameters

TypeNameDefaultDescription
replaceable package MediumBuildings.Media.WaterMedium in the building distribution system
Configuration
Booleanhave_heaWatfalseSet to true if the building has heating water system
Booleanhave_chiWatfalseSet to true if the building has chilled water system
Booleanhave_eleHeafalseSet to true if the building has decentralized electric heating system
Booleanhave_eleCoofalseSet to true if the building has decentralized electric cooling system
Booleanhave_fanfalseSet to true if fan power is computed
Booleanhave_pumfalseSet to true if pump power is computed
Booleanhave_weaBusfalseSet to true to use a weather bus
Scaling
RealfacMul1Multiplier factor
Assumptions
BooleanallowFlowReversalfalse= true to allow flow reversal, false restricts to design direction (port_a -> port_b)

Connectors

TypeNameDescription
replaceable package MediumMedium in the building distribution system
BusweaBusWeather data bus
FluidPorts_aports_aHeaWat[nPorts_aHeaWat]Heating water inlet ports
FluidPorts_bports_bHeaWat[nPorts_bHeaWat]Heating water outlet ports
FluidPorts_aports_aChiWat[nPorts_aChiWat]Chilled water inlet ports
FluidPorts_bports_bChiWat[nPorts_bChiWat]Chilled water outlet ports
output RealOutputQHea_flowTotal heating heat flow rate transferred to the loads (>=0) [W]
output RealOutputQCoo_flowTotal cooling heat flow rate transferred to the loads (<=0) [W]
output RealOutputPHeaPower drawn by decentralized heating system [W]
output RealOutputPCooPower drawn by decentralized cooling system [W]
output RealOutputPFanPower drawn by fan motors [W]
output RealOutputPPumPower drawn by pump motors [W]

Modelica definition

partial model PartialBuilding "Partial class for building model" replaceable package Medium=Buildings.Media.Water constrainedby Modelica.Media.Interfaces.PartialMedium "Medium in the building distribution system"; parameter Integer nPorts_aHeaWat=0 "Number of heating water inlet ports"; parameter Integer nPorts_bHeaWat=0 "Number of heating water outlet ports"; parameter Integer nPorts_aChiWat=0 "Number of chilled water inlet ports"; parameter Integer nPorts_bChiWat=0 "Number of chilled water outlet ports"; parameter Boolean have_heaWat=false "Set to true if the building has heating water system"; parameter Boolean have_chiWat=false "Set to true if the building has chilled water system"; parameter Boolean have_eleHea=false "Set to true if the building has decentralized electric heating system"; parameter Boolean have_eleCoo=false "Set to true if the building has decentralized electric cooling system"; parameter Boolean have_fan=false "Set to true if fan power is computed"; parameter Boolean have_pum=false "Set to true if pump power is computed"; parameter Boolean have_weaBus=false "Set to true to use a weather bus"; parameter Real facMul(min=Modelica.Constants.eps)=1 "Multiplier factor"; parameter Boolean allowFlowReversal=false "= true to allow flow reversal, false restricts to design direction (port_a -> port_b)"; final parameter Boolean have_heaLoa=have_heaWat or have_eleHea "Set to true if the building has heating loads"; final parameter Boolean have_cooLoa=have_chiWat or have_eleCoo "Set to true if the building has cooling loads"; // IO CONNECTORS Buildings.BoundaryConditions.WeatherData.Bus weaBus if have_weaBus "Weather data bus"; Modelica.Fluid.Interfaces.FluidPorts_a ports_aHeaWat[nPorts_aHeaWat]( redeclare each package Medium=Medium, each m_flow( min= if allowFlowReversal then -Modelica.Constants.inf else 0), each h_outflow( start=Medium.h_default, nominal=Medium.h_default)) if have_heaWat "Heating water inlet ports"; Modelica.Fluid.Interfaces.FluidPorts_b ports_bHeaWat[nPorts_bHeaWat]( redeclare each package Medium=Medium, each m_flow( max= if allowFlowReversal then +Modelica.Constants.inf else 0), each h_outflow( start=Medium.h_default, nominal=Medium.h_default)) if have_heaWat "Heating water outlet ports"; Modelica.Fluid.Interfaces.FluidPorts_a ports_aChiWat[nPorts_aChiWat]( redeclare each package Medium=Medium, each m_flow( min= if allowFlowReversal then -Modelica.Constants.inf else 0), each h_outflow( start=Medium.h_default, nominal=Medium.h_default)) if have_chiWat "Chilled water inlet ports"; Modelica.Fluid.Interfaces.FluidPorts_b ports_bChiWat[nPorts_bChiWat]( redeclare each package Medium=Medium, each m_flow( max= if allowFlowReversal then +Modelica.Constants.inf else 0), each h_outflow( start=Medium.h_default, nominal=Medium.h_default)) if have_chiWat "Chilled water outlet ports"; Modelica.Blocks.Interfaces.RealOutput QHea_flow( final unit="W") if have_heaLoa "Total heating heat flow rate transferred to the loads (>=0)"; Modelica.Blocks.Interfaces.RealOutput QCoo_flow( final unit="W") if have_cooLoa "Total cooling heat flow rate transferred to the loads (<=0)"; Modelica.Blocks.Interfaces.RealOutput PHea( final unit="W") if have_eleHea "Power drawn by decentralized heating system"; Modelica.Blocks.Interfaces.RealOutput PCoo( final unit="W") if have_eleCoo "Power drawn by decentralized cooling system"; Modelica.Blocks.Interfaces.RealOutput PFan( final quantity="Power", final unit="W") if have_fan "Power drawn by fan motors"; Modelica.Blocks.Interfaces.RealOutput PPum( final quantity="Power", final unit="W") if have_pum "Power drawn by pump motors"; Fluid.BaseClasses.MassFlowRateMultiplier mulHeaWatInl[nPorts_aHeaWat]( redeclare each final package Medium = Medium, each final k=1/facMul, each final allowFlowReversal=allowFlowReversal) if have_heaWat "Mass flow rate multiplier"; Fluid.BaseClasses.MassFlowRateMultiplier mulChiWatInl[nPorts_aChiWat]( redeclare each final package Medium = Medium, each final k=1/facMul, each final allowFlowReversal=allowFlowReversal) if have_chiWat "Mass flow rate multiplier"; Fluid.BaseClasses.MassFlowRateMultiplier mulHeaWatOut[nPorts_bHeaWat]( redeclare each final package Medium = Medium, each final k=facMul, each final allowFlowReversal=allowFlowReversal) if have_heaWat "Mass flow rate multiplier"; Fluid.BaseClasses.MassFlowRateMultiplier mulChiWatOut[nPorts_bChiWat]( redeclare each final package Medium = Medium, each final k=facMul, each final allowFlowReversal=allowFlowReversal) if have_chiWat "Mass flow rate multiplier"; Buildings.Controls.OBC.CDL.Continuous.Gain mulQHea_flow( u(final unit="W"), final k=facMul) if have_heaLoa "Scaling"; Buildings.Controls.OBC.CDL.Continuous.Gain mulQCoo_flow( u(final unit="W"), final k=facMul) if have_cooLoa "Scaling"; Buildings.Controls.OBC.CDL.Continuous.Gain mulPHea( u(final unit="W"), final k=facMul) if have_eleHea "Scaling"; Buildings.Controls.OBC.CDL.Continuous.Gain mulPCoo( u(final unit="W"), final k=facMul) if have_eleCoo "Scaling"; Buildings.Controls.OBC.CDL.Continuous.Gain mulPFan( u(final unit="W"), final k=facMul) if have_fan "Scaling"; Buildings.Controls.OBC.CDL.Continuous.Gain mulPPum( u(final unit="W"), final k=facMul) if have_pum "Scaling"; protected final parameter Modelica.SIunits.SpecificHeatCapacity cp_default= Medium.specificHeatCapacityCp(Medium.setState_pTX( p = Medium.p_default, T = Medium.T_default, X = Medium.X_default)) "Specific heat capacity of medium at default medium state"; initial equation assert( nPorts_aHeaWat == nPorts_bHeaWat, "In "+getInstanceName()+": The numbers of heating water inlet ports ("+String( nPorts_aHeaWat)+") and outlet ports ("+String( nPorts_bHeaWat)+") must be equal."); assert( nPorts_aChiWat == nPorts_bChiWat, "In "+getInstanceName()+": The numbers of chilled water inlet ports ("+String( nPorts_aChiWat)+") and outlet ports ("+String( nPorts_bChiWat)+") must be equal."); equation connect(mulQHea_flow.y, QHea_flow); connect(mulQCoo_flow.y, QCoo_flow); connect(mulPHea.y, PHea); connect(mulPCoo.y, PCoo); connect(mulPFan.y, PFan); connect(mulPPum.y, PPum); connect(ports_aChiWat,mulChiWatInl. port_a); connect(ports_aHeaWat,mulHeaWatInl. port_a); connect(mulHeaWatOut.port_b, ports_bHeaWat); connect(mulChiWatOut.port_b, ports_bChiWat); end PartialBuilding;

Buildings.Experimental.DHC.Loads.BaseClasses.PartialBuildingWithPartialETS Buildings.Experimental.DHC.Loads.BaseClasses.PartialBuildingWithPartialETS

Partial model of a building with an energy transfer station

Buildings.Experimental.DHC.Loads.BaseClasses.PartialBuildingWithPartialETS

Information

Partial model to be used for modeling

See the schematics below for a description of the physical boundaries of the composing systems.

The parameters defining the set of outside connectors of this class are propagated up from the ETS and building components. The connect clauses between the ETS and the building connectors are automatically generated based on the previous parameters and the additional parameters nPorts_heaWat and nPorts_chiWat that need to be specified. In case of a heating service line, the model allows for using two different media at the inlet port_aSerHea and at the oulet port_bSerHea to represent a steam supply and condensate return.

Scaling

Scaling is implemented by means of a multiplier factor facMul. Each extensive quantity (mass and heat flow rate, electric power) flowing out through fluid ports, or connected to an output connector is multiplied by facMul. Each extensive quantity (mass and heat flow rate, electric power) flowing in through fluid ports, or connected to an input connector is multiplied by 1/facMul. This allows modeling, with a single instance, multiple identical buildings with identical energy transfer stations, served by the same service line.


image

Parameters

TypeNameDefaultDescription
replaceable package MediumSerBuildings.Media.WaterService side medium
replaceable package MediumSerHea_aBuildings.Media.WaterService side medium at heating inlet
replaceable package MediumBuiBuildings.Media.WaterBuilding side medium
PartialBuildingbuibui(redeclare final package ...Building model
PartialETSetsets(redeclare final package ...Energy transfer station model
Configuration
IntegernPorts_heaWat0Number of heating water fluid ports
IntegernPorts_chiWat0Number of chilled water fluid ports
Scaling
RealfacMul1Multiplier factor
Assumptions
BooleanallowFlowReversalSerfalseSet to true to allow flow reversal on service side
BooleanallowFlowReversalBuifalseSet to true to allow flow reversal on building side

Connectors

TypeNameDescription
replaceable package MediumSerService side medium
replaceable package MediumSerHea_aService side medium at heating inlet
replaceable package MediumBuiBuilding side medium
FluidPort_aport_aSerAmbFluid connector for ambient water service supply line
FluidPort_bport_bSerAmbFluid connector for ambient water service return line
FluidPort_aport_aSerHeaFluid connector for heating service supply line
FluidPort_bport_bSerHeaFluid connector for heating service return line
FluidPort_aport_aSerCooFluid connector for cooling service supply line
FluidPort_bport_bSerCooFluid connector for cooling service return line
BusweaBusWeather data bus
output RealOutputQHea_flowTotal heating heat flow rate transferred to the loads (>=0) [W]
output RealOutputQCoo_flowTotal cooling heat flow rate transferred to the loads (<=0) [W]
output RealOutputPHeaPower drawn by heating system [W]
output RealOutputPCooPower drawn by cooling system [W]
output RealOutputPFanPower drawn by fan motors [W]
output RealOutputPPumPower drawn by pump motors [W]
output RealOutputQFue_flow[nFue]Fuel energy input rate [W]

Modelica definition

partial model PartialBuildingWithPartialETS "Partial model of a building with an energy transfer station" import TypDisSys=Buildings.Experimental.DHC.Types.DistrictSystemType "District system type enumeration"; replaceable package MediumSer=Buildings.Media.Water constrainedby Modelica.Media.Interfaces.PartialMedium "Service side medium"; replaceable package MediumSerHea_a=Buildings.Media.Water constrainedby Modelica.Media.Interfaces.PartialMedium "Service side medium at heating inlet"; replaceable package MediumBui=Buildings.Media.Water constrainedby Modelica.Media.Interfaces.PartialMedium "Building side medium"; parameter Integer nPorts_heaWat=0 "Number of heating water fluid ports"; parameter Integer nPorts_chiWat=0 "Number of chilled water fluid ports"; parameter Real facMul = 1 "Multiplier factor"; parameter Boolean allowFlowReversalSer=false "Set to true to allow flow reversal on service side"; parameter Boolean allowFlowReversalBui=false "Set to true to allow flow reversal on building side"; // The following parameters are propagated up from building and ETS components. final parameter TypDisSys typ=ets.typ "Type of district system"; final parameter Boolean have_heaWat=ets.have_heaWat "Set to true if the ETS supplies heating water"; final parameter Boolean have_hotWat=ets.have_hotWat "Set to true if the ETS supplies domestic hot water"; final parameter Boolean have_chiWat=ets.have_chiWat "Set to true if the ETS supplies chilled water"; final parameter Boolean have_eleHea=bui.have_eleHea or ets.have_eleHea "Set to true if the building or ETS has electric heating system"; final parameter Integer nFue=ets.nFue "Number of fuel types (0 means no combustion system)"; final parameter Boolean have_eleCoo=bui.have_eleCoo or ets.have_eleCoo "Set to true if the building or ETS has electric cooling system"; final parameter Boolean have_fan=bui.have_fan or ets.have_fan "Set to true if fan power is computed"; final parameter Boolean have_pum=bui.have_pum or ets.have_pum "Set to true if pump power is computed"; final parameter Boolean have_weaBus=bui.have_weaBus or ets.have_weaBus "Set to true to use a weather bus"; final parameter Modelica.SIunits.HeatFlowRate QHeaWat_flow_nominal(min=0)= ets.QHeaWat_flow_nominal "Nominal capacity of heating system (>=0)"; final parameter Modelica.SIunits.HeatFlowRate QHotWat_flow_nominal(min=0)= ets.QHotWat_flow_nominal "Nominal capacity of hot water production system (>=0)"; final parameter Modelica.SIunits.HeatFlowRate QChiWat_flow_nominal(max=0)= ets.QChiWat_flow_nominal "Nominal capacity of cooling system (<=0)"; // Parameters for connect clauses. final parameter Integer idxPHeaETS=max( Modelica.Math.BooleanVectors.countTrue( {bui.have_eleHea,ets.have_eleHea}), 1) "Index for connecting the ETS output connector"; final parameter Integer idxPCooETS=max( Modelica.Math.BooleanVectors.countTrue( {bui.have_eleCoo,ets.have_eleCoo}), 1) "Index for connecting the ETS output connector"; final parameter Integer idxPFanETS=max( Modelica.Math.BooleanVectors.countTrue( {bui.have_fan,ets.have_fan}), 1) "Index for connecting the ETS output connector"; final parameter Integer idxPPumETS=max( Modelica.Math.BooleanVectors.countTrue( {bui.have_pum,ets.have_pum}), 1) "Index for connecting the ETS output connector"; // IO CONNECTORS Modelica.Fluid.Interfaces.FluidPort_a port_aSerAmb( redeclare package Medium = MediumSer, m_flow(min=if allowFlowReversalSer then -Modelica.Constants.inf else 0), h_outflow(start=MediumSer.h_default, nominal=MediumSer.h_default)) if typ == TypDisSys.CombinedGeneration5 "Fluid connector for ambient water service supply line"; Modelica.Fluid.Interfaces.FluidPort_b port_bSerAmb( redeclare package Medium = MediumSer, m_flow(max=if allowFlowReversalSer then +Modelica.Constants.inf else 0), h_outflow(start=MediumSer.h_default, nominal=MediumSer.h_default)) if typ == TypDisSys.CombinedGeneration5 "Fluid connector for ambient water service return line"; Modelica.Fluid.Interfaces.FluidPort_a port_aSerHea( redeclare package Medium = MediumSerHea_a, m_flow(min=if allowFlowReversalSer then -Modelica.Constants.inf else 0), h_outflow(start=MediumSerHea_a.h_default, nominal=MediumSerHea_a.h_default)) if typ <> TypDisSys.Cooling and typ <> TypDisSys.CombinedGeneration5 "Fluid connector for heating service supply line"; Modelica.Fluid.Interfaces.FluidPort_b port_bSerHea( redeclare package Medium = MediumSer, m_flow(max=if allowFlowReversalSer then +Modelica.Constants.inf else 0), h_outflow(start=MediumSer.h_default, nominal=MediumSer.h_default)) if typ <> TypDisSys.Cooling and typ <> TypDisSys.CombinedGeneration5 "Fluid connector for heating service return line"; Modelica.Fluid.Interfaces.FluidPort_a port_aSerCoo( redeclare package Medium = MediumSer, m_flow(min=if allowFlowReversalSer then -Modelica.Constants.inf else 0), h_outflow(start=MediumSer.h_default, nominal=MediumSer.h_default)) if typ == TypDisSys.CombinedGeneration1 or typ == TypDisSys.CombinedGeneration2to4 or typ == TypDisSys.Cooling "Fluid connector for cooling service supply line"; Modelica.Fluid.Interfaces.FluidPort_b port_bSerCoo( redeclare package Medium = MediumSer, m_flow(max=if allowFlowReversalSer then +Modelica.Constants.inf else 0), h_outflow(start=MediumSer.h_default, nominal=MediumSer.h_default)) if typ == TypDisSys.CombinedGeneration1 or typ == TypDisSys.CombinedGeneration2to4 or typ == TypDisSys.Cooling "Fluid connector for cooling service return line"; BoundaryConditions.WeatherData.Bus weaBus if have_weaBus "Weather data bus"; Buildings.Controls.OBC.CDL.Interfaces.RealOutput QHea_flow( final unit="W") if bui.have_heaLoa "Total heating heat flow rate transferred to the loads (>=0)"; Buildings.Controls.OBC.CDL.Interfaces.RealOutput QCoo_flow( final unit="W") if bui.have_cooLoa "Total cooling heat flow rate transferred to the loads (<=0)"; Buildings.Controls.OBC.CDL.Interfaces.RealOutput PHea( final unit="W") if have_eleHea "Power drawn by heating system"; Buildings.Controls.OBC.CDL.Interfaces.RealOutput PCoo( final unit="W") if have_eleCoo "Power drawn by cooling system"; Buildings.Controls.OBC.CDL.Interfaces.RealOutput PFan( final unit="W") if have_fan "Power drawn by fan motors"; Buildings.Controls.OBC.CDL.Interfaces.RealOutput PPum( final unit="W") if have_pum "Power drawn by pump motors"; Buildings.Controls.OBC.CDL.Interfaces.RealOutput QFue_flow[nFue]( each final unit="W") if nFue>0 "Fuel energy input rate"; // COMPONENTS replaceable DHC.Loads.BaseClasses.PartialBuilding bui( redeclare final package Medium=MediumBui, final nPorts_aHeaWat=nPorts_heaWat, final nPorts_bHeaWat=nPorts_heaWat, final nPorts_aChiWat=nPorts_chiWat, final nPorts_bChiWat=nPorts_chiWat, final allowFlowReversal=allowFlowReversalBui) "Building model "; replaceable DHC.EnergyTransferStations.BaseClasses.PartialETS ets( redeclare final package MediumBui=MediumBui, redeclare final package MediumSer=MediumSer, redeclare final package MediumSerHea_a=MediumSerHea_a, final nPorts_aHeaWat=nPorts_heaWat, final nPorts_bHeaWat=nPorts_heaWat, final nPorts_aChiWat=nPorts_chiWat, final nPorts_bChiWat=nPorts_chiWat, final allowFlowReversalSer=allowFlowReversalSer, final allowFlowReversalBui=allowFlowReversalBui) "Energy transfer station model"; Buildings.Controls.OBC.CDL.Continuous.MultiSum totPHea( final nin=Modelica.Math.BooleanVectors.countTrue( {bui.have_eleHea,ets.have_eleHea})) "Total power drawn by heating system"; Buildings.Controls.OBC.CDL.Continuous.MultiSum totPCoo( final nin=Modelica.Math.BooleanVectors.countTrue( {bui.have_eleCoo,ets.have_eleCoo})) "Total power drawn by cooling system"; Buildings.Controls.OBC.CDL.Continuous.MultiSum totPFan( final nin=Modelica.Math.BooleanVectors.countTrue( {bui.have_fan,ets.have_fan})) "Total power drawn by fan motors"; Buildings.Controls.OBC.CDL.Continuous.MultiSum totPPum( final nin=Modelica.Math.BooleanVectors.countTrue( {bui.have_pum,ets.have_pum})) "Total power drawn by pump motors"; Buildings.Controls.OBC.CDL.Continuous.Gain mulQHea_flow( u(final unit="W"), final k=facMul) if bui.have_heaLoa "Scaling"; Buildings.Controls.OBC.CDL.Continuous.Gain mulQCoo_flow( u(final unit="W"), final k=facMul) if bui.have_cooLoa "Scaling"; Buildings.Controls.OBC.CDL.Continuous.Gain mulPHea( u(final unit="W"), final k=facMul) if have_eleHea "Scaling"; Buildings.Controls.OBC.CDL.Continuous.Gain mulPCoo( u(final unit="W"), final k=facMul) if have_eleCoo "Scaling"; Buildings.Controls.OBC.CDL.Continuous.Gain mulPFan( u(final unit="W"), final k=facMul) if have_fan "Scaling"; Buildings.Controls.OBC.CDL.Continuous.Gain mulPPum( u(final unit="W"), final k=facMul) if have_pum "Scaling"; Fluid.BaseClasses.MassFlowRateMultiplier mulSerAmbInl( redeclare final package Medium = MediumSer, final k=1/facMul, final allowFlowReversal=allowFlowReversalSer) if typ == TypDisSys.CombinedGeneration5 "Mass flow rate multiplier"; Fluid.BaseClasses.MassFlowRateMultiplier mulSerAmbOut( redeclare final package Medium = MediumSer, final k=facMul, final allowFlowReversal=allowFlowReversalSer) if typ == TypDisSys.CombinedGeneration5 "Mass flow rate multiplier"; Fluid.BaseClasses.MassFlowRateMultiplier mulSerHeaInl( redeclare final package Medium = MediumSerHea_a, final k=1/facMul, final allowFlowReversal=allowFlowReversalSer) if typ <> TypDisSys.Cooling and typ <> TypDisSys.CombinedGeneration5 "Mass flow rate multiplier"; Fluid.BaseClasses.MassFlowRateMultiplier mulSerHeaOut( redeclare final package Medium = MediumSer, final k=facMul, final allowFlowReversal=allowFlowReversalSer) if typ <> TypDisSys.Cooling and typ <> TypDisSys.CombinedGeneration5 "Mass flow rate multiplier"; Fluid.BaseClasses.MassFlowRateMultiplier mulSerCooInl( redeclare final package Medium = MediumSer, final k=1/facMul, final allowFlowReversal=allowFlowReversalSer) if typ == TypDisSys.CombinedGeneration1 or typ == TypDisSys.CombinedGeneration2to4 or typ == TypDisSys.Cooling "Mass flow rate multiplier"; Fluid.BaseClasses.MassFlowRateMultiplier mulSerCooOut( redeclare final package Medium = MediumSer, final k=facMul, final allowFlowReversal=allowFlowReversalSer) if typ == TypDisSys.CombinedGeneration1 or typ == TypDisSys.CombinedGeneration2to4 or typ == TypDisSys.Cooling "Mass flow rate multiplier"; Buildings.Controls.OBC.CDL.Continuous.Gain mulQFue_flow[nFue]( u(each final unit="W"), each final k=facMul) if nFue>0 "Scaling"; initial equation assert(ets.have_heaWat == bui.have_heaWat, "In "+getInstanceName()+": The ETS component is configured with have_heaWat="+ String(ets.have_heaWat)+" whereas the building is configured with have_heaWat="+ String(bui.have_heaWat)); assert(ets.have_chiWat == bui.have_chiWat, "In "+getInstanceName()+": The ETS component is configured with have_chiWat="+ String(ets.have_chiWat)+" whereas the building is configured with have_chiWat="+ String(bui.have_chiWat)); if have_heaWat then assert(nPorts_heaWat > 0, "In "+getInstanceName()+": The ETS component is configured with have_heaWat="+ String(ets.have_heaWat)+" but the number of fluid ports for chilled water (nPorts_heaWat) is zero."); end if; if have_chiWat then assert(nPorts_chiWat > 0, "In "+getInstanceName()+": The ETS component is configured with have_chiWat="+ String(ets.have_chiWat)+" but the number of fluid ports for chilled water (nPorts_chiWat) is zero."); end if; equation connect(bui.ports_bHeaWat,ets.ports_aHeaWat); connect(ets.ports_bHeaWat,bui.ports_aHeaWat); connect(bui.ports_bChiWat,ets.ports_aChiWat); connect(ets.ports_bChiWat,bui.ports_aChiWat); connect(weaBus,bui.weaBus); connect(weaBus,ets.weaBus); connect(bui.PHea,totPHea.u[1]); connect(ets.PHea,totPHea.u[idxPHeaETS]); connect(bui.PCoo,totPCoo.u[1]); connect(ets.PCoo,totPCoo.u[idxPCooETS]); connect(bui.PFan,totPFan.u[1]); connect(ets.PFan,totPFan.u[idxPFanETS]); connect(bui.PPum,totPPum.u[1]); connect(ets.PPum,totPPum.u[idxPPumETS]); connect(bui.QHea_flow, mulQHea_flow.u); connect(mulQHea_flow.y, QHea_flow); connect(bui.QCoo_flow, mulQCoo_flow.u); connect(mulQCoo_flow.y, QCoo_flow); connect(totPHea.y, mulPHea.u); connect(mulPHea.y, PHea); connect(totPCoo.y, mulPCoo.u); connect(mulPCoo.y, PCoo); connect(totPFan.y, mulPFan.u); connect(mulPFan.y, PFan); connect(totPPum.y, mulPPum.u); connect(mulPPum.y, PPum); connect(port_aSerCoo,mulSerCooInl. port_a); connect(mulSerCooInl.port_b, ets.port_aSerCoo); connect(mulSerCooOut.port_b, port_bSerCoo); connect(ets.port_bSerCoo,mulSerCooOut. port_a); connect(port_aSerHea,mulSerHeaInl. port_a); connect(mulSerHeaInl.port_b, ets.port_aSerHea); connect(port_aSerAmb,mulSerAmbInl. port_a); connect(mulSerAmbInl.port_b, ets.port_aSerAmb); connect(ets.port_bSerHea,mulSerHeaOut. port_a); connect(mulSerHeaOut.port_b, port_bSerHea); connect(ets.port_bSerAmb,mulSerAmbOut. port_a); connect(mulSerAmbOut.port_b, port_bSerAmb); connect(mulQFue_flow.y, QFue_flow); connect(ets.QFue_flow, mulQFue_flow.u); end PartialBuildingWithPartialETS;

Buildings.Experimental.DHC.Loads.BaseClasses.PartialTerminalUnit Buildings.Experimental.DHC.Loads.BaseClasses.PartialTerminalUnit

Partial model for HVAC terminal unit

Buildings.Experimental.DHC.Loads.BaseClasses.PartialTerminalUnit

Information

Partial model to be used for modeling an HVAC terminal unit.

The models inheriting from this class are typically used in conjunction with Buildings.Experimental.DHC.Loads.FlowDistribution. They must compute a so-called required mass flow rate defined as the heating or chilled water mass flow rate needed to meet the load. It can be approximated using a control loop to avoid inverting a heat exchanger model as illustrated in Buildings.Experimental.DHC.Loads.Examples.

The model connectivity can be modified to address various use cases:

The heating or cooling nominal capacity is provided for the water based heat exchangers only. Electric heating or cooling systems are supposed to have an infinite capacity.

Connection with the flow distribution model

When connecting the model to Buildings.Experimental.DHC.Loads.FlowDistribution:

Scaling

Scaling is implemented by means of two multiplier factors.

Both multiplier factors are of type real (as opposed to integer) to allow for instance modeling a set of terminal units based on manufacturer data, while still being able to size the full set based on a peak load. See Buildings.Experimental.DHC.Loads.Validation.TerminalUnitScaling for an illustration of the use case when heating and cooling loads are provided as time series.

Change-over mode

When modeling a change-over system:

Base class parameters

All the parameters of this base class that pertain to the nominal conditions shall not be exposed in the derived class, as this would lead to an overdetermined model. For instance, the nominal mass flow rate may not be exposed but rather computed from the nominal heat flow rate, entering and leaving fluid temperature. However, those parameters are included in the base class because other components are likely to reference them. For instance the distribution system model may use the nominal mass flow rate of each terminal unit to compute the nominal mass flow rate of the circulation pump.

Parameters

TypeNameDefaultDescription
replaceable package Medium1Buildings.Media.WaterMedium in the building distribution system
replaceable package Medium2Buildings.Media.AirLoad side medium
Scaling
RealfacMul1Multiplier factor
RealfacMulZon1Zone multiplier factor
Configuration
Booleanhave_heaWatfalseSet to true if the system uses heating water
Booleanhave_chiWatfalseSet to true if the system uses chilled water
Booleanhave_chaOvefalseSet to true if the chilled water based heat exchanger operates in change-over
Booleanhave_eleHeafalseSet to true if the system has electric heating system
Booleanhave_eleCoofalseSet to true if the system has electric cooling system
Booleanhave_heaPorfalseSet to true for heat ports on the load side
Booleanhave_fluPorfalseSet to true for fluid ports on the load side
Booleanhave_TSenfalseSet to true for measured temperature as an input
Booleanhave_QReq_flowfalseSet to true for required heat flow rate as an input
Booleanhave_weaBusfalseSet to true to use a weather bus
Booleanhave_fanfalseSet to true if fan power is computed
Booleanhave_pumfalseSet to true if pump power is computed
Nominal condition
HeatFlowRateQHea_flow_nominal0Nominal heating capacity (>=0) [W]
HeatFlowRateQCoo_flow_nominal0Nominal cooling capacity (<=0) [W]
MassFlowRatemHeaWat_flow_nominal0Heating water mass flow rate at nominal conditions [kg/s]
MassFlowRatemChiWat_flow_nominal0Chilled water mass flow rate at nominal conditions [kg/s]
MassFlowRatemLoaHea_flow_nominal0Load side mass flow rate at nominal conditions in heating mode [kg/s]
MassFlowRatemLoaCoo_flow_nominal0Load side mass flow rate at nominal conditions in cooling mode [kg/s]
TemperatureT_aHeaWat_nominal273.15 + 60Heating water inlet temperature at nominal conditions [K]
TemperatureT_bHeaWat_nominalT_aHeaWat_nominal - 22.2Heating water outlet temperature at nominal conditions [K]
TemperatureT_aChiWat_nominal273.15 + 7.2Chilled water inlet temperature at nominal conditions [K]
TemperatureT_bChiWat_nominalT_aChiWat_nominal + 5.6Chilled water outlet temperature at nominal conditions [K]
TemperatureT_aLoaHea_nominal273.15 + 21.1Load side inlet temperature at nominal conditions in heating mode [K]
TemperatureT_aLoaCoo_nominal273.15 + 26.7Load side inlet temperature at nominal conditions in cooling mode [K]
Assumptions
BooleanallowFlowReversalfalseSet to true to allow flow reversal in building distribution system
BooleanallowFlowReversalLoatrueSet to true to allow flow reversal on the load side

Connectors

TypeNameDescription
replaceable package Medium1Medium in the building distribution system
replaceable package Medium2Load side medium
input RealInputTSenTemperature (measured) [K]
input RealInputTSetHeaHeating set point [K]
input RealInputTSetCooCooling set point [K]
input RealInputQReqHea_flowRequired heat flow rate to meet heating set point (>=0) [W]
input RealInputQReqCoo_flowRequired heat flow rate to meet cooling set point (<=0) [W]
output RealOutputQActHea_flowHeating heat flow rate transferred to the load (>=0) [W]
output RealOutputQActCoo_flowCooling heat flow rate transferred to the load (<=0) [W]
output RealOutputPHeaPower drawn by heating system [W]
output RealOutputPCooPower drawn by cooling system [W]
output RealOutputPFanPower drawn by fans motors [W]
output RealOutputPPumPower drawn by pumps motors [W]
output RealOutputmReqHeaWat_flowRequired heating water flow rate to meet heating set point [kg/s]
output RealOutputmReqChiWat_flowRequired chilled water flow rate to meet cooling set point [kg/s]
FluidPort_aport_aLoaFluid stream inlet port on the load side
FluidPort_bport_bLoaFluid stream outlet port on the load side
HeatPort_bheaPorConHeat port transferring convective heat to the load
HeatPort_bheaPorRadHeat port transferring radiative heat to the load
BusweaBusWeather data bus
FluidPort_aport_aHeaWatHeating water inlet port
FluidPort_aport_aChiWatChilled water inlet port
FluidPort_bport_bHeaWatHeating water outlet port
FluidPort_bport_bChiWatChilled water outlet port

Modelica definition

partial model PartialTerminalUnit "Partial model for HVAC terminal unit" replaceable package Medium1=Buildings.Media.Water constrainedby Modelica.Media.Interfaces.PartialMedium "Medium in the building distribution system"; replaceable package Medium2=Buildings.Media.Air constrainedby Modelica.Media.Interfaces.PartialMedium "Load side medium"; parameter Boolean allowFlowReversal=false "Set to true to allow flow reversal in building distribution system"; parameter Boolean allowFlowReversalLoa=true "Set to true to allow flow reversal on the load side"; parameter Real facMul(min=Modelica.Constants.eps)=1 "Multiplier factor"; parameter Real facMulZon(min=Modelica.Constants.eps)=1 "Zone multiplier factor"; parameter Boolean have_heaWat=false "Set to true if the system uses heating water"; parameter Boolean have_chiWat=false "Set to true if the system uses chilled water"; parameter Boolean have_chaOve=false "Set to true if the chilled water based heat exchanger operates in change-over"; parameter Boolean have_eleHea=false "Set to true if the system has electric heating system"; parameter Boolean have_eleCoo=false "Set to true if the system has electric cooling system"; parameter Boolean have_heaPor=false "Set to true for heat ports on the load side"; parameter Boolean have_fluPor=false "Set to true for fluid ports on the load side"; parameter Boolean have_TSen=false "Set to true for measured temperature as an input"; parameter Boolean have_QReq_flow=false "Set to true for required heat flow rate as an input"; parameter Boolean have_weaBus=false "Set to true to use a weather bus"; parameter Boolean have_fan=false "Set to true if fan power is computed"; parameter Boolean have_pum=false "Set to true if pump power is computed"; parameter Modelica.SIunits.HeatFlowRate QHea_flow_nominal( min=0)=0 "Nominal heating capacity (>=0)"; parameter Modelica.SIunits.HeatFlowRate QCoo_flow_nominal( max=0)=0 "Nominal cooling capacity (<=0)"; parameter Modelica.SIunits.MassFlowRate mHeaWat_flow_nominal( min=0)=0 "Heating water mass flow rate at nominal conditions"; parameter Modelica.SIunits.MassFlowRate mChiWat_flow_nominal( min=0)=0 "Chilled water mass flow rate at nominal conditions"; parameter Modelica.SIunits.MassFlowRate mLoaHea_flow_nominal( min=0)=0 "Load side mass flow rate at nominal conditions in heating mode"; parameter Modelica.SIunits.MassFlowRate mLoaCoo_flow_nominal( min=0)=0 "Load side mass flow rate at nominal conditions in cooling mode"; // AHRI 440 Standard Heating parameter Modelica.SIunits.Temperature T_aHeaWat_nominal=273.15 + 60 "Heating water inlet temperature at nominal conditions"; parameter Modelica.SIunits.Temperature T_bHeaWat_nominal( min=273.15, displayUnit="degC")=T_aHeaWat_nominal-22.2 "Heating water outlet temperature at nominal conditions"; // AHRI 440 Standard Cooling parameter Modelica.SIunits.Temperature T_aChiWat_nominal=273.15 + 7.2 "Chilled water inlet temperature at nominal conditions "; parameter Modelica.SIunits.Temperature T_bChiWat_nominal( min=273.15, displayUnit="degC")=T_aChiWat_nominal+5.6 "Chilled water outlet temperature at nominal conditions"; parameter Modelica.SIunits.Temperature T_aLoaHea_nominal=273.15 + 21.1 "Load side inlet temperature at nominal conditions in heating mode"; parameter Modelica.SIunits.Temperature T_aLoaCoo_nominal=273.15 + 26.7 "Load side inlet temperature at nominal conditions in cooling mode"; // IO connectors Modelica.Blocks.Interfaces.RealInput TSen( final quantity="ThermodynamicTemperature", final unit="K", displayUnit="degC") if have_TSen "Temperature (measured)"; Modelica.Blocks.Interfaces.RealInput TSetHea( quantity="ThermodynamicTemperature", final unit="K", displayUnit="degC") if have_heaWat or have_chaOve or have_eleHea "Heating set point"; Modelica.Blocks.Interfaces.RealInput TSetCoo( final quantity="ThermodynamicTemperature", final unit="K", displayUnit="degC") if have_chiWat or have_eleCoo "Cooling set point"; Modelica.Blocks.Interfaces.RealInput QReqHea_flow( final quantity="HeatFlowRate", final unit="W") if have_QReq_flow and (have_heaWat or have_chaOve or have_eleHea) "Required heat flow rate to meet heating set point (>=0)"; Modelica.Blocks.Interfaces.RealInput QReqCoo_flow( final quantity="HeatFlowRate", final unit="W") if have_QReq_flow and (have_chiWat or have_eleCoo) "Required heat flow rate to meet cooling set point (<=0)"; Modelica.Blocks.Interfaces.RealOutput QActHea_flow( final quantity="HeatFlowRate", final unit="W") if have_heaWat or have_chaOve or have_eleHea "Heating heat flow rate transferred to the load (>=0)"; Modelica.Blocks.Interfaces.RealOutput QActCoo_flow( final quantity="HeatFlowRate", final unit="W") if have_chiWat or have_eleCoo "Cooling heat flow rate transferred to the load (<=0)"; Modelica.Blocks.Interfaces.RealOutput PHea( final quantity="Power", final unit="W") if have_eleHea "Power drawn by heating system"; Modelica.Blocks.Interfaces.RealOutput PCoo( final quantity="Power", final unit="W") if have_eleCoo "Power drawn by cooling system"; Modelica.Blocks.Interfaces.RealOutput PFan( final quantity="Power", final unit="W") if have_fan "Power drawn by fans motors"; Modelica.Blocks.Interfaces.RealOutput PPum( final quantity="Power", final unit="W") if have_pum "Power drawn by pumps motors"; Modelica.Blocks.Interfaces.RealOutput mReqHeaWat_flow( final quantity="MassFlowRate", final unit="kg/s") if have_heaWat "Required heating water flow rate to meet heating set point"; Modelica.Blocks.Interfaces.RealOutput mReqChiWat_flow( final quantity="MassFlowRate", final unit="kg/s") if have_chiWat "Required chilled water flow rate to meet cooling set point"; Modelica.Fluid.Interfaces.FluidPort_a port_aLoa( redeclare final package Medium=Medium2, p(start=Medium2.p_default), m_flow( min= if allowFlowReversalLoa then -Modelica.Constants.inf else 0), h_outflow( start=Medium2.h_default, nominal=Medium2.h_default)) if have_fluPor "Fluid stream inlet port on the load side"; Modelica.Fluid.Interfaces.FluidPort_b port_bLoa( redeclare final package Medium=Medium2, p(start=Medium2.p_default), m_flow( max= if allowFlowReversalLoa then +Modelica.Constants.inf else 0), h_outflow( start=Medium2.h_default, nominal=Medium2.h_default)) if have_fluPor "Fluid stream outlet port on the load side"; Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_b heaPorCon if have_heaPor "Heat port transferring convective heat to the load"; Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_b heaPorRad if have_heaPor "Heat port transferring radiative heat to the load"; BoundaryConditions.WeatherData.Bus weaBus if have_weaBus "Weather data bus"; Modelica.Fluid.Interfaces.FluidPort_a port_aHeaWat( p(start=Medium1.p_default), redeclare final package Medium=Medium1, m_flow( min= if allowFlowReversal then -Modelica.Constants.inf else 0), h_outflow( start=Medium1.h_default, nominal=Medium1.h_default)) if have_heaWat "Heating water inlet port"; Modelica.Fluid.Interfaces.FluidPort_a port_aChiWat( p(start=Medium1.p_default), redeclare final package Medium=Medium1, m_flow( min= if allowFlowReversal then -Modelica.Constants.inf else 0), h_outflow( start=Medium1.h_default, nominal=Medium1.h_default)) if have_chiWat "Chilled water inlet port"; Modelica.Fluid.Interfaces.FluidPort_b port_bHeaWat( p(start=Medium1.p_default), redeclare final package Medium=Medium1, m_flow( max= if allowFlowReversal then +Modelica.Constants.inf else 0), h_outflow( start=Medium1.h_default, nominal=Medium1.h_default)) if have_heaWat "Heating water outlet port"; Modelica.Fluid.Interfaces.FluidPort_b port_bChiWat( p(start=Medium1.p_default), redeclare final package Medium=Medium1, m_flow( max= if allowFlowReversal then +Modelica.Constants.inf else 0), h_outflow( start=Medium1.h_default, nominal=Medium1.h_default)) if have_chiWat "Chilled water outlet port"; // COMPONENTS Buildings.Controls.OBC.CDL.Continuous.Gain mulQReqHea_flow( u(final unit="W"), final k=1/facMul) if have_QReq_flow and (have_heaWat or have_chaOve or have_eleHea) "Scaling"; Buildings.Controls.OBC.CDL.Continuous.Gain mulQReqCoo_flow( u(final unit="W"), final k=1/facMul) if have_QReq_flow and (have_chiWat or have_eleCoo) "Scaling"; Buildings.Controls.OBC.CDL.Continuous.Gain mulQActHea_flow( u(final unit="W"), final k=facMul*facMulZon) if have_heaWat or have_chaOve or have_eleHea "Scaling"; Buildings.Controls.OBC.CDL.Continuous.Gain mulQActCoo_flow( u(final unit="W"), final k=facMul*facMulZon) if have_chiWat or have_eleCoo "Scaling"; Buildings.Controls.OBC.CDL.Continuous.Gain mulPHea( u(final unit="W"), final k=facMul*facMulZon) if have_eleHea "Scaling"; Buildings.Controls.OBC.CDL.Continuous.Gain mulPCoo( u(final unit="W"), final k=facMul*facMulZon) if have_eleCoo "Scaling"; Buildings.Controls.OBC.CDL.Continuous.Gain mulPFan( u(final unit="W"), final k=facMul*facMulZon) if have_fan "Scaling"; Buildings.Controls.OBC.CDL.Continuous.Gain mulPPum( u(final unit="W"), final k=facMul*facMulZon) if have_pum "Scaling"; Buildings.Controls.OBC.CDL.Continuous.Gain mulMasFloReqHeaWat( u(final unit="kg/s"), final k=facMul*facMulZon) if have_heaWat "Scaling"; Buildings.Controls.OBC.CDL.Continuous.Gain mulMasFloReqChiWat( u(final unit="kg/s"), final k=facMul*facMulZon) if have_chiWat "Scaling"; Fluid.BaseClasses.MassFlowRateMultiplier mulHeaWatFloInl( redeclare final package Medium=Medium1, final k=1/facMul/facMulZon, final allowFlowReversal=allowFlowReversal) if have_heaWat "Mass flow rate multiplier"; Fluid.BaseClasses.MassFlowRateMultiplier mulHeaWatFloOut( redeclare final package Medium=Medium1, final k=facMul*facMulZon, final allowFlowReversal=allowFlowReversal) if have_heaWat "Mass flow rate multiplier"; Fluid.BaseClasses.MassFlowRateMultiplier mulChiWatFloInl( redeclare final package Medium=Medium1, final k=1/facMul/facMulZon, final allowFlowReversal=allowFlowReversal) if have_chiWat "Mass flow rate multiplier"; Fluid.BaseClasses.MassFlowRateMultiplier mulChiWatFloOut( redeclare final package Medium=Medium1, final k=facMul*facMulZon, final allowFlowReversal=allowFlowReversal) if have_chiWat "Mass flow rate multiplier"; Fluid.BaseClasses.MassFlowRateMultiplier mulLoaMasFloOut( redeclare final package Medium=Medium2, final k=facMul, final allowFlowReversal=allowFlowReversalLoa) if have_fluPor "Load side mass flow rate multiplier"; Fluid.BaseClasses.MassFlowRateMultiplier mulLoaMasFloInl( redeclare final package Medium=Medium2, final k=1/facMul, final allowFlowReversal=allowFlowReversalLoa) if have_fluPor "Load side mass flow rate multiplier"; Fluid.HeatExchangers.RadiantSlabs.BaseClasses.HeatFlowRateMultiplier mulHeaFloCon(final k= facMul) if have_heaPor "Convective heat flow rate multiplier"; Fluid.HeatExchangers.RadiantSlabs.BaseClasses.HeatFlowRateMultiplier mulHeaFloRad(final k= facMul) if have_heaPor "Radiative heat flow rate multiplier"; protected parameter Modelica.SIunits.SpecificHeatCapacity cpHeaWat_nominal= Medium1.specificHeatCapacityCp( Medium1.setState_pTX( Medium1.p_default, T_aHeaWat_nominal)) "Heating water specific heat capacity at nominal conditions"; parameter Modelica.SIunits.SpecificHeatCapacity cpChiWat_nominal= Medium1.specificHeatCapacityCp( Medium1.setState_pTX( Medium1.p_default, T_aChiWat_nominal)) "Chilled water specific heat capacity at nominal conditions"; parameter Modelica.SIunits.SpecificHeatCapacity cpLoaHea_nominal= Medium2.specificHeatCapacityCp( Medium2.setState_pTX( Medium2.p_default, T_aLoaHea_nominal)) "Load side fluid specific heat capacity at nominal conditions in heating mode"; parameter Modelica.SIunits.SpecificHeatCapacity cpLoaCoo_nominal= Medium2.specificHeatCapacityCp( Medium2.setState_pTX( Medium2.p_default, T_aLoaCoo_nominal)) "Load side fluid specific heat capacity at nominal conditions in cooling mode"; equation connect(QReqHea_flow,mulQReqHea_flow.u); connect(QReqCoo_flow,mulQReqCoo_flow.u); connect(mulQActHea_flow.y,QActHea_flow); connect(mulQActCoo_flow.y,QActCoo_flow); connect(mulPHea.y,PHea); connect(mulPCoo.y,PCoo); connect(mulPFan.y,PFan); connect(mulPPum.y,PPum); connect(mulMasFloReqHeaWat.y,mReqHeaWat_flow); connect(mulMasFloReqChiWat.y,mReqChiWat_flow); connect(port_aHeaWat,mulHeaWatFloInl.port_a); connect(mulHeaWatFloOut.port_b,port_bHeaWat); connect(port_aChiWat,mulChiWatFloInl.port_a); connect(mulChiWatFloOut.port_b,port_bChiWat); connect(mulLoaMasFloOut.port_b,port_bLoa); connect(port_aLoa,mulLoaMasFloInl.port_a); connect(mulHeaFloCon.port_b,heaPorCon); connect(mulHeaFloRad.port_b,heaPorRad); end PartialTerminalUnit;

Buildings.Experimental.DHC.Loads.BaseClasses.getPeakLoad

Function that reads the peak load from the load profile

Information

Function that reads a double value from a text file.

This function scans a file that has a format such as

#1
#Some other text
#Peak space cooling load = -383165.6989 Watts
#Peak space heating load = 893931.4335 Watts
double tab1(8760,4)
0,0,5972.314925,16
3600,0,4925.839944,1750.915684
...

The parameter string is a string that the function searches for, starting at the first line. If it finds the string, it expects an equality sign, and returns the double value after this equality sign. If the function encounters the end of the file, it terminates the simulation with an assertion.

See Buildings.Experimental.DHC.Loads.BaseClasses.Validation.GetPeakLoad for how to invoke this function.

Inputs

TypeNameDefaultDescription
Stringstring String that is written before the '=' sign
StringfilNam Name of data file with heating and cooling load

Outputs

TypeNameDescription
RealnumberNumber that is read from the file

Modelica definition

function getPeakLoad "Function that reads the peak load from the load profile" input String string "String that is written before the '=' sign"; input String filNam "Name of data file with heating and cooling load"; output Real number "Number that is read from the file"; protected String lin "Line that is used in parser"; Integer iLin "Line number"; Integer index=0 "Index of string 'string'"; Integer staInd "Start index used when parsing a real number"; Integer nexInd "Next index used when parsing a real number"; Boolean found "Flag, true if 'string' has been found"; Boolean EOF "Flag, true if EOF has been reached"; String del "Found delimiter"; algorithm // Get line that contains 'string' iLin := 0; EOF := false; while (not EOF) and (index == 0) loop iLin := iLin+1; (lin,EOF) := Modelica.Utilities.Streams.readLine( fileName=filNam, lineNumber=iLin); index := Modelica.Utilities.Strings.find( string=lin, searchString=string, startIndex=1, caseSensitive=true); end while; assert( not EOF, "Error: Did not find '"+string+"' when scanning '"+filNam+"'."+"\n Check for correct file syntax."); // Search for the equality sign (del,nexInd) := Modelica.Utilities.Strings.scanDelimiter( string=lin, startIndex=Modelica.Utilities.Strings.length(string)+1, requiredDelimiters={"="}, message="Failed to find '=' when reading peak load in '"+filNam+"'."); // Read the value behind it. number := Modelica.Utilities.Strings.scanReal( string=lin, startIndex=nexInd, message="Failed to read double value when reading peak load in '"+filNam+"'."); end getPeakLoad;