IEA EBC Annex 60 EBC logo

Annex60.Experimental.Benchmarks.AirFlow.Examples

Example models for a scalable air flow benchmark

Information

Extends from Modelica.Icons.ExamplesPackage (Icon for packages containing runnable examples).

Package Content

Name Description
Annex60.Experimental.Benchmarks.AirFlow.Examples.MultipleFloorsVectors MultipleFloorsVectors Test case for air flow between multiple floors in vector design
Annex60.Experimental.Benchmarks.AirFlow.Examples.TwoFloors TwoFloors Test case for air flow between two floors
Annex60.Experimental.Benchmarks.AirFlow.Examples.ZoneStepResponse ZoneStepResponse Example to test the thermal step response of a SimpleZone

Annex60.Experimental.Benchmarks.AirFlow.Examples.MultipleFloorsVectors Annex60.Experimental.Benchmarks.AirFlow.Examples.MultipleFloorsVectors

Test case for air flow between multiple floors in vector design

Annex60.Experimental.Benchmarks.AirFlow.Examples.MultipleFloorsVectors

Information

A fully scalable air flow benchmark model

Typical use and important parameters

With nZones and nFloors, this vectorized model can be scaled to represent a simple building of any size.

References

Inspired by Annex60.Airflow.Multizone.Validation.ThreeRoomsContam

Extends from Modelica.Icons.Example (Icon for runnable examples).

Parameters

TypeNameDefaultDescription
replaceable package MediumAnnex60.Media.Air 
IntegernZones4Number of zone elements per floor
IntegernFloors2Number of floors
TemperatureTRoom298.15Indoor air temperature of room in K [K]
TemperatureTHallway293.15Indoor air temperature of hallway in K [K]
TemperatureTStaircase293.15Indoor air temperature of staircase in K [K]
HeightheightRooms3Height of rooms in m [m]
LengthlengthZone5Length of room in m [m]
LengthwidthZone5Width of room in m [m]
LengthwidthHallway3Width of room in m [m]
RealdoorOpening1Opening of door (between 0:closed and 1:open)
BooleanforceErrorControlOnFlowtrueFlag to force error control on m_flow. Set to true if interested in flow rate

Connectors

TypeNameDescription
replaceable package Medium 

Modelica definition

model MultipleFloorsVectors "Test case for air flow between multiple floors in vector design" extends Modelica.Icons.Example; replaceable package Medium = Annex60.Media.Air; parameter Integer nZones(min=1) = 4 "Number of zone elements per floor"; parameter Integer nFloors(min=2) = 2 "Number of floors"; parameter Modelica.SIunits.Temperature TRoom = 298.15 "Indoor air temperature of room in K"; parameter Modelica.SIunits.Temperature THallway = 293.15 "Indoor air temperature of hallway in K"; parameter Modelica.SIunits.Temperature TStaircase = 293.15 "Indoor air temperature of staircase in K"; parameter Modelica.SIunits.Height heightRooms = 3 "Height of rooms in m"; parameter Modelica.SIunits.Length lengthZone = 5 "Length of room in m"; parameter Modelica.SIunits.Length widthZone = 5 "Width of room in m"; parameter Modelica.SIunits.Length widthHallway = 3 "Width of room in m"; parameter Real doorOpening = 1 "Opening of door (between 0:closed and 1:open)"; parameter Boolean forceErrorControlOnFlow = true "Flag to force error control on m_flow. Set to true if interested in flow rate"; Components.Floor floor[nFloors]( each nZones=nZones, each TRoom=TRoom, each THallway=THallway, each TStaircase=TStaircase, each heightRooms=heightRooms, each lengthZone=lengthZone, each widthZone=widthZone, each widthHallway=widthHallway, redeclare each package Medium = Medium, each forceErrorControlOnFlow=forceErrorControlOnFlow) "Vector of floor elements"; BoundaryConditions.WeatherData.ReaderTMY3 weaDat(filNam="modelica://Annex60/Resources/weatherdata/USA_CA_San.Francisco.Intl.AP.724940_TMY3.mos") "Weather data reader for input into floor models"; equation for i in 1:(nFloors-1) loop connect(floor[i].port_a_top, floor[i+1].port_a_bot); end for; for i in 1:(nFloors) loop connect(weaDat.weaBus, floor[i].weaBus1); end for; end MultipleFloorsVectors;

Annex60.Experimental.Benchmarks.AirFlow.Examples.TwoFloors Annex60.Experimental.Benchmarks.AirFlow.Examples.TwoFloors

Test case for air flow between two floors

