Buildings.Examples.ScalableBenchmarks.BuildingVAV.ThermalZones

Scalable building envelope model

Information

This package includes building envelope model that extends from Buildings.ThermalZones.Detailed.MixedAir. The model Buildings.Examples.ScalableBenchmarks.BuildingVAV.ThermalZones.MultiZone is scalable through changing the number of floors and zones.

Internal heat gain which includes radiative heat gain qRadGai_flow, convective heat gain qConGai_flow, and latent heat gain qLatGai_flow are referenced from ASHRAE Handbook fundamental. The factor gainFactor is used to scale up/down the heat gain. The gain schdule is specified by intLoad. Air infiltration from outside is assumed to be 0.5 ACH.

Package Content

Name Description
Buildings.Examples.ScalableBenchmarks.BuildingVAV.ThermalZones.MultiZone MultiZone Multiple thermal zone models
Buildings.Examples.ScalableBenchmarks.BuildingVAV.ThermalZones.ThermalZone ThermalZone Thermal zone model
Buildings.Examples.ScalableBenchmarks.BuildingVAV.ThermalZones.Validation Validation Collection of validation models

Buildings.Examples.ScalableBenchmarks.BuildingVAV.ThermalZones.MultiZone Buildings.Examples.ScalableBenchmarks.BuildingVAV.ThermalZones.MultiZone

Multiple thermal zone models

Buildings.Examples.ScalableBenchmarks.BuildingVAV.ThermalZones.MultiZone

Information

This model groups multiple zones by linking adjacent walls, floors and ceilings. The factor ampFactor controls the fluctuating amplitude of internal heat gain in each zone.

Parameters

TypeNameDefaultDescription
IntegernZon1Number of zones per floor
IntegernFlo1Number of floors
Anglelat41.98*3.14159/180Latitude [rad]
RealampFactor[nZon]if nZon <= 5 then {abs(cos(i...IHG fluctuating amplitude factor

Connectors

TypeNameDescription
VesselFluidPorts_bportsIn[nZon, nFlo]Fluid inlets
VesselFluidPorts_bportsOut[nZon, nFlo]Fluid outlets
output RealOutputTRooAir[nZon, nFlo]Room air temperatures
output RealOutputheaCooPow[nZon, nFlo]HVAC power
BusweaBusWeather data bus

Modelica definition

model MultiZone "Multiple thermal zone models" package MediumA = Buildings.Media.Air "Medium model"; parameter Integer nZon(min=1) = 1 "Number of zones per floor"; parameter Integer nFlo(min=1) = 1 "Number of floors"; parameter Modelica.SIunits.Angle lat=41.98*3.14159/180 "Latitude"; parameter Real ampFactor[nZon]= if nZon<=5 then {abs(cos(i*3.1415926/(nZon))) for i in 1:nZon} else {abs(cos(i*3.1415926/5)) for i in 1:nZon} "IHG fluctuating amplitude factor"; Modelica.Fluid.Vessels.BaseClasses.VesselFluidPorts_b portsIn[nZon,nFlo]( redeclare each package Medium = MediumA) "Fluid inlets"; Modelica.Fluid.Vessels.BaseClasses.VesselFluidPorts_b portsOut[nZon,nFlo]( redeclare each package Medium = MediumA) "Fluid outlets"; Modelica.Blocks.Interfaces.RealOutput TRooAir[nZon,nFlo] "Room air temperatures"; Modelica.Blocks.Interfaces.RealOutput heaCooPow[nZon,nFlo] "HVAC power"; Buildings.Examples.ScalableBenchmarks.BuildingVAV.ThermalZones.ThermalZone theZon[nZon,nFlo]( redeclare each package MediumA = MediumA, each final lat=lat, gainFactor={{ampFactor[i] for j in 1:nFlo} for i in 1:nZon}) "Thermal zone model"; Buildings.BoundaryConditions.WeatherData.Bus weaBus "Weather data bus"; equation for iZon in 1:nZon-1 loop for iFlo in 1:nFlo-1 loop connect(theZon[iZon, iFlo].heaPorFlo, theZon[iZon, if iFlo == nFlo then 1 else iFlo+1].heaPorCei); connect(theZon[iZon, iFlo].heaPorWal1, theZon[if iZon == nZon then 1 else iZon+1, iFlo].heaPorWal2); end for; end for; for iZon in 1:nZon loop for iFlo in 1:nFlo loop connect(weaBus, theZon[iZon, iFlo].weaBus); connect(portsIn[iZon, iFlo], theZon[iZon, iFlo].portsInOut[1]); connect(portsOut[iZon, iFlo], theZon[iZon, iFlo].portsInOut[2]); connect(theZon[iZon, iFlo].heaCooPow, heaCooPow[iZon, iFlo]); connect(theZon[iZon, iFlo].TRooAir, TRooAir[iZon, iFlo]); end for; end for; end MultiZone;

Buildings.Examples.ScalableBenchmarks.BuildingVAV.ThermalZones.ThermalZone Buildings.Examples.ScalableBenchmarks.BuildingVAV.ThermalZones.ThermalZone

Thermal zone model

Buildings.Examples.ScalableBenchmarks.BuildingVAV.ThermalZones.ThermalZone

Information

This model consist a building envelope model which is extented from Buildings.ThermalZones.Detailed.MixedAir.

Internal heat gain which includes radiative heat gain qRadGai_flow, convective heat gain qConGai_flow, and latent heat gain qLatGai_flow are referenced from ASHRAE Handbook fundamental. The factor gainFactor is used to scale up/down the heat gain. The gain schdule is specified by intLoad. A constant air infiltration from outside is assumed.

Parameters

TypeNameDefaultDescription
replaceable package MediumAModelica.Media.Interfaces.Pa...Medium model
Anglelat Latitude [rad]
RealgainFactorgainFactor(start=1)IHG fluctuating amplitude factor
RealVInf_flow(roo.AFlo*roo.hRoo)*0.5/3600Infiltration volume flow rate

Connectors

TypeNameDescription
replaceable package MediumAMedium model
output RealOutputTRooAirRoom air temperatures
output RealOutputheaCooPowHVAC power
VesselFluidPorts_bportsInOut[2]Fluid inlets and outlets
HeatPort_aheaPorWal1Heat port connected to common wall
HeatPort_aheaPorFloHeat port connected to floor
HeatPort_bheaPorCeiHeat port connected to ceiling
HeatPort_bheaPorWal2Heat port connected to common wall
BusweaBusWeather data bus

Modelica definition

model ThermalZone "Thermal zone model" replaceable package MediumA = Modelica.Media.Interfaces.PartialMedium "Medium model"; parameter Modelica.SIunits.Angle lat "Latitude"; parameter Real gainFactor(start=1) "IHG fluctuating amplitude factor"; parameter Real VInf_flow=(roo.AFlo*roo.hRoo)*0.5/3600 "Infiltration volume flow rate"; final parameter Modelica.SIunits.Angle S_= Buildings.Types.Azimuth.S "Azimuth for south walls"; final parameter Modelica.SIunits.Angle E_= Buildings.Types.Azimuth.E "Azimuth for east walls"; final parameter Modelica.SIunits.Angle W_= Buildings.Types.Azimuth.W "Azimuth for west walls"; final parameter Modelica.SIunits.Angle N_= Buildings.Types.Azimuth.N "Azimuth for north walls"; final parameter Modelica.SIunits.Angle C_= Buildings.Types.Tilt.Ceiling "Tilt for ceiling"; final parameter Modelica.SIunits.Angle F_= Buildings.Types.Tilt.Floor "Tilt for floor"; final parameter Modelica.SIunits.Angle Z_= Buildings.Types.Tilt.Wall "Tilt for wall"; final parameter HeatTransfer.Data.Solids.Plywood matFur(x=0.15, nStaRef=5) "Material for furniture"; final parameter HeatTransfer.Data.Solids.Concrete matCon( x=0.1, k=1.311, c=836, nStaRef=5) "Concrete"; final parameter HeatTransfer.Data.Solids.Plywood matWoo( x=0.01, k=0.11, d=544, nStaRef=1) "Wood for exterior construction"; final parameter HeatTransfer.Data.Solids.Generic matIns( x=0.087, k=0.049, c=836.8, d=265, nStaRef=5) "Steelframe construction with insulation"; final parameter HeatTransfer.Data.Solids.GypsumBoard matGyp( x=0.0127, k=0.16, c=830, d=784, nStaRef=2) "Gypsum board"; final parameter HeatTransfer.Data.Solids.GypsumBoard matGyp2( x=0.025, k=0.16, c=830, d=784, nStaRef=2) "Gypsum board"; final parameter HeatTransfer.Data.OpaqueConstructions.Generic conExtWal( final nLay=3, material={matWoo,matIns,matGyp}) "Exterior construction"; final parameter HeatTransfer.Data.OpaqueConstructions.Generic conIntWal( final nLay=1, material={matGyp2}) "Interior wall construction"; final parameter HeatTransfer.Data.OpaqueConstructions.Generic conFlo( final nLay=1, material={matCon}) "Floor construction (opa_a is carpet)"; final parameter HeatTransfer.Data.Solids.Plywood matCarTra( k=0.11, d=544, nStaRef=1, x=0.215/0.11) "Wood for floor"; final parameter HeatTransfer.Data.GlazingSystems.DoubleClearAir13Clear glaSys( UFra=2, shade=Buildings.HeatTransfer.Data.Shades.Gray(), haveInteriorShade=false, haveExteriorShade=false) "Data record for the glazing system"; Modelica.Blocks.Interfaces.RealOutput TRooAir "Room air temperatures"; Modelica.Blocks.Interfaces.RealOutput heaCooPow "HVAC power"; Modelica.Fluid.Vessels.BaseClasses.VesselFluidPorts_b portsInOut[2]( redeclare package Medium = MediumA) "Fluid inlets and outlets"; Buildings.Fluid.Sensors.TemperatureTwoPort supAirTem( redeclare package Medium = MediumA, m_flow_nominal=1, tau=0) "Supply air temperature sensor"; Buildings.Fluid.Sensors.TemperatureTwoPort retAirTem( redeclare package Medium = MediumA, m_flow_nominal=1, tau=0) "Return air temperature sensor"; Buildings.Fluid.Sensors.MassFlowRate supplyAirFlow( redeclare package Medium = MediumA) "Supply air flow rate"; Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a heaPorWal1 "Heat port connected to common wall"; Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a heaPorFlo "Heat port connected to floor"; Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_b heaPorCei "Heat port connected to ceiling"; Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_b heaPorWal2 "Heat port connected to common wall"; Buildings.ThermalZones.Detailed.MixedAir roo( redeclare package Medium = MediumA, hRoo=2.7, nPorts=4, energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, AFlo=6*8, datConExtWin( layers={conExtWal}, A={8*2.7}, glaSys={glaSys}, wWin={2*3}, hWin={2}, fFra={0.001}, til={Z_}, azi={S_}), datConBou( layers={conFlo, conIntWal}, A={6*8, 6*2.7}, til={F_, Z_}), surBou( A={6*8, 6*2.7}, til={C_, Z_}, absIR = {conFlo.absIR_a, conIntWal.absIR_a}, absSol = {conFlo.absSol_a, conIntWal.absSol_a}), datConPar( layers={conIntWal}, A={8*2.7/2}, til={Buildings.Types.Tilt.Wall}), nConExt=0, nConPar=1, nSurBou=2, nConBou=2, nConExtWin=1, lat=lat) "Room model, adapted from BESTEST Case 600 and VAVReheat model (for constructions)"; Modelica.Blocks.Sources.Constant qConGai_flow(k=579/48) "Convective heat gain"; Modelica.Blocks.Sources.Constant qRadGai_flow(k=689/48) "Radiative heat gain"; Modelica.Blocks.Sources.Constant qLatGai_flow(k=146.5/48) "Latent heat gain"; Modelica.Blocks.Routing.Multiplex3 multiplex3_1 "Sum of heat gain"; Modelica.Blocks.Sources.Constant uSha(k=0) "Control signal for the shading device"; Buildings.Fluid.Sources.Outside sinInf( redeclare package Medium = MediumA, nPorts=1) "Sink model for air infiltration"; Buildings.BoundaryConditions.WeatherData.Bus weaBus "Weather data bus"; Modelica.Blocks.Math.Product product1 "Scheduled radiative heat gain"; Modelica.Blocks.Math.Gain gain(k=gainFactor) "Factorized radiative heat gain"; Modelica.Blocks.Math.Product product2 "Scheduled convective heat gain"; Modelica.Blocks.Math.Gain gain1(k=gainFactor) "Factorized convective heat gain"; Modelica.Blocks.Math.Product product3 "Scheduled latent heat gain"; Modelica.Blocks.Math.Gain gain2(k=gainFactor) "Factorized latent heat gain"; Modelica.Blocks.Sources.RealExpression powCal(y=supplyAirFlow.m_flow*1005*( supAirTem.T - TRooAir)) "Power calculation, with cooling negative and heating positive"; Modelica.Thermal.HeatTransfer.Sensors.TemperatureSensor rooAirTem "Air temperature sensor"; Buildings.Examples.ScalableBenchmarks.BuildingVAV.BaseClasses.IntLoad intLoad( table=[0,0.1; ((gainFactor - 0.5) + 8)*3600,1.0; ((gainFactor - 0.5) + 18)*3600,0.1; 24*3600,0.1]) "Internal load schedule"; Fluid.Sources.MassFlowSource_T souInf( redeclare package Medium = MediumA, nPorts=1, use_m_flow_in=false, m_flow=-VInf_flow*1.2) "Source model for air infiltration"; Fluid.FixedResistances.PressureDrop res( redeclare package Medium = MediumA, m_flow_nominal=VInf_flow*1.2, dp_nominal=20, linearized=true) "Pressure drop for infiltration"; equation connect(multiplex3_1.y, roo.qGai_flow); connect(roo.surf_conBou[1], heaPorFlo); connect(roo.surf_conBou[2], heaPorWal1); connect(roo.surf_surBou[1], heaPorCei); connect(roo.surf_surBou[1], heaPorWal2); connect(uSha.y, roo.uSha[1]); connect(weaBus, roo.weaBus); connect(sinInf.weaBus, weaBus); connect(qLatGai_flow.y, product3.u1); connect(product3.y, gain2.u); connect(product2.y, gain1.u); connect(product1.y, gain.u); connect(gain1.y, multiplex3_1.u2[1]); connect(qConGai_flow.y, product2.u1); connect(qRadGai_flow.y, product1.u1); connect(gain.y, multiplex3_1.u1[1]); connect(gain2.y, multiplex3_1.u3[1]); connect(intLoad.y[1], product1.u2); connect(product1.u2, product2.u2); connect(product1.u2, product3.u2); connect(souInf.ports[1], roo.ports[1]); connect(sinInf.ports[1], res.port_a); connect(res.port_b, roo.ports[2]); connect(supAirTem.port_a,supplyAirFlow.port_b); connect(portsInOut[1],supplyAirFlow.port_a); connect(portsInOut[2],retAirTem.port_b); connect(rooAirTem.T, TRooAir); connect(powCal.y, heaCooPow); connect(supAirTem.port_b, roo.ports[3]); connect(retAirTem.port_a, roo.ports[4]); connect(roo.heaPorAir, rooAirTem.port); end ThermalZone;