Model of a floor that consists
of five thermal zones that are representative of one floor of the
new construction medium office building for Chicago, IL,
as described in the set of DOE Commercial Building Benchmarks.
There are four perimeter zones and one core zone.
The envelope thermal properties meet ASHRAE Standard 90.1-2004.
model Floor
replaceable package Medium =
Modelica.Media.Interfaces.PartialMedium
;
parameter Boolean use_windPressure=true
;
parameter HeatTransfer.Types.InteriorConvection intConMod=Buildings.HeatTransfer.Types.InteriorConvection.Temperature
;
parameter Modelica.SIunits.Angle lat ;
parameter Real winWalRat(
min=0.01,
max=0.99) = 0.33 ;
parameter Modelica.SIunits.Length hWin = 1.5 ;
parameter HeatTransfer.Data.Solids.Plywood matFur(x=0.15, nStaRef=5)
;
parameter HeatTransfer.Data.Resistances.Carpet matCar ;
parameter HeatTransfer.Data.Solids.Concrete matCon(
x=0.1,
k=1.311,
c=836,
nStaRef=5) ;
parameter HeatTransfer.Data.Solids.Plywood matWoo(
x=0.01,
k=0.11,
d=544,
nStaRef=1) ;
parameter HeatTransfer.Data.Solids.Generic matIns(
x=0.087,
k=0.049,
c=836.8,
d=265,
nStaRef=5) ;
parameter HeatTransfer.Data.Solids.GypsumBoard matGyp(
x=0.0127,
k=0.16,
c=830,
d=784,
nStaRef=2) ;
parameter HeatTransfer.Data.Solids.GypsumBoard matGyp2(
x=0.025,
k=0.16,
c=830,
d=784,
nStaRef=2) ;
parameter HeatTransfer.Data.OpaqueConstructions.Generic conExtWal(
final nLay=3,
material={matWoo,matIns,matGyp}) ;
parameter HeatTransfer.Data.OpaqueConstructions.Generic conIntWal(
final nLay=1,
material={matGyp2}) ;
parameter HeatTransfer.Data.OpaqueConstructions.Generic conFlo(
final nLay=1, material={
matCon}) ;
parameter HeatTransfer.Data.OpaqueConstructions.Generic conFur(
final nLay=1, material={
matFur}) ;
parameter HeatTransfer.Data.Solids.Plywood matCarTra(
k=0.11,
d=544,
nStaRef=1,
x=0.215/0.11) ;
parameter HeatTransfer.Data.GlazingSystems.DoubleClearAir13Clear glaSys(
UFra=2,
shade=
Buildings.HeatTransfer.Data.Shades.Gray(),
haveInteriorShade=false,
haveExteriorShade=false) ;
parameter Real kIntNor(min=0, max=1) = 1
;
constant Modelica.SIunits.Height hRoo=2.74 ;
parameter Boolean sampleModel = false
;
Buildings.ThermalZones.Detailed.MixedAir sou(
redeclare package Medium =
Medium,
lat=lat,
AFlo=568.77/hRoo,
hRoo=hRoo,
nConExt=0,
nConExtWin=1,
datConExtWin(
layers={conExtWal},
A={49.91*hRoo},
glaSys={glaSys},
wWin={winWalRat/hWin*49.91*hRoo},
each hWin=hWin,
fFra={0.1},
til={Buildings.Types.Tilt.Wall},
azi={Buildings.Types.Azimuth.S}),
nConPar=2,
datConPar(
layers={conFlo,conFur},
A={568.77/hRoo,414.68},
til={Buildings.Types.Tilt.Floor,Buildings.Types.Tilt.Wall}),
nConBou=3,
datConBou(
layers={conIntWal,conIntWal,conIntWal},
A={6.47,40.76,6.47}*hRoo,
til={Buildings.Types.Tilt.Wall, Buildings.Types.Tilt.Wall, Buildings.Types.Tilt.Wall}),
nSurBou=0,
nPorts=5,
intConMod=intConMod,
energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial,
final sampleModel=sampleModel) ;
Buildings.ThermalZones.Detailed.MixedAir eas(
redeclare package Medium =
Medium,
lat=lat,
AFlo=360.0785/hRoo,
hRoo=hRoo,
nConExt=0,
nConExtWin=1,
datConExtWin(
layers={conExtWal},
A={33.27*hRoo},
glaSys={glaSys},
wWin={winWalRat/hWin*33.27*hRoo},
each hWin=hWin,
fFra={0.1},
til={Buildings.Types.Tilt.Wall},
azi={Buildings.Types.Azimuth.E}),
nConPar=2,
datConPar(
layers={conFlo,conFur},
A={360.0785/hRoo,262.52},
til={Buildings.Types.Tilt.Floor,Buildings.Types.Tilt.Wall}),
nConBou=1,
datConBou(
layers={conIntWal},
A={24.13}*hRoo,
til={Buildings.Types.Tilt.Wall}),
nSurBou=2,
surBou(
each A=6.47*hRoo,
each absIR=0.9,
each absSol=0.9,
til={Buildings.Types.Tilt.Wall, Buildings.Types.Tilt.Wall}),
nPorts=5,
intConMod=intConMod,
energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial,
final sampleModel=sampleModel) ;
Buildings.ThermalZones.Detailed.MixedAir nor(
redeclare package Medium =
Medium,
lat=lat,
AFlo=568.77/hRoo,
hRoo=hRoo,
nConExt=0,
nConExtWin=1,
datConExtWin(
layers={conExtWal},
A={49.91*hRoo},
glaSys={glaSys},
wWin={winWalRat/hWin*49.91*hRoo},
each hWin=hWin,
fFra={0.1},
til={Buildings.Types.Tilt.Wall},
azi={Buildings.Types.Azimuth.N}),
nConPar=2,
datConPar(
layers={conFlo,conFur},
A={568.77/hRoo,414.68},
til={Buildings.Types.Tilt.Floor,Buildings.Types.Tilt.Wall}),
nConBou=3,
datConBou(
layers={conIntWal,conIntWal,conIntWal},
A={6.47,40.76,6.47}*hRoo,
til={Buildings.Types.Tilt.Wall, Buildings.Types.Tilt.Wall, Buildings.Types.Tilt.Wall}),
nSurBou=0,
nPorts=5,
intConMod=intConMod,
energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial,
final sampleModel=sampleModel) ;
Buildings.ThermalZones.Detailed.MixedAir wes(
redeclare package Medium =
Medium,
lat=lat,
AFlo=360.0785/hRoo,
hRoo=hRoo,
nConExt=0,
nConExtWin=1,
datConExtWin(
layers={conExtWal},
A={33.27*hRoo},
glaSys={glaSys},
wWin={winWalRat/hWin*33.27*hRoo},
each hWin=hWin,
fFra={0.1},
til={Buildings.Types.Tilt.Wall},
azi={Buildings.Types.Azimuth.W}),
nConPar=2,
datConPar(
layers={conFlo,conFur},
A={360.0785/hRoo,262.52},
til={Buildings.Types.Tilt.Floor,Buildings.Types.Tilt.Wall}),
nConBou=1,
datConBou(
layers={conIntWal},
A={24.13}*hRoo,
til={Buildings.Types.Tilt.Wall}),
nSurBou=2,
surBou(
each A=6.47*hRoo,
each absIR=0.9,
each absSol=0.9,
til={Buildings.Types.Tilt.Wall, Buildings.Types.Tilt.Wall}),
nPorts=5,
intConMod=intConMod,
energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial,
final sampleModel=sampleModel) ;
Buildings.ThermalZones.Detailed.MixedAir cor(
redeclare package Medium =
Medium,
lat=lat,
AFlo=2698/hRoo,
hRoo=hRoo,
nConExt=0,
nConExtWin=0,
nConPar=2,
datConPar(
layers={conFlo,conFur},
A={2698/hRoo,1967.01},
til={Buildings.Types.Tilt.Floor,Buildings.Types.Tilt.Wall}),
nConBou=0,
nSurBou=4,
surBou(
A={40.76,24.13,40.76,24.13}*hRoo,
each absIR=0.9,
each absSol=0.9,
til={Buildings.Types.Tilt.Wall, Buildings.Types.Tilt.Wall, Buildings.Types.Tilt.Wall, Buildings.Types.Tilt.Wall}),
nPorts=11,
intConMod=intConMod,
energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial,
final sampleModel=sampleModel) ;
Modelica.Fluid.Vessels.BaseClasses.VesselFluidPorts_b portsSou[2](
redeclare package Medium =
Medium) ;
Modelica.Fluid.Vessels.BaseClasses.VesselFluidPorts_b portsEas[2](
redeclare package Medium =
Medium) ;
Modelica.Fluid.Vessels.BaseClasses.VesselFluidPorts_b portsNor[2](
redeclare package Medium =
Medium) ;
Modelica.Fluid.Vessels.BaseClasses.VesselFluidPorts_b portsWes[2](
redeclare package Medium =
Medium) ;
Modelica.Fluid.Vessels.BaseClasses.VesselFluidPorts_b portsCor[2](
redeclare package Medium =
Medium) ;
Modelica.Blocks.Math.MatrixGain gai(K=20*[0.4; 0.4; 0.2])
;
Modelica.Blocks.Sources.Constant uSha(k=0)
;
Modelica.Blocks.Routing.Replicator replicator(nout=1);
BoundaryConditions.WeatherData.Bus weaBus ;
RoomLeakage leaSou(
redeclare package Medium =
Medium, VRoo=568.77,
s=49.91/33.27,
azi=Buildings.Types.Azimuth.S,
final use_windPressure=use_windPressure)
;
RoomLeakage leaEas(
redeclare package Medium =
Medium, VRoo=360.0785,
s=33.27/49.91,
azi=Buildings.Types.Azimuth.E,
final use_windPressure=use_windPressure)
;
RoomLeakage leaNor(
redeclare package Medium =
Medium, VRoo=568.77,
s=49.91/33.27,
azi=Buildings.Types.Azimuth.N,
final use_windPressure=use_windPressure)
;
RoomLeakage leaWes(
redeclare package Medium =
Medium, VRoo=360.0785,
s=33.27/49.91,
azi=Buildings.Types.Azimuth.W,
final use_windPressure=use_windPressure)
;
Modelica.Thermal.HeatTransfer.Sensors.TemperatureSensor temAirSou
;
Modelica.Thermal.HeatTransfer.Sensors.TemperatureSensor temAirEas
;
Modelica.Thermal.HeatTransfer.Sensors.TemperatureSensor temAirNor
;
Modelica.Thermal.HeatTransfer.Sensors.TemperatureSensor temAirWes
;
Modelica.Thermal.HeatTransfer.Sensors.TemperatureSensor temAirPer5
;
Modelica.Blocks.Routing.Multiplex5 multiplex5_1;
Modelica.Blocks.Interfaces.RealOutput TRooAir[5](
each unit="K",
each displayUnit="degC") ;
Airflow.Multizone.DoorDiscretizedOpen opeSouCor(
redeclare package Medium =
Medium, wOpe=10,
forceErrorControlOnFlow=false)
;
Airflow.Multizone.DoorDiscretizedOpen opeEasCor(
redeclare package Medium =
Medium, wOpe=10,
forceErrorControlOnFlow=false)
;
Airflow.Multizone.DoorDiscretizedOpen opeNorCor(
redeclare package Medium =
Medium, wOpe=10,
forceErrorControlOnFlow=false)
;
Airflow.Multizone.DoorDiscretizedOpen opeWesCor(
redeclare package Medium =
Medium, wOpe=10,
forceErrorControlOnFlow=false)
;
Modelica.Blocks.Sources.CombiTimeTable intGaiFra(
table=[0,0.05;
8,0.05;
9,0.9;
12,0.9;
12,0.8;
13,0.8;
13,1;
17,1;
19,0.1;
24,0.05],
timeScale=3600,
extrapolation=Modelica.Blocks.Types.Extrapolation.Periodic)
;
Buildings.Fluid.Sensors.RelativePressure senRelPre(
redeclare package Medium =
Medium)
;
Buildings.Fluid.Sources.Outside out(nPorts=1,
redeclare package Medium =
Medium);
Modelica.Blocks.Interfaces.RealOutput p_rel
;
Modelica.Blocks.Math.Gain gaiIntNor[3](
each k=kIntNor)
;
Modelica.Blocks.Math.Gain gaiIntSou[3](
each k=2 - kIntNor)
;
equation
connect(sou.surf_conBou[1], wes.surf_surBou[2]);
connect(sou.surf_conBou[2], cor.surf_surBou[1]);
connect(sou.surf_conBou[3], eas.surf_surBou[1]);
connect(eas.surf_conBou[1], cor.surf_surBou[2]);
connect(eas.surf_surBou[2], nor.surf_conBou[1]);
connect(nor.surf_conBou[2], cor.surf_surBou[3]);
connect(nor.surf_conBou[3], wes.surf_surBou[1]);
connect(wes.surf_conBou[1], cor.surf_surBou[4]);
connect(uSha.y, replicator.u);
connect(replicator.y, nor.uSha);
connect(replicator.y, wes.uSha);
connect(replicator.y, eas.uSha);
connect(replicator.y, sou.uSha);
connect(replicator.y, cor.uSha);
connect(gai.y, cor.qGai_flow);
connect(gai.y, eas.qGai_flow);
connect(gai.y, wes.qGai_flow);
connect(sou.weaBus, weaBus);
connect(eas.weaBus, weaBus);
connect(nor.weaBus, weaBus);
connect(wes.weaBus, weaBus);
connect(cor.weaBus, weaBus);
connect(weaBus, leaSou.weaBus);
connect(weaBus, leaEas.weaBus);
connect(weaBus, leaNor.weaBus);
connect(weaBus, leaWes.weaBus);
connect(multiplex5_1.y, TRooAir);
connect(temAirSou.T, multiplex5_1.u1[1]);
connect(temAirEas.T, multiplex5_1.u2[1]);
connect(temAirNor.T, multiplex5_1.u3[1]);
connect(temAirWes.T, multiplex5_1.u4[1]);
connect(temAirPer5.T, multiplex5_1.u5[1]);
connect(sou.heaPorAir, temAirSou.port);
connect(eas.heaPorAir, temAirEas.port);
connect(nor.heaPorAir, temAirNor.port);
connect(wes.heaPorAir, temAirWes.port);
connect(cor.heaPorAir, temAirPer5.port);
connect(sou.ports[1], portsSou[1]);
connect(sou.ports[2], portsSou[2]);
connect(eas.ports[1], portsEas[1]);
connect(eas.ports[2], portsEas[2]);
connect(nor.ports[1], portsNor[1]);
connect(nor.ports[2], portsNor[2]);
connect(wes.ports[1], portsWes[1]);
connect(wes.ports[2], portsWes[2]);
connect(cor.ports[1], portsCor[1]);
connect(cor.ports[2], portsCor[2]);
connect(leaSou.port_b, sou.ports[3]);
connect(leaEas.port_b, eas.ports[3]);
connect(leaNor.port_b, nor.ports[3]);
connect(leaWes.port_b, wes.ports[3]);
connect(opeSouCor.port_b1, cor.ports[3]);
connect(opeSouCor.port_a2, cor.ports[4]);
connect(opeSouCor.port_a1, sou.ports[4]);
connect(opeSouCor.port_b2, sou.ports[5]);
connect(opeEasCor.port_b1, eas.ports[4]);
connect(opeEasCor.port_a2, eas.ports[5]);
connect(opeEasCor.port_a1, cor.ports[5]);
connect(opeEasCor.port_b2, cor.ports[6]);
connect(opeNorCor.port_b1, nor.ports[4]);
connect(opeNorCor.port_a2, nor.ports[5]);
connect(opeNorCor.port_a1, cor.ports[7]);
connect(opeNorCor.port_b2, cor.ports[8]);
connect(opeWesCor.port_b1, cor.ports[9]);
connect(opeWesCor.port_a2, cor.ports[10]);
connect(opeWesCor.port_a1, wes.ports[4]);
connect(opeWesCor.port_b2, wes.ports[5]);
connect(intGaiFra.y, gai.u);
connect(cor.ports[11], senRelPre.port_a);
connect(out.weaBus, weaBus);
connect(out.ports[1], senRelPre.port_b);
connect(senRelPre.p_rel, p_rel);
connect(gai.y, gaiIntNor.u);
connect(gaiIntNor.y, nor.qGai_flow);
connect(gai.y, gaiIntSou.u);
connect(gaiIntSou.y, sou.qGai_flow);
end Floor;
Room leakage.
Model for a VAV supply branch.
The terminal VAV box has a pressure independent damper and a water reheat coil.
The pressure independent damper model includes an idealized flow rate controller
and requires a discharge air flow rate set-point (normalized to the nominal value)
as a control signal.