Annex60.Experimental.Benchmarks.AirFlow.Examples.TwoFloors

Information

A reference model to compare to the floor model for a scalable air flow benchmark.

Validation

This model should give the same results as the Annex60.Experimental.Benchmarks.AirFlow.Examples.MultipleFloorsVectors model with nZones = 4 and nFloors = 2.

References

Inspired by Annex60.Airflow.Multizone.Validation.ThreeRoomsContam

Extends from Modelica.Icons.Example (Icon for runnable examples).

Parameters

TypeNameDefaultDescription
replaceable package MediumAnnex60.Media.AirMedium in the components
BooleanforceErrorControlOnFlowtrueOptional forcing of error control

Connectors

TypeNameDescription
replaceable package MediumMedium in the components

Modelica definition

model TwoFloors "Test case for air flow between two floors" extends Modelica.Icons.Example; replaceable package Medium = Annex60.Media.Air "Medium in the components"; parameter Boolean forceErrorControlOnFlow = true "Optional forcing of error control"; Components.ZoneHallway zoneHallway( forceErrorControlOnFlow=forceErrorControlOnFlow, redeclare package Medium = Medium) "Single hallway element"; Components.SimpleZone simpleZone1_4( forceErrorControlOnFlow=forceErrorControlOnFlow, TRoom = 298.15, redeclare package Medium = Medium) "Single simple zone element"; Components.OutsideEnvironment outsideEnvironment(redeclare package Medium = Medium) "Single outside environment element"; Components.ZoneHallway zoneHallway1( forceErrorControlOnFlow=forceErrorControlOnFlow, redeclare package Medium = Medium) "Single hallway element"; Components.ZoneHallway zoneHallway2( forceErrorControlOnFlow=forceErrorControlOnFlow, redeclare package Medium = Medium) "Single hallway element"; Components.ZoneHallway zoneHallway3( forceErrorControlOnFlow=forceErrorControlOnFlow, redeclare package Medium = Medium) "Single hallway element"; Components.SimpleZone simpleZone1_3( forceErrorControlOnFlow=forceErrorControlOnFlow, TRoom = 298.15, redeclare package Medium = Medium) "Single simple zone element"; Components.SimpleZone simpleZone1_2( forceErrorControlOnFlow=forceErrorControlOnFlow, TRoom = 298.15, redeclare package Medium = Medium) "Single simple zone element"; Components.SimpleZone simpleZone1_1( forceErrorControlOnFlow=forceErrorControlOnFlow, TRoom = 298.15, redeclare package Medium = Medium) "Single simple zone element"; Components.OutsideEnvironment outsideEnvironment1(redeclare package Medium = Medium) "Single outside environment element"; Components.OutsideEnvironment outsideEnvironment2(redeclare package Medium = Medium) "Single outside environment element"; Components.OutsideEnvironment outsideEnvironment3(redeclare package Medium = Medium) "Single outside environment element"; Components.ZoneHallway zoneHallway4( forceErrorControlOnFlow=forceErrorControlOnFlow, redeclare package Medium = Medium) "Single hallway element"; Components.SimpleZone simpleZone2_4( forceErrorControlOnFlow=forceErrorControlOnFlow, TRoom = 298.15, redeclare package Medium = Medium) "Single simple zone element"; Components.OutsideEnvironment outsideEnvironment4(redeclare package Medium = Medium) "Single outside environment element"; Components.ZoneHallway zoneHallway5( forceErrorControlOnFlow=forceErrorControlOnFlow, redeclare package Medium = Medium) "Single hallway element"; Components.ZoneHallway zoneHallway6( forceErrorControlOnFlow=forceErrorControlOnFlow, redeclare package Medium = Medium) "Single hallway element"; Components.ZoneHallway zoneHallway7( forceErrorControlOnFlow=forceErrorControlOnFlow, redeclare package Medium = Medium) "Single hallway element"; Components.SimpleZone simpleZone2_3( forceErrorControlOnFlow=forceErrorControlOnFlow, TRoom = 298.15, redeclare package Medium = Medium) "Single simple zone element"; Components.SimpleZone simpleZone2_2( forceErrorControlOnFlow=forceErrorControlOnFlow, TRoom = 298.15, redeclare package Medium = Medium) "Single simple zone element"; Components.SimpleZone simpleZone2_1( forceErrorControlOnFlow=forceErrorControlOnFlow, TRoom = 298.15, redeclare package Medium = Medium) "Single simple zone element"; Components.OutsideEnvironment outsideEnvironment5(redeclare package Medium = Medium) "Single outside environment element"; Components.OutsideEnvironment outsideEnvironment6(redeclare package Medium = Medium) "Single outside environment element"; Components.OutsideEnvironment outsideEnvironment7(redeclare package Medium = Medium) "Single outside environment element"; Components.Staircase staircase1(redeclare package Medium = Medium) "First staircase element"; Components.Staircase staircase2(redeclare package Medium = Medium) "Second staircase element"; BoundaryConditions.WeatherData.ReaderTMY3 weaDat(filNam= "modelica://Annex60/Resources/weatherdata/USA_CA_San.Francisco.Intl.AP.724940_TMY3.mos") "Weather file reader for input to air flow models"; equation connect(simpleZone2_4.port_a, zoneHallway4.port_a_toZone); connect(simpleZone2_4.port_b, zoneHallway4.port_b_toZone); connect(zoneHallway4.port_a2, zoneHallway5.port_a1); connect(zoneHallway4.port_b2, zoneHallway5.port_b1); connect(zoneHallway4.port_a_toOutside, outsideEnvironment4.port_a); connect(zoneHallway4.port_b_toOutside, outsideEnvironment4.port_b); connect(zoneHallway5.port_b_toOutside, outsideEnvironment5.port_b); connect(zoneHallway5.port_a_toOutside, outsideEnvironment5.port_a); connect(simpleZone2_3.port_b, zoneHallway5.port_b_toZone); connect(simpleZone2_3.port_a, zoneHallway5.port_a_toZone); connect(zoneHallway5.port_a2, zoneHallway6.port_a1); connect(zoneHallway5.port_b2, zoneHallway6.port_b1); connect(simpleZone2_2.port_b, zoneHallway6.port_b_toZone); connect(simpleZone2_2.port_a, zoneHallway6.port_a_toZone); connect(zoneHallway6.port_a2, zoneHallway7.port_a1); connect(zoneHallway6.port_b2, zoneHallway7.port_b1); connect(zoneHallway6.port_a_toOutside, outsideEnvironment6.port_a); connect(zoneHallway6.port_b_toOutside, outsideEnvironment6.port_b); connect(zoneHallway7.port_b_toOutside, outsideEnvironment7.port_b); connect(zoneHallway7.port_a_toOutside, outsideEnvironment7.port_a); connect(simpleZone2_1.port_b, zoneHallway7.port_b_toZone); connect(simpleZone2_1.port_a, zoneHallway7.port_a_toZone); connect(zoneHallway7.port_a2,staircase2. port_a_toHallway); connect(zoneHallway7.port_b2,staircase2. port_b_toHallway); connect(staircase2.port_a_bot, staircase1.port_a_top); connect(staircase1.port_a_toHallway, zoneHallway3.port_a2); connect(staircase1.port_b_toHallway, zoneHallway3.port_b2); connect(simpleZone1_1.port_a, zoneHallway3.port_a_toZone); connect(simpleZone1_1.port_b, zoneHallway3.port_b_toZone); connect(zoneHallway3.port_a_toOutside, outsideEnvironment3.port_a); connect(zoneHallway3.port_b_toOutside, outsideEnvironment3.port_b); connect(zoneHallway3.port_a1, zoneHallway2.port_a2); connect(zoneHallway3.port_b1, zoneHallway2.port_b2); connect(zoneHallway2.port_a_toOutside, outsideEnvironment2.port_a); connect(zoneHallway2.port_b_toOutside, outsideEnvironment2.port_b); connect(zoneHallway2.port_a1, zoneHallway1.port_a2); connect(zoneHallway2.port_b1, zoneHallway1.port_b2); connect(simpleZone1_3.port_a, zoneHallway1.port_a_toZone); connect(simpleZone1_3.port_b, zoneHallway1.port_b_toZone); connect(zoneHallway1.port_a_toOutside, outsideEnvironment1.port_a); connect(zoneHallway1.port_b_toOutside, outsideEnvironment1.port_b); connect(zoneHallway1.port_a1, zoneHallway.port_a2); connect(zoneHallway1.port_b1, zoneHallway.port_b2); connect(simpleZone1_4.port_a, zoneHallway.port_a_toZone); connect(simpleZone1_4.port_b, zoneHallway.port_b_toZone); connect(zoneHallway.port_a_toOutside, outsideEnvironment.port_a); connect(zoneHallway.port_b_toOutside, outsideEnvironment.port_b); connect(simpleZone1_2.port_b, zoneHallway2.port_b_toZone); connect(simpleZone1_2.port_a, zoneHallway2.port_a_toZone); connect(weaDat.weaBus, outsideEnvironment7.weaBus1); connect(weaDat.weaBus, outsideEnvironment6.weaBus1); connect(weaDat.weaBus, outsideEnvironment5.weaBus1); connect(weaDat.weaBus, outsideEnvironment4.weaBus1); connect(weaDat.weaBus, outsideEnvironment3.weaBus1); connect(weaDat.weaBus, outsideEnvironment2.weaBus1); connect(weaDat.weaBus, outsideEnvironment1.weaBus1); connect(weaDat.weaBus, outsideEnvironment.weaBus1); connect(weaDat.weaBus, simpleZone1_1.weaBus); connect(weaDat.weaBus, simpleZone1_2.weaBus); connect(weaDat.weaBus, simpleZone1_3.weaBus); connect(weaDat.weaBus, simpleZone1_4.weaBus); connect(weaDat.weaBus, staircase1.weaBus); connect(weaDat.weaBus, zoneHallway3.weaBus); connect(weaDat.weaBus, zoneHallway2.weaBus); connect(weaDat.weaBus, zoneHallway1.weaBus); connect(weaDat.weaBus, zoneHallway.weaBus); connect(weaDat.weaBus, simpleZone2_1.weaBus); connect(weaDat.weaBus, simpleZone2_2.weaBus); connect(weaDat.weaBus, simpleZone2_3.weaBus); connect(weaDat.weaBus, simpleZone2_4.weaBus); connect(weaDat.weaBus, staircase2.weaBus); connect(weaDat.weaBus, zoneHallway7.weaBus); connect(weaDat.weaBus, zoneHallway6.weaBus); connect(weaDat.weaBus, zoneHallway5.weaBus); connect(weaDat.weaBus, zoneHallway4.weaBus); end TwoFloors;

Annex60.Experimental.Benchmarks.AirFlow.Examples.ZoneStepResponse Annex60.Experimental.Benchmarks.AirFlow.Examples.ZoneStepResponse

Example to test the thermal step response of a SimpleZone

Annex60.Experimental.Benchmarks.AirFlow.Examples.ZoneStepResponse

Information

This example tests the step response of the SimpleZone model for the airflow benchmark. It uses the weather file STEP_TMY.mos, that implements a 5 Kelvin step at t=400 000 seconds. In the Buildings library, the room model of BESTEST 600 FF needs around 4-5 hours in order to reach 2/3 of the maximum step response to this weather file. This time constant is approximated with a value of mSenFac = 75 for the mixing volume of the zone.

The mass flow rate of air to the zone is 0.05 kg/s, which approximates an air exchange rate of 3 times the air volume per hour.

Extends from Modelica.Icons.Example (Icon for runnable examples).

Parameters

TypeNameDefaultDescription
replaceable package MediumAnnex60.Media.AirMedium in the component

Connectors

TypeNameDescription
replaceable package MediumMedium in the component
BusweaBusWeather bus for temperature input

Modelica definition

model ZoneStepResponse "Example to test the thermal step response of a SimpleZone" extends Modelica.Icons.Example; replaceable package Medium = Annex60.Media.Air "Medium in the component"; output Modelica.SIunits.Temperature TRoom = simpleZone.volRoom.heatPort.T "Room temperature at volume's therm port"; Components.SimpleZone simpleZone(redeclare package Medium = Medium) "Simple zone element for step response test"; Fluid.Sources.MassFlowSource_T boundary(nPorts=1, m_flow=0.05, redeclare package Medium = Medium, use_T_in=true) "Mass flow source for air exchange in the zone"; Fluid.Sources.FixedBoundary bou(nPorts=2, redeclare package Medium = Medium) "Boundary condition for air exchange in the zone"; BoundaryConditions.WeatherData.ReaderTMY3 weaDat( TDryBulSou=Annex60.BoundaryConditions.Types.DataSource.Input, filNam= "modelica://Annex60/Resources/weatherdata/USA_CA_San.Francisco.Intl.AP.724940_TMY3.mos") "Weather data reader for input data"; BoundaryConditions.WeatherData.Bus weaBus "Weather bus for temperature input"; Modelica.Blocks.Sources.Step step( height=5, startTime=4000000, offset=5 + 273.15); equation connect(boundary.ports[1], simpleZone.port_a_vent); connect(simpleZone.port_b, bou.ports[1]); connect(simpleZone.port_a, bou.ports[2]); connect(weaDat.weaBus, simpleZone.weaBus); connect(boundary.T_in, weaBus.TDryBul); connect(weaDat.weaBus, weaBus); connect(step.y, weaDat.TDryBul_in); end ZoneStepResponse;

http://iea-annex60.org