Buildings.ThermalZones.ReducedOrder.RC

Package with reduced order thermal zones based on VDI 6007 Part 1

Information

This package contains the core of Reduced Order Models (ROM) that dynamically calculate the thermal behaviour of building mass.

Extends from Modelica.Icons.VariantsPackage (Icon for package containing variants).

Package Content

Name Description
Buildings.ThermalZones.ReducedOrder.RC.UsersGuide UsersGuide User's Guide
Buildings.ThermalZones.ReducedOrder.RC.FourElements FourElements Thermal Zone with four elements for exterior walls, interior walls, floor plate and roof
Buildings.ThermalZones.ReducedOrder.RC.OneElement OneElement Thermal Zone with one element for exterior walls
Buildings.ThermalZones.ReducedOrder.RC.ThreeElements ThreeElements Thermal Zone with three elements for exterior walls, interior walls and floor plate
Buildings.ThermalZones.ReducedOrder.RC.TwoElements TwoElements Thermal Zone with two elements for exterior and interior walls
Buildings.ThermalZones.ReducedOrder.RC.BaseClasses BaseClasses Package with base classes for ROM

Buildings.ThermalZones.ReducedOrder.RC.FourElements Buildings.ThermalZones.ReducedOrder.RC.FourElements

Thermal Zone with four elements for exterior walls, interior walls, floor plate and roof

Buildings.ThermalZones.ReducedOrder.RC.FourElements

Information

This model adds another element for the roof. Roofs commonly exhibit the same excitations as exterior walls but have different coefficients of heat transfer due to their orientation. Adding an extra element for the roof might lead to a finer resolution of the dynamic behaviour but increases calculation times. The roof is parameterized via the length of the RC-chain nRoof, the vector of capacities CRoof[nRoof], the vector of resistances RRoof[nRoof] and remaining resistances RRoofRem.

The image below shows the RC-network of this model.

image

Extends from ThreeElements (Thermal Zone with three elements for exterior walls, interior walls and floor plate).

Parameters

TypeNameDefaultDescription
replaceable package MediumPartialMediumMedium in the component
Booleanuse_moisture_balancefalseIf true, input connector QLat_flow is enabled and room air computes moisture balance
Thermal zone
VolumeVAir Air volume of the zone [m3]
CoefficientOfHeatTransferhRad Coefficient of heat transfer for linearized radiation exchange between walls [W/(m2.K)]
IntegernOrientations Number of orientations
Windows
AreaAWin[nOrientations] Vector of areas of windows by orientations [m2]
AreaATransparent[nOrientations] Vector of areas of transparent (solar radiation transmittend) elements by orientations [m2]
CoefficientOfHeatTransferhConWin Convective coefficient of heat transfer of windows (indoor) [W/(m2.K)]
ThermalResistanceRWin Resistor for windows [K/W]
TransmissionCoefficientgWin Total energy transmittance of windows [1]
RealratioWinConRad Ratio for windows between indoor convective and radiative heat emission
BooleanindoorPortWinfalseAdditional heat port at indoor surface of windows
Exterior walls
AreaAExt[nOrientations] Vector of areas of exterior walls by orientations [m2]
CoefficientOfHeatTransferhConExt Convective coefficient of heat transfer of exterior walls (indoor) [W/(m2.K)]
IntegernExt Number of RC-elements of exterior walls
ThermalResistanceRExt[nExt] Vector of resistances of exterior walls, from inside to outside [K/W]
ThermalResistanceRExtRem Resistance of remaining resistor RExtRem between capacity n and outside [K/W]
HeatCapacityCExt[nExt] Vector of heat capacities of exterior walls, from inside to outside [J/K]
BooleanindoorPortExtWallsfalseAdditional heat port at indoor surface of exterior walls
Interior walls
AreaAInt Area of interior walls [m2]
CoefficientOfHeatTransferhConInt Convective coefficient of heat transfer of interior walls (indoor) [W/(m2.K)]
IntegernInt Number of RC-elements of interior walls
ThermalResistanceRInt[nInt] Vector of resistances of interior walls, from port to center [K/W]
HeatCapacityCInt[nInt] Vector of heat capacities of interior walls, from port to center [J/K]
BooleanindoorPortIntWallsfalseAdditional heat port at indoor surface of interior walls
Floor plate
AreaAFloor Area of floor plate [m2]
CoefficientOfHeatTransferhConFloor Convective coefficient of heat transfer of floor plate (indoor) [W/(m2.K)]
IntegernFloor Number of RC-elements of floor plate
ThermalResistanceRFloor[nFloor] Vector of resistances of floor plate, from inside to outside [K/W]
ThermalResistanceRFloorRem Resistance of remaining resistor RFloorRem between capacity n and outside [K/W]
HeatCapacityCFloor[nFloor] Vector of heat capacities of floor plate, from inside to outside [J/K]
BooleanindoorPortFloorfalseAdditional heat port at indoor surface of floor plate
Roof
AreaARoof Area of roof [m2]
CoefficientOfHeatTransferhConRoof Convective coefficient of heat transfer of roof (indoor) [W/(m2.K)]
IntegernRoof Number of RC-elements of roof
ThermalResistanceRRoof[nRoof] Vector of resistances of roof, from inside to outside [K/W]
ThermalResistanceRRoofRem Resistance of remaining resistor RRoofRem between capacity n and outside [K/W]
HeatCapacityCRoof[nRoof] Vector of heat capacities of roof, from inside to outside [J/K]
BooleanindoorPortRooffalseAdditional heat port at indoor surface of roof
Dynamics
Equations
DynamicsenergyDynamicsModelica.Fluid.Types.Dynamic...Type of energy balance: dynamic (3 initialization options) or steady state
DynamicsmassDynamicsenergyDynamicsType of mass balance: dynamic (3 initialization options) or steady state
RealmSenFac1Factor for scaling the sensible thermal mass of the volume
Initialization
AbsolutePressurep_startMedium.p_defaultStart value of pressure [Pa]
TemperatureT_startMedium.T_defaultStart value of temperature [K]
MassFractionX_start[Medium.nX]Medium.X_defaultStart value of mass fractions m_i/m [kg/kg]
ExtraPropertyC_start[Medium.nC]fill(0, Medium.nC)Start value of trace substances
ExtraPropertyC_nominal[Medium.nC]fill(1E-2, Medium.nC)Nominal value of trace substances. (Set to typical order of magnitude.)
Advanced
Booleanuse_C_flowfalseSet to true to enable input connector for trace substance

Connectors

TypeNameDescription
input RealInputsolRad[nOrientations]Solar radiation transmitted through windows [W/m2]
input RealInputQLat_flowLatent heat gains for the room [W]
output RealOutputTAirIndoor air temperature [K]
output RealOutputTRadMean indoor radiation temperature [K]
VesselFluidPorts_bports[nPorts]Auxiliary fluid inlets and outlets to indoor air volume
HeatPort_aextWallAmbient port for exterior walls
HeatPort_awindowAmbient port for windows
HeatPort_aintGainsConvAuxiliary port for sensible internal convective gains
HeatPort_aintGainsRadAuxiliary port for internal radiative gains
HeatPort_awindowIndoorSurfaceAuxiliary port at indoor surface of windows
HeatPort_aextWallIndoorSurfaceAuxiliary port at indoor surface of exterior walls
input RealInputC_flow[Medium.nC]Trace substance mass flow rate added to the thermal zone
HeatPort_aintWallIndoorSurfaceAuxiliary port at indoor surface of interior walls
HeatPort_afloorAmbient port for floor plate
HeatPort_afloorIndoorSurfaceAuxiliary port at indoor surface of floor plate
HeatPort_aroofAmbient port for roof
HeatPort_aroofIndoorSurfaceAuxiliary port at indoor surface of roof

Modelica definition

model FourElements "Thermal Zone with four elements for exterior walls, interior walls, floor plate and roof" extends ThreeElements(AArray={ATotExt,ATotWin,AInt,AFloor,ARoof}); parameter Modelica.SIunits.Area ARoof "Area of roof"; parameter Modelica.SIunits.CoefficientOfHeatTransfer hConRoof "Convective coefficient of heat transfer of roof (indoor)"; parameter Integer nRoof(min = 1) "Number of RC-elements of roof"; parameter Modelica.SIunits.ThermalResistance RRoof[nRoof]( each min=Modelica.Constants.small) "Vector of resistances of roof, from inside to outside"; parameter Modelica.SIunits.ThermalResistance RRoofRem( min=Modelica.Constants.small) "Resistance of remaining resistor RRoofRem between capacity n and outside"; parameter Modelica.SIunits.HeatCapacity CRoof[nRoof]( each min=Modelica.Constants.small) "Vector of heat capacities of roof, from inside to outside"; parameter Boolean indoorPortRoof = false "Additional heat port at indoor surface of roof"; Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a roof if ARoof > 0 "Ambient port for roof"; Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a roofIndoorSurface if indoorPortRoof "Auxiliary port at indoor surface of roof"; BaseClasses.ExteriorWall roofRC( final RExt=RRoof, final RExtRem=RRoofRem, final CExt=CRoof, final n=nRoof, final T_start=T_start) if ARoof > 0 "RC-element for roof"; protected Modelica.Thermal.HeatTransfer.Components.Convection convRoof if ARoof > 0 "Convective heat transfer of roof"; Modelica.Blocks.Sources.Constant hConRoof_const( final k=ARoof*hConRoof) if ARoof > 0 "Coefficient of convective heat transfer for roof"; Modelica.Thermal.HeatTransfer.Components.ThermalConductor resIntRoof( final G=min(AInt, ARoof)*hRad) if AInt > 0 and ARoof > 0 "Resistor between interior walls and roof"; Modelica.Thermal.HeatTransfer.Components.ThermalConductor resRoofWin( final G=min(ARoof, ATotWin)*hRad) if ARoof > 0 and ATotWin > 0 "Resistor between roof and windows"; Modelica.Thermal.HeatTransfer.Components.ThermalConductor resRoofFloor( final G=min(ARoof, AFloor)*hRad) if ARoof > 0 and AFloor > 0 "Resistor between floor plate and roof"; Modelica.Thermal.HeatTransfer.Components.ThermalConductor resExtWallRoof( final G=min(ATotExt, ARoof)*hRad) if ATotExt > 0 and ARoof > 0 "Resistor between exterior walls and roof"; equation connect(convRoof.solid, roofRC.port_a); connect(roofRC.port_b, roof); connect(resRoofWin.port_a, convWin.solid); connect(resRoofWin.port_b, convRoof.solid); connect(resRoofFloor.port_a, convRoof.solid); connect(resRoofFloor.port_b, resExtWallFloor.port_b); connect(resIntRoof.port_b, intWallRC.port_a); connect(resIntRoof.port_a, convRoof.solid); connect(resExtWallRoof.port_a, convExtWall.solid); connect(resExtWallRoof.port_b, convRoof.solid); if not ATotExt > 0 and not ATotWin > 0 and not AInt > 0 and not AFloor > 0 and ARoof > 0 then connect(thermSplitterIntGains.portOut[1], roofRC.port_a); connect(roofRC.port_a, thermSplitterSolRad.portOut[1]); elseif ATotExt > 0 and not ATotWin > 0 and not AInt > 0 and not AFloor > 0 and ARoof > 0 or not ATotExt > 0 and ATotWin > 0 and not AInt > 0 and not AFloor > 0 and ARoof > 0 or not ATotExt > 0 and not ATotWin > 0 and AInt > 0 and not AFloor > 0 and ARoof > 0 or not ATotExt > 0 and not ATotWin > 0 and not AInt > 0 and AFloor > 0 and ARoof > 0 then connect(thermSplitterIntGains.portOut[2], roofRC.port_a); connect(roofRC.port_a, thermSplitterSolRad.portOut[2]); elseif ATotExt > 0 and ATotWin > 0 and not AInt > 0 and not AFloor > 0 and ARoof > 0 or ATotExt > 0 and not ATotWin > 0 and AInt > 0 and not AFloor > 0 and ARoof > 0 or ATotExt > 0 and not ATotWin > 0 and not AInt > 0 and AFloor > 0 and ARoof > 0 or not ATotExt > 0 and ATotWin > 0 and AInt > 0 and not AFloor > 0 and ARoof > 0 or not ATotExt > 0 and ATotWin > 0 and not AInt > 0 and AFloor > 0 and ARoof > 0 or not ATotExt > 0 and not ATotWin > 0 and AInt > 0 and AFloor > 0 and ARoof > 0 then connect(thermSplitterIntGains.portOut[3], roofRC.port_a); connect(roofRC.port_a, thermSplitterSolRad.portOut[3]); elseif not ATotExt > 0 and ATotWin > 0 and AInt > 0 and AFloor > 0 and ARoof > 0 or ATotExt > 0 and not ATotWin > 0 and AInt > 0 and AFloor > 0 and ARoof > 0 or ATotExt > 0 and ATotWin > 0 and not AInt > 0 and AFloor > 0 and ARoof > 0 or ATotExt > 0 and ATotWin > 0 and AInt > 0 and not AFloor > 0 and ARoof > 0 then connect(thermSplitterIntGains.portOut[4], roofRC.port_a); connect(roofRC.port_a, thermSplitterSolRad.portOut[4]); elseif ATotExt > 0 and ATotWin > 0 and AInt > 0 and AFloor > 0 and ARoof > 0 then connect(thermSplitterSolRad.portOut[5], roofRC.port_a); connect(thermSplitterIntGains.portOut[5], roofRC.port_a); end if; connect(hConRoof_const.y, convRoof.Gc); connect(convRoof.fluid, senTAir.port); connect(roofRC.port_a, roofIndoorSurface); end FourElements;

Buildings.ThermalZones.ReducedOrder.RC.OneElement Buildings.ThermalZones.ReducedOrder.RC.OneElement

Thermal Zone with one element for exterior walls

Buildings.ThermalZones.ReducedOrder.RC.OneElement

Information

This model merges all thermal masses into one element, parameterized by the length of the RC-chain nExt, the vector of the capacities CExt[nExt] that is connected via the vector of resistances RExt[nExt] and RExtRem to the ambient and indoor air. By default, the model neglects all internal thermal masses that are not directly connected to the ambient. However, the thermal capacity of the room air can be increased by using the parameter mSenFac.

The image below shows the RC-network of this model.

image

Extends from Buildings.Fluid.Interfaces.LumpedVolumeDeclarations (Declarations for lumped volumes).

Parameters

TypeNameDefaultDescription
replaceable package MediumPartialMediumMedium in the component
Booleanuse_moisture_balancefalseIf true, input connector QLat_flow is enabled and room air computes moisture balance
Thermal zone
VolumeVAir Air volume of the zone [m3]
CoefficientOfHeatTransferhRad Coefficient of heat transfer for linearized radiation exchange between walls [W/(m2.K)]
IntegernOrientations Number of orientations
Windows
AreaAWin[nOrientations] Vector of areas of windows by orientations [m2]
AreaATransparent[nOrientations] Vector of areas of transparent (solar radiation transmittend) elements by orientations [m2]
CoefficientOfHeatTransferhConWin Convective coefficient of heat transfer of windows (indoor) [W/(m2.K)]
ThermalResistanceRWin Resistor for windows [K/W]
TransmissionCoefficientgWin Total energy transmittance of windows [1]
RealratioWinConRad Ratio for windows between indoor convective and radiative heat emission
BooleanindoorPortWinfalseAdditional heat port at indoor surface of windows
Exterior walls
AreaAExt[nOrientations] Vector of areas of exterior walls by orientations [m2]
CoefficientOfHeatTransferhConExt Convective coefficient of heat transfer of exterior walls (indoor) [W/(m2.K)]
IntegernExt Number of RC-elements of exterior walls
ThermalResistanceRExt[nExt] Vector of resistances of exterior walls, from inside to outside [K/W]
ThermalResistanceRExtRem Resistance of remaining resistor RExtRem between capacity n and outside [K/W]
HeatCapacityCExt[nExt] Vector of heat capacities of exterior walls, from inside to outside [J/K]
BooleanindoorPortExtWallsfalseAdditional heat port at indoor surface of exterior walls
Dynamics
Equations
DynamicsenergyDynamicsModelica.Fluid.Types.Dynamic...Type of energy balance: dynamic (3 initialization options) or steady state
DynamicsmassDynamicsenergyDynamicsType of mass balance: dynamic (3 initialization options) or steady state
RealmSenFac1Factor for scaling the sensible thermal mass of the volume
Initialization
AbsolutePressurep_startMedium.p_defaultStart value of pressure [Pa]
TemperatureT_startMedium.T_defaultStart value of temperature [K]
MassFractionX_start[Medium.nX]Medium.X_defaultStart value of mass fractions m_i/m [kg/kg]
ExtraPropertyC_start[Medium.nC]fill(0, Medium.nC)Start value of trace substances
ExtraPropertyC_nominal[Medium.nC]fill(1E-2, Medium.nC)Nominal value of trace substances. (Set to typical order of magnitude.)
Advanced
Booleanuse_C_flowfalseSet to true to enable input connector for trace substance

Connectors

TypeNameDescription
input RealInputsolRad[nOrientations]Solar radiation transmitted through windows [W/m2]
input RealInputQLat_flowLatent heat gains for the room [W]
output RealOutputTAirIndoor air temperature [K]
output RealOutputTRadMean indoor radiation temperature [K]
VesselFluidPorts_bports[nPorts]Auxiliary fluid inlets and outlets to indoor air volume
HeatPort_aextWallAmbient port for exterior walls
HeatPort_awindowAmbient port for windows
HeatPort_aintGainsConvAuxiliary port for sensible internal convective gains
HeatPort_aintGainsRadAuxiliary port for internal radiative gains
HeatPort_awindowIndoorSurfaceAuxiliary port at indoor surface of windows
HeatPort_aextWallIndoorSurfaceAuxiliary port at indoor surface of exterior walls
input RealInputC_flow[Medium.nC]Trace substance mass flow rate added to the thermal zone

Modelica definition

model OneElement "Thermal Zone with one element for exterior walls" extends Buildings.Fluid.Interfaces.LumpedVolumeDeclarations; parameter Modelica.SIunits.Volume VAir "Air volume of the zone"; parameter Modelica.SIunits.CoefficientOfHeatTransfer hRad "Coefficient of heat transfer for linearized radiation exchange between walls"; parameter Integer nOrientations(min=1) "Number of orientations"; parameter Integer nPorts=0 "Number of fluid ports"; parameter Modelica.SIunits.Area AWin[nOrientations] "Vector of areas of windows by orientations"; parameter Modelica.SIunits.Area ATransparent[nOrientations] "Vector of areas of transparent (solar radiation transmittend) elements by orientations"; parameter Modelica.SIunits.CoefficientOfHeatTransfer hConWin "Convective coefficient of heat transfer of windows (indoor)"; parameter Modelica.SIunits.ThermalResistance RWin "Resistor for windows"; parameter Modelica.SIunits.TransmissionCoefficient gWin "Total energy transmittance of windows"; parameter Real ratioWinConRad "Ratio for windows between indoor convective and radiative heat emission"; parameter Boolean indoorPortWin = false "Additional heat port at indoor surface of windows"; parameter Modelica.SIunits.Area AExt[nOrientations] "Vector of areas of exterior walls by orientations"; parameter Modelica.SIunits.CoefficientOfHeatTransfer hConExt "Convective coefficient of heat transfer of exterior walls (indoor)"; parameter Integer nExt(min = 1) "Number of RC-elements of exterior walls"; parameter Modelica.SIunits.ThermalResistance RExt[nExt]( each min=Modelica.Constants.small) "Vector of resistances of exterior walls, from inside to outside"; parameter Modelica.SIunits.ThermalResistance RExtRem( min=Modelica.Constants.small) "Resistance of remaining resistor RExtRem between capacity n and outside"; parameter Modelica.SIunits.HeatCapacity CExt[nExt]( each min=Modelica.Constants.small) "Vector of heat capacities of exterior walls, from inside to outside"; parameter Boolean indoorPortExtWalls = false "Additional heat port at indoor surface of exterior walls"; parameter Boolean use_moisture_balance = false "If true, input connector QLat_flow is enabled and room air computes moisture balance"; parameter Boolean use_C_flow = false "Set to true to enable input connector for trace substance"; Modelica.Blocks.Interfaces.RealInput solRad[nOrientations]( each final quantity="RadiantEnergyFluenceRate", each final unit="W/m2") if sum(ATransparent) > 0 "Solar radiation transmitted through windows"; Modelica.Blocks.Interfaces.RealInput QLat_flow(final unit="W") if use_moisture_balance and ATot >0 "Latent heat gains for the room"; Modelica.Blocks.Interfaces.RealOutput TAir( final quantity="ThermodynamicTemperature", final unit="K", displayUnit="degC") if ATot > 0 or VAir > 0 "Indoor air temperature"; Modelica.Blocks.Interfaces.RealOutput TRad( final quantity="ThermodynamicTemperature", final unit="K", displayUnit="degC") if ATot > 0 "Mean indoor radiation temperature"; Modelica.Fluid.Vessels.BaseClasses.VesselFluidPorts_b ports[nPorts]( redeclare each final package Medium = Medium) "Auxiliary fluid inlets and outlets to indoor air volume"; Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a extWall if ATotExt > 0 "Ambient port for exterior walls"; Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a window if ATotWin > 0 "Ambient port for windows"; Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a intGainsConv if ATot > 0 or VAir > 0 "Auxiliary port for sensible internal convective gains"; Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a intGainsRad if ATot > 0 "Auxiliary port for internal radiative gains"; Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a windowIndoorSurface if indoorPortWin "Auxiliary port at indoor surface of windows"; Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a extWallIndoorSurface if indoorPortExtWalls "Auxiliary port at indoor surface of exterior walls"; Fluid.MixingVolumes.MixingVolume volAir( redeclare final package Medium = Medium, final nPorts=nPorts, m_flow_nominal=VAir*6/3600*1.2, final V=VAir, final energyDynamics=energyDynamics, final massDynamics=massDynamics, final p_start=p_start, final T_start=T_start, final X_start=X_start, final C_start=C_start, final C_nominal=C_nominal, final mSenFac=mSenFac, final use_C_flow=use_C_flow) if VAir > 0 and not use_moisture_balance "Indoor air volume"; Fluid.MixingVolumes.MixingVolumeMoistAir volMoiAir( redeclare final package Medium = Medium, final nPorts=nPorts, m_flow_nominal=VAir*6/3600*1.2, final V=VAir, final energyDynamics=energyDynamics, final massDynamics=massDynamics, final p_start=p_start, final T_start=T_start, final X_start=X_start, final C_start=C_start, final C_nominal=C_nominal, final mSenFac=mSenFac, final use_C_flow=use_C_flow) if VAir > 0 and use_moisture_balance "Indoor air volume"; Modelica.Thermal.HeatTransfer.Components.ThermalResistor resWin(final R=RWin) if ATotWin > 0 "Resistor for windows"; Modelica.Thermal.HeatTransfer.Sources.PrescribedHeatFlow convHeatSol( final alpha=0) if ratioWinConRad > 0 and (ATot > 0 or VAir > 0) and sum(ATransparent) > 0 "Solar heat considered as convection"; Modelica.Thermal.HeatTransfer.Sources.PrescribedHeatFlow radHeatSol[ nOrientations](each final alpha=0) if ATot > 0 and sum(ATransparent) > 0 "Solar heat considered as radiation"; BaseClasses.ThermSplitter thermSplitterIntGains( final splitFactor=splitFactor, final nOut=dimension, final nIn=1) if ATot > 0 "Splits incoming internal gains into separate gains for each wall element, weighted by their area"; BaseClasses.ThermSplitter thermSplitterSolRad( final splitFactor=splitFactorSolRad, final nOut=dimension, final nIn=nOrientations) if ATot > 0 and sum(ATransparent) > 0 "Splits incoming solar radiation into separate gains for each wall element, weighted by their area"; BaseClasses.ExteriorWall extWallRC( final n=nExt, final RExt=RExt, final CExt=CExt, final RExtRem=RExtRem, final T_start=T_start) if ATotExt > 0 "RC-element for exterior walls"; Modelica.Blocks.Interfaces.RealInput[Medium.nC] C_flow if use_C_flow "Trace substance mass flow rate added to the thermal zone"; protected constant Modelica.SIunits.SpecificEnergy h_fg= Buildings.Media.Air.enthalpyOfCondensingGas(273.15+37) "Latent heat of water vapor"; parameter Modelica.SIunits.Area ATot=sum(AArray) "Sum of wall surface areas"; parameter Modelica.SIunits.Area ATotExt=sum(AExt) "Sum of exterior wall surface areas"; parameter Modelica.SIunits.Area ATotWin=sum(AWin) "Sum of window surface areas"; parameter Modelica.SIunits.Area[:] AArray = {ATotExt, ATotWin} "List of all wall surface areas"; parameter Integer dimension = sum({if A>0 then 1 else 0 for A in AArray}) "Number of non-zero wall surface areas"; parameter Real splitFactor[dimension, 1]= BaseClasses.splitFacVal(dimension, 1, AArray, fill(0, 1), fill(0, 1)) "Share of each wall surface area that is non-zero"; parameter Real splitFactorSolRad[dimension, nOrientations]= BaseClasses.splitFacVal(dimension, nOrientations, AArray, AExt, AWin) "Share of each wall surface area that is non-zero, for each orientation separately"; Modelica.Thermal.HeatTransfer.Components.Convection convExtWall(dT(start=0)) if ATotExt > 0 "Convective heat transfer of exterior walls"; Modelica.Blocks.Sources.Constant hConExtWall_const( final k=ATotExt*hConExt) if ATotExt > 0 "Coefficient of convective heat transfer for exterior walls"; Modelica.Thermal.HeatTransfer.Components.Convection convWin if ATotWin > 0 "Convective heat transfer of windows"; Modelica.Blocks.Sources.Constant hConWin_const(final k=ATotWin*hConWin) "Coefficient of convective heat transfer for windows"; Modelica.Blocks.Math.Gain eRadSol[nOrientations]( final k=gWin*(1 - ratioWinConRad)*ATransparent) if sum(ATransparent) > 0 "Emission coefficient of solar radiation considered as radiation"; Modelica.Blocks.Math.Gain eConvSol[nOrientations]( final k=gWin*ratioWinConRad*ATransparent) if ratioWinConRad > 0 and sum(ATransparent) > 0 "Emission coefficient of solar radiation considered as convection"; Modelica.Thermal.HeatTransfer.Components.ThermalConductor resExtWallWin( final G=min(ATotExt, ATotWin)*hRad) if ATotExt > 0 and ATotWin > 0 "Resistor between exterior walls and windows"; Modelica.Thermal.HeatTransfer.Sensors.TemperatureSensor senTAir if ATot > 0 or VAir > 0 "Indoor air temperature sensor"; Modelica.Thermal.HeatTransfer.Sensors.TemperatureSensor senTRad if ATot > 0 "Mean indoor radiation temperatur sensor"; Modelica.Blocks.Math.Sum sumSolRad(final nin=nOrientations) if ratioWinConRad > 0 and sum(ATransparent) > 0 "Sums up solar radiation from different directions"; Modelica.Blocks.Math.Gain mWat_flow( final k(unit="kg/J") = 1/h_fg, u(final unit="W"), y(final unit="kg/s")) if use_moisture_balance and ATot >0 "Water flow rate due to latent heat gain"; Modelica.Thermal.HeatTransfer.Sources.PrescribedHeatFlow conQLat_flow if use_moisture_balance and ATot >0 "Converter for latent heat flow rate"; equation connect(volAir.ports, ports); connect(volMoiAir.ports, ports); connect(resWin.port_a, window); connect(resWin.port_b, convWin.solid); connect(eRadSol.y, radHeatSol.Q_flow); connect(thermSplitterIntGains.portIn[1], intGainsRad); connect(radHeatSol.port, thermSplitterSolRad.portIn); connect(extWallRC.port_b, extWall); connect(extWallRC.port_a, convExtWall.solid); if ATotExt > 0 and ATotWin > 0 then connect(thermSplitterSolRad.portOut[1], convExtWall.solid); connect(thermSplitterIntGains.portOut[1], convExtWall.solid); connect(thermSplitterSolRad.portOut[2], convWin.solid); connect(thermSplitterIntGains.portOut[2], convWin.solid); elseif not ATotExt > 0 and ATotWin > 0 then connect(thermSplitterSolRad.portOut[1], convWin.solid); connect(thermSplitterIntGains.portOut[1], convWin.solid); elseif ATotExt > 0 and not ATotWin > 0 then connect(thermSplitterSolRad.portOut[1], convExtWall.solid); connect(thermSplitterIntGains.portOut[1], convExtWall.solid); end if; connect(eRadSol.u, solRad); connect(resExtWallWin.port_b, convExtWall.solid); connect(resExtWallWin.port_a, convWin.solid); connect(hConWin_const.y, convWin.Gc); connect(hConExtWall_const.y, convExtWall.Gc); connect(convExtWall.fluid, senTAir.port); connect(convHeatSol.port, senTAir.port); connect(intGainsConv, senTAir.port); connect(convWin.fluid, senTAir.port); connect(volAir.heatPort, senTAir.port); connect(volMoiAir.heatPort, senTAir.port); connect(senTAir.T, TAir); connect(convWin.solid, windowIndoorSurface); connect(convExtWall.solid, extWallIndoorSurface); connect(senTRad.port, thermSplitterIntGains.portIn[1]); connect(senTRad.T, TRad); connect(solRad, eConvSol.u); connect(eConvSol.y, sumSolRad.u); connect(sumSolRad.y, convHeatSol.Q_flow); connect(mWat_flow.y, volMoiAir.mWat_flow); connect(conQLat_flow.port, volMoiAir.heatPort); connect(mWat_flow.u, QLat_flow); connect(conQLat_flow.Q_flow, QLat_flow); connect(volMoiAir.C_flow, C_flow); connect(volAir.C_flow, C_flow); end OneElement;

Buildings.ThermalZones.ReducedOrder.RC.ThreeElements Buildings.ThermalZones.ReducedOrder.RC.ThreeElements

Thermal Zone with three elements for exterior walls, interior walls and floor plate

Buildings.ThermalZones.ReducedOrder.RC.ThreeElements

Information

This model adds one further element for the floor plate. Long-term effects dominate the excitation of the floor plate and thus the excitation fundamentally differs from excitation of outer walls. Adding an extra element for the floor plate leads to a finer resolution of the dynamic behaviour but increases calculation times. The floor plate is parameterized via the length of the RC-chain nFloor, the vector of the capacities CFloor[nFloor], the vector of the resistances RFloor[nFloor] and the remaining resistance RFloorRem.

The image below shows the RC-network of this model.

image

Extends from TwoElements (Thermal Zone with two elements for exterior and interior walls).

Parameters

TypeNameDefaultDescription
replaceable package MediumPartialMediumMedium in the component
Booleanuse_moisture_balancefalseIf true, input connector QLat_flow is enabled and room air computes moisture balance
Thermal zone
VolumeVAir Air volume of the zone [m3]
CoefficientOfHeatTransferhRad Coefficient of heat transfer for linearized radiation exchange between walls [W/(m2.K)]
IntegernOrientations Number of orientations
Windows
AreaAWin[nOrientations] Vector of areas of windows by orientations [m2]
AreaATransparent[nOrientations] Vector of areas of transparent (solar radiation transmittend) elements by orientations [m2]
CoefficientOfHeatTransferhConWin Convective coefficient of heat transfer of windows (indoor) [W/(m2.K)]
ThermalResistanceRWin Resistor for windows [K/W]
TransmissionCoefficientgWin Total energy transmittance of windows [1]
RealratioWinConRad Ratio for windows between indoor convective and radiative heat emission
BooleanindoorPortWinfalseAdditional heat port at indoor surface of windows
Exterior walls
AreaAExt[nOrientations] Vector of areas of exterior walls by orientations [m2]
CoefficientOfHeatTransferhConExt Convective coefficient of heat transfer of exterior walls (indoor) [W/(m2.K)]
IntegernExt Number of RC-elements of exterior walls
ThermalResistanceRExt[nExt] Vector of resistances of exterior walls, from inside to outside [K/W]
ThermalResistanceRExtRem Resistance of remaining resistor RExtRem between capacity n and outside [K/W]
HeatCapacityCExt[nExt] Vector of heat capacities of exterior walls, from inside to outside [J/K]
BooleanindoorPortExtWallsfalseAdditional heat port at indoor surface of exterior walls
Interior walls
AreaAInt Area of interior walls [m2]
CoefficientOfHeatTransferhConInt Convective coefficient of heat transfer of interior walls (indoor) [W/(m2.K)]
IntegernInt Number of RC-elements of interior walls
ThermalResistanceRInt[nInt] Vector of resistances of interior walls, from port to center [K/W]
HeatCapacityCInt[nInt] Vector of heat capacities of interior walls, from port to center [J/K]
BooleanindoorPortIntWallsfalseAdditional heat port at indoor surface of interior walls
Floor plate
AreaAFloor Area of floor plate [m2]
CoefficientOfHeatTransferhConFloor Convective coefficient of heat transfer of floor plate (indoor) [W/(m2.K)]
IntegernFloor Number of RC-elements of floor plate
ThermalResistanceRFloor[nFloor] Vector of resistances of floor plate, from inside to outside [K/W]
ThermalResistanceRFloorRem Resistance of remaining resistor RFloorRem between capacity n and outside [K/W]
HeatCapacityCFloor[nFloor] Vector of heat capacities of floor plate, from inside to outside [J/K]
BooleanindoorPortFloorfalseAdditional heat port at indoor surface of floor plate
Dynamics
Equations
DynamicsenergyDynamicsModelica.Fluid.Types.Dynamic...Type of energy balance: dynamic (3 initialization options) or steady state
DynamicsmassDynamicsenergyDynamicsType of mass balance: dynamic (3 initialization options) or steady state
RealmSenFac1Factor for scaling the sensible thermal mass of the volume
Initialization
AbsolutePressurep_startMedium.p_defaultStart value of pressure [Pa]
TemperatureT_startMedium.T_defaultStart value of temperature [K]
MassFractionX_start[Medium.nX]Medium.X_defaultStart value of mass fractions m_i/m [kg/kg]
ExtraPropertyC_start[Medium.nC]fill(0, Medium.nC)Start value of trace substances
ExtraPropertyC_nominal[Medium.nC]fill(1E-2, Medium.nC)Nominal value of trace substances. (Set to typical order of magnitude.)
Advanced
Booleanuse_C_flowfalseSet to true to enable input connector for trace substance

Connectors

TypeNameDescription
input RealInputsolRad[nOrientations]Solar radiation transmitted through windows [W/m2]
input RealInputQLat_flowLatent heat gains for the room [W]
output RealOutputTAirIndoor air temperature [K]
output RealOutputTRadMean indoor radiation temperature [K]
VesselFluidPorts_bports[nPorts]Auxiliary fluid inlets and outlets to indoor air volume
HeatPort_aextWallAmbient port for exterior walls
HeatPort_awindowAmbient port for windows
HeatPort_aintGainsConvAuxiliary port for sensible internal convective gains
HeatPort_aintGainsRadAuxiliary port for internal radiative gains
HeatPort_awindowIndoorSurfaceAuxiliary port at indoor surface of windows
HeatPort_aextWallIndoorSurfaceAuxiliary port at indoor surface of exterior walls
input RealInputC_flow[Medium.nC]Trace substance mass flow rate added to the thermal zone
HeatPort_aintWallIndoorSurfaceAuxiliary port at indoor surface of interior walls
HeatPort_afloorAmbient port for floor plate
HeatPort_afloorIndoorSurfaceAuxiliary port at indoor surface of floor plate

Modelica definition

model ThreeElements "Thermal Zone with three elements for exterior walls, interior walls and floor plate" extends TwoElements(AArray={ATotExt,ATotWin,AInt,AFloor}); parameter Modelica.SIunits.Area AFloor "Area of floor plate"; parameter Modelica.SIunits.CoefficientOfHeatTransfer hConFloor "Convective coefficient of heat transfer of floor plate (indoor)"; parameter Integer nFloor(min = 1) "Number of RC-elements of floor plate"; parameter Modelica.SIunits.ThermalResistance RFloor[nFloor]( each min=Modelica.Constants.small) "Vector of resistances of floor plate, from inside to outside"; parameter Modelica.SIunits.ThermalResistance RFloorRem( min=Modelica.Constants.small) "Resistance of remaining resistor RFloorRem between capacity n and outside"; parameter Modelica.SIunits.HeatCapacity CFloor[nFloor]( each min=Modelica.Constants.small) "Vector of heat capacities of floor plate, from inside to outside"; parameter Boolean indoorPortFloor = false "Additional heat port at indoor surface of floor plate"; Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a floor if AFloor > 0 "Ambient port for floor plate"; Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a floorIndoorSurface if indoorPortFloor "Auxiliary port at indoor surface of floor plate"; BaseClasses.ExteriorWall floorRC( final n=nFloor, final RExt=RFloor, final RExtRem=RFloorRem, final CExt=CFloor, final T_start=T_start) if AFloor > 0 "RC-element for floor plate"; protected Modelica.Thermal.HeatTransfer.Components.Convection convFloor if AFloor > 0 "Convective heat transfer of floor"; Modelica.Blocks.Sources.Constant hConFloor_const(final k=AFloor*hConFloor) if AFloor > 0 "Coefficient of convective heat transfer for floor"; Modelica.Thermal.HeatTransfer.Components.ThermalConductor resExtWallFloor( final G=min(ATotExt, AFloor)*hRad) if ATotExt > 0 and AFloor > 0 "Resistor between exterior walls and floor"; Modelica.Thermal.HeatTransfer.Components.ThermalConductor resIntWallFloor( final G=min(AFloor, AInt)*hRad) if AInt > 0 and AFloor > 0 "Resistor between interior walls and floor"; Modelica.Thermal.HeatTransfer.Components.ThermalConductor resFloorWin( final G=min(ATotWin, AFloor)*hRad) if ATotWin > 0 and AFloor > 0 "Resistor between floor plate and windows"; equation connect(floorRC.port_a, convFloor.solid); connect(floorRC.port_a, resExtWallFloor.port_b); connect(floorRC.port_a, resIntWallFloor.port_b); connect(floorRC.port_b, floor); connect(resFloorWin.port_a, convWin.solid); if not ATotExt > 0 and not ATotWin > 0 and not AInt > 0 and AFloor > 0 then connect(thermSplitterIntGains.portOut[1], floorRC.port_a); connect(floorRC.port_a, thermSplitterSolRad.portOut[1]); elseif ATotExt > 0 and not ATotWin > 0 and not AInt > 0 and AFloor > 0 or not ATotExt > 0 and ATotWin > 0 and not AInt > 0 and AFloor > 0 or not ATotExt > 0 and not ATotWin > 0 and AInt > 0 and AFloor > 0 then connect(thermSplitterIntGains.portOut[2], floorRC.port_a); connect(floorRC.port_a, thermSplitterSolRad.portOut[2]); elseif not ATotExt > 0 and ATotWin > 0 and AInt > 0 and AFloor > 0 or ATotExt > 0 and not ATotWin > 0 and AInt > 0 and AFloor > 0 or ATotExt > 0 and ATotWin > 0 and not AInt > 0 and AFloor > 0 then connect(thermSplitterIntGains.portOut[3], floorRC.port_a); connect(floorRC.port_a, thermSplitterSolRad.portOut[3]); elseif ATotExt > 0 and ATotWin > 0 and AInt > 0 and AFloor > 0 then connect(thermSplitterIntGains.portOut[4], floorRC.port_a); connect(floorRC.port_a, thermSplitterSolRad.portOut[4]); end if; connect(intWallRC.port_a, resIntWallFloor.port_a); connect(resFloorWin.port_b, resExtWallFloor.port_b); connect(resExtWallFloor.port_a, convExtWall.solid); connect(hConFloor_const.y, convFloor.Gc); connect(convFloor.fluid, senTAir.port); connect(floorRC.port_a, floorIndoorSurface); end ThreeElements;

Buildings.ThermalZones.ReducedOrder.RC.TwoElements Buildings.ThermalZones.ReducedOrder.RC.TwoElements

Thermal Zone with two elements for exterior and interior walls

Buildings.ThermalZones.ReducedOrder.RC.TwoElements

Information

This model distinguishes between internal thermal masses and exterior walls. While exterior walls contribute to heat transfer to the ambient, adiabatic conditions apply to internal masses. Parameters for the internal wall element are the length of the RC-chain nInt, the vector of the capacities CInt[nInt] and the vector of the resistances RInt[nInt]. This approach allows considering the dynamic behaviour induced by internal heat storage.

The image below shows the RC-network of this model.

image

Extends from OneElement (Thermal Zone with one element for exterior walls).

Parameters

TypeNameDefaultDescription
replaceable package MediumPartialMediumMedium in the component
Booleanuse_moisture_balancefalseIf true, input connector QLat_flow is enabled and room air computes moisture balance
Thermal zone
VolumeVAir Air volume of the zone [m3]
CoefficientOfHeatTransferhRad Coefficient of heat transfer for linearized radiation exchange between walls [W/(m2.K)]
IntegernOrientations Number of orientations
Windows
AreaAWin[nOrientations] Vector of areas of windows by orientations [m2]
AreaATransparent[nOrientations] Vector of areas of transparent (solar radiation transmittend) elements by orientations [m2]
CoefficientOfHeatTransferhConWin Convective coefficient of heat transfer of windows (indoor) [W/(m2.K)]
ThermalResistanceRWin Resistor for windows [K/W]
TransmissionCoefficientgWin Total energy transmittance of windows [1]
RealratioWinConRad Ratio for windows between indoor convective and radiative heat emission
BooleanindoorPortWinfalseAdditional heat port at indoor surface of windows
Exterior walls
AreaAExt[nOrientations] Vector of areas of exterior walls by orientations [m2]
CoefficientOfHeatTransferhConExt Convective coefficient of heat transfer of exterior walls (indoor) [W/(m2.K)]
IntegernExt Number of RC-elements of exterior walls
ThermalResistanceRExt[nExt] Vector of resistances of exterior walls, from inside to outside [K/W]
ThermalResistanceRExtRem Resistance of remaining resistor RExtRem between capacity n and outside [K/W]
HeatCapacityCExt[nExt] Vector of heat capacities of exterior walls, from inside to outside [J/K]
BooleanindoorPortExtWallsfalseAdditional heat port at indoor surface of exterior walls
Interior walls
AreaAInt Area of interior walls [m2]
CoefficientOfHeatTransferhConInt Convective coefficient of heat transfer of interior walls (indoor) [W/(m2.K)]
IntegernInt Number of RC-elements of interior walls
ThermalResistanceRInt[nInt] Vector of resistances of interior walls, from port to center [K/W]
HeatCapacityCInt[nInt] Vector of heat capacities of interior walls, from port to center [J/K]
BooleanindoorPortIntWallsfalseAdditional heat port at indoor surface of interior walls
Dynamics
Equations
DynamicsenergyDynamicsModelica.Fluid.Types.Dynamic...Type of energy balance: dynamic (3 initialization options) or steady state
DynamicsmassDynamicsenergyDynamicsType of mass balance: dynamic (3 initialization options) or steady state
RealmSenFac1Factor for scaling the sensible thermal mass of the volume
Initialization
AbsolutePressurep_startMedium.p_defaultStart value of pressure [Pa]
TemperatureT_startMedium.T_defaultStart value of temperature [K]
MassFractionX_start[Medium.nX]Medium.X_defaultStart value of mass fractions m_i/m [kg/kg]
ExtraPropertyC_start[Medium.nC]fill(0, Medium.nC)Start value of trace substances
ExtraPropertyC_nominal[Medium.nC]fill(1E-2, Medium.nC)Nominal value of trace substances. (Set to typical order of magnitude.)
Advanced
Booleanuse_C_flowfalseSet to true to enable input connector for trace substance

Connectors

TypeNameDescription
input RealInputsolRad[nOrientations]Solar radiation transmitted through windows [W/m2]
input RealInputQLat_flowLatent heat gains for the room [W]
output RealOutputTAirIndoor air temperature [K]
output RealOutputTRadMean indoor radiation temperature [K]
VesselFluidPorts_bports[nPorts]Auxiliary fluid inlets and outlets to indoor air volume
HeatPort_aextWallAmbient port for exterior walls
HeatPort_awindowAmbient port for windows
HeatPort_aintGainsConvAuxiliary port for sensible internal convective gains
HeatPort_aintGainsRadAuxiliary port for internal radiative gains
HeatPort_awindowIndoorSurfaceAuxiliary port at indoor surface of windows
HeatPort_aextWallIndoorSurfaceAuxiliary port at indoor surface of exterior walls
input RealInputC_flow[Medium.nC]Trace substance mass flow rate added to the thermal zone
HeatPort_aintWallIndoorSurfaceAuxiliary port at indoor surface of interior walls

Modelica definition

model TwoElements "Thermal Zone with two elements for exterior and interior walls" extends OneElement(AArray={ATotExt,ATotWin,AInt}); parameter Modelica.SIunits.Area AInt "Area of interior walls"; parameter Modelica.SIunits.CoefficientOfHeatTransfer hConInt "Convective coefficient of heat transfer of interior walls (indoor)"; parameter Integer nInt(min = 1) "Number of RC-elements of interior walls"; parameter Modelica.SIunits.ThermalResistance RInt[nInt]( each min=Modelica.Constants.small) "Vector of resistances of interior walls, from port to center"; parameter Modelica.SIunits.HeatCapacity CInt[nInt]( each min=Modelica.Constants.small) "Vector of heat capacities of interior walls, from port to center"; parameter Boolean indoorPortIntWalls = false "Additional heat port at indoor surface of interior walls"; Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a intWallIndoorSurface if indoorPortIntWalls "Auxiliary port at indoor surface of interior walls"; BaseClasses.InteriorWall intWallRC( final n=nInt, final RInt=RInt, final CInt=CInt, final T_start=T_start) if AInt > 0 "RC-element for interior walls"; protected Modelica.Thermal.HeatTransfer.Components.Convection convIntWall(dT(start=0)) if AInt > 0 "Convective heat transfer of interior walls"; Modelica.Blocks.Sources.Constant hConIntWall(k=AInt*hConInt) if AInt > 0 "Coefficient of convective heat transfer for interior walls"; Modelica.Thermal.HeatTransfer.Components.ThermalConductor resExtWallIntWall( final G=min(ATotExt, AInt)*hRad, dT(start=0)) if ATotExt > 0 and AInt > 0 "Resistor between exterior walls and interior walls"; Modelica.Thermal.HeatTransfer.Components.ThermalConductor resIntWallWin( final G=min(ATotWin, AInt)*hRad, dT(start=0)) if ATotWin > 0 and AInt > 0 "Resistor between interior walls and windows"; equation connect(resExtWallIntWall.port_a, convExtWall.solid); connect(convIntWall.solid, intWallRC.port_a); connect(intWallRC.port_a, resExtWallIntWall.port_b); if not ATotExt > 0 and not ATotWin > 0 and AInt > 0 then connect(thermSplitterIntGains.portOut[1], intWallRC.port_a); connect(thermSplitterSolRad.portOut[1], intWallRC.port_a); elseif ATotExt > 0 and not ATotWin > 0 and AInt > 0 or not ATotExt > 0 and ATotWin > 0 and AInt > 0 then connect(thermSplitterIntGains.portOut[2], intWallRC.port_a); connect(thermSplitterSolRad.portOut[2], intWallRC.port_a); elseif ATotExt > 0 and ATotWin > 0 and AInt > 0 then connect(thermSplitterIntGains.portOut[3], intWallRC.port_a); connect(thermSplitterSolRad.portOut[3], intWallRC.port_a); end if; connect(resIntWallWin.port_b, intWallRC.port_a); connect(resIntWallWin.port_a, convWin.solid); connect(hConIntWall.y, convIntWall.Gc); connect(intWallRC.port_a, intWallIndoorSurface); connect(convIntWall.fluid, senTAir.port); end TwoElements;