Buildings.Airflow.Multizone.Validation

Collection of validation models

Information

This package contains validation models for the classes in Buildings.Airflow.Multizone.

Note that most validation models contain simple input data which may not be realistic, but for which the correct output can be obtained through an analytic solution. The examples plot various outputs, which have been verified against these solutions. These model outputs are stored as reference data and used for continuous validation whenever models in the library change.

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

Package Content

Name Description
Buildings.Airflow.Multizone.Validation.DoorOpenClosed DoorOpenClosed Model with operable door and door that is always open
Buildings.Airflow.Multizone.Validation.OneWayFlow OneWayFlow Validation model to verify one way flow implementation
Buildings.Airflow.Multizone.Validation.OpenDoorBuoyancyDynamic OpenDoorBuoyancyDynamic Model with open door and buoyancy driven flow only
Buildings.Airflow.Multizone.Validation.OpenDoorBuoyancyPressureDynamic OpenDoorBuoyancyPressureDynamic Model with open door and buoyancy and pressure driven flow
Buildings.Airflow.Multizone.Validation.OpenDoorPressure OpenDoorPressure Model with one open door and only pressure-driven flow
Buildings.Airflow.Multizone.Validation.OpenDoorTemperature OpenDoorTemperature Model with one open door and only temperature-driven flow
Buildings.Airflow.Multizone.Validation.ThreeRoomsContam ThreeRoomsContam Model with three rooms for the validation of the multizone air exchange models
Buildings.Airflow.Multizone.Validation.ThreeRoomsContamDiscretizedDoor ThreeRoomsContamDiscretizedDoor Model with three rooms for the validation of the multizone air exchange models

Buildings.Airflow.Multizone.Validation.DoorOpenClosed Buildings.Airflow.Multizone.Validation.DoorOpenClosed

Model with operable door and door that is always open

Buildings.Airflow.Multizone.Validation.DoorOpenClosed

Information

This model validates the door model that takes as an input a signal that determines whether the door is open or closed. In this validation, the instance dooOpeClo is either open or closed, depending on its input signal y. If the door is open, its air flow rate is identical to the air flow rate of the instance doo. If the door is closed, its air flow rate is identical to the air flow rate of the instance lea.

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

Modelica definition

model DoorOpenClosed "Model with operable door and door that is always open" extends Modelica.Icons.Example; package Medium = Buildings.Media.Air "Medium model"; Fluid.Sources.Boundary_pT bouA( redeclare package Medium = Medium, p(displayUnit="Pa") = 101330, T=294.15, nPorts=5) "Boundary condition at side a"; Fluid.Sources.Boundary_pT bouB( redeclare package Medium = Medium, p(displayUnit="Pa") = 101325, T=293.15, nPorts=5) "Boundary condition at side b"; Buildings.Airflow.Multizone.DoorOpen doo( redeclare package Medium = Medium) "Open door that is always open"; EffectiveAirLeakageArea lea( redeclare package Medium = Medium, m=0.65, dp_turbulent=0.01, L=20*1E-4) "Leakage flow element"; DoorOperable dooOpeClo( redeclare package Medium = Medium, LClo=20*1E-4) "Operable door"; Modelica.Blocks.Sources.Step yDoo(startTime=0.5) "Door opening signal"; Fluid.Sensors.MassFlowRate senMasFlo1(redeclare package Medium = Medium) "Mass flow rate sensor"; Fluid.Sensors.MassFlowRate senMasFlo2( redeclare package Medium = Medium) "Mass flow rate sensor"; Modelica.Blocks.Math.Add mNet_flow(y(final unit="kg/s")) "Net air flow rate from A to B through the operable door"; Modelica.Blocks.Sources.Step yDooCom( height=-1, offset=1, startTime=0.5) "Outputs 1 if door is closed"; Modelica.Blocks.Math.Product mNetClo_flow(y(final unit="kg/s")) "Mass flow rate if door is closed"; equation connect(bouA.ports[1], doo.port_a1); connect(bouA.ports[2], doo.port_b2); connect(bouA.ports[3], lea.port_a); connect(bouA.ports[4], dooOpeClo.port_a1); connect(bouA.ports[5], dooOpeClo.port_b2); connect(doo.port_b1, bouB.ports[1]); connect(doo.port_a2, bouB.ports[2]); connect(lea.port_b, bouB.ports[3]); connect(yDoo.y, dooOpeClo.y); connect(dooOpeClo.port_b1, senMasFlo1.port_a); connect(senMasFlo1.port_b, bouB.ports[4]); connect(dooOpeClo.port_a2,senMasFlo2. port_a); connect(senMasFlo2.port_b, bouB.ports[5]); connect(senMasFlo1.m_flow, mNet_flow.u1); connect(senMasFlo2.m_flow, mNet_flow.u2); connect(yDooCom.y, mNetClo_flow.u2); connect(mNet_flow.y, mNetClo_flow.u1); end DoorOpenClosed;

Buildings.Airflow.Multizone.Validation.OneWayFlow Buildings.Airflow.Multizone.Validation.OneWayFlow

Validation model to verify one way flow implementation

Buildings.Airflow.Multizone.Validation.OneWayFlow

Information

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

Modelica definition

model OneWayFlow "Validation model to verify one way flow implementation" extends Modelica.Icons.Example; package Medium = Buildings.Media.Specialized.Air.PerfectGas; Modelica.Units.SI.PressureDifference dP = ela.dp "Pressure difference over the tested elements"; Modelica.Units.SI.MassFlowRate[nTested] m_flow_data= {sen_ela.m_flow, sen_ori.m_flow, sen_pow_1dat.m_flow, sen_pow_2dat.m_flow, sen_pow_m_flow.m_flow, sen_pow_V_flow.m_flow, sen_tabDat_m_flow.m_flow, sen_tabDat_V_flow.m_flow} "Simulated mass flow of each flow element"; Modelica.Units.SI.MassFlowRate[nTested] m_flow_testdata=contamData.y "Mass flow of each flow element of CONTAM simulation"; protected parameter Integer nTested=8 "Number of tested flow elements"; //Test Data //Headers: ["dP","ELA_FlowRate","ORI_FlowRate","1DatPoint_FlowRate","2DatPoint_FlowRate","pow_m_flow_FlowRate","pow_V_flow_FlowRate","tabDat_m_flow","tabDat_V_flow_FlowRate"] parameter Real TestData[:,nTested+1]=[ -50,-0.0838,-0.0658,-0.0672,-0.0609,-0.0707,-0.0851,-0.0871,-0.105; -40,-0.0725,-0.0589,-0.0601,-0.055,-0.0632,-0.0762,-0.0769,-0.0926; -25,-0.0534,-0.0466,-0.0475,-0.0443,-0.05,-0.0602,-0.0616,-0.0741; -10,-0.0294,-0.0294,-0.03,-0.029,-0.0316,-0.0381,-0.039,-0.0469; -5,-0.0188,-0.0208,-0.0212,-0.0211,-0.0224,-0.0269,-0.0275,-0.0332; -1,-0.00659,-0.00931,-0.0095,-0.01,-0.01,-0.012,-0.0123,-0.0148; 0,0,0,0,0,0,0,0,0; 1,0.00659,0.00931,0.0095,0.01,0.01,0.012,0.0123,0.0148; 5,0.0188,0.0208,0.0212,0.0211,0.0224,0.0269,0.0261,0.0315; 10,0.0294,0.0294,0.03,0.029,0.0316,0.0381,0.0261,0.0315; 25,0.0534,0.0466,0.0475,0.0443,0.05,0.0602,0.0261,0.0315; 40,0.0725,0.0589,0.0601,0.055,0.0632,0.0762,0.0261,0.0315; 50,0.0838,0.0658,0.0672,0.0609,0.0707,0.0851,0.0261,0.0315] "Steady state CONTAM results with specific pressure difference for similar flow models"; //Boundary conditions Fluid.Sources.Boundary_pT bouA( redeclare package Medium = Medium, use_p_in=true, T=293.15, nPorts=8) "Pressure boundary"; Fluid.Sources.Boundary_pT bouB( redeclare package Medium = Medium, use_p_in=true, T=293.15, nPorts=8) "Pressure boundary"; Modelica.Blocks.Sources.Ramp ramp_min50_50pa( duration=500, height=100, offset=-50) "Block that generates a ramp signal from -50 to +50"; Modelica.Blocks.Sources.Constant PAmb(k=101325) "Assumed ambient pressure"; Modelica.Blocks.Math.Sum sum(nin=2) "Sum"; //Flow models EffectiveAirLeakageArea ela( redeclare package Medium = Medium, dpRat=10, CDRat=0.6, L=0.01) "EffectiveAirLeakageArea"; Orifice ori( redeclare package Medium = Medium, A=0.01, CD=0.6) "Orifice"; Point_m_flow pow_1dat( dpMea_nominal(displayUnit="Pa") = 4, redeclare package Medium = Medium, mMea_flow_nominal=0.019) "Powerlaw_1Datapoint"; Points_m_flow pow_2dat( redeclare package Medium = Medium, mMea_flow_nominal={0.019, 0.029}, dpMea_nominal = {4, 10}) "Powerlaw_2Datapoints"; Coefficient_m_flow pow_m_flow( redeclare package Medium = Medium, m=0.5, k=0.01) "Powerlaw_m_flow"; Coefficient_V_flow pow_V_flow( redeclare package Medium = Medium, m=0.5, C=0.01) "Powerlaw_V_flow"; Table_m_flow tabDat_m_flow( redeclare package Medium = Medium, mMea_flow_nominal = {-0.08709, -0.06158, -0.03895, -0.02754, -0.02133, -0.01742, -0.01232, 0, 0.01232, 0.01742, 0.02133, 0.02613, 0.02614}, dpMea_nominal = {-50, -25, -10, -5, -3, -2, -1, 0, 1, 2, 3, 4.5, 50}) "TableData_m_flow"; Table_V_flow tabDat_V_flow( redeclare package Medium = Medium, VMea_flow_nominal = {-0.08709, -0.06158, -0.03895, -0.02754, -0.02133, -0.01742, -0.01232, 0, 0.01232, 0.01742, 0.02133, 0.02613, 0.02614}, dpMea_nominal = {-50, -25, -10, -5, -3, -2, -1, 0, 1, 2, 3, 4.5, 50}) "TableData_V_flow"; //Mass flow sensors Fluid.Sensors.MassFlowRate sen_ela(redeclare package Medium = Medium) "Mass flow rate sensor"; Fluid.Sensors.MassFlowRate sen_ori(redeclare package Medium = Medium) "Mass flow rate sensor"; Fluid.Sensors.MassFlowRate sen_pow_1dat(redeclare package Medium = Medium) "Mass flow rate sensor"; Fluid.Sensors.MassFlowRate sen_pow_2dat(redeclare package Medium = Medium) "Mass flow rate sensor"; Fluid.Sensors.MassFlowRate sen_pow_m_flow(redeclare package Medium = Medium) "Mass flow rate sensor"; Fluid.Sensors.MassFlowRate sen_pow_V_flow(redeclare package Medium = Medium) "Mass flow rate sensor"; Fluid.Sensors.MassFlowRate sen_tabDat_m_flow(redeclare package Medium = Medium) "Mass flow rate sensor"; Fluid.Sensors.MassFlowRate sen_tabDat_V_flow(redeclare package Medium = Medium) "Mass flow rate sensor"; //Checking the data Modelica.Blocks.Tables.CombiTable1Dv contamData( table=TestData, columns=2:9, smoothness=Modelica.Blocks.Types.Smoothness.MonotoneContinuousDerivative2) "Table with CONTAM simulation results for comparison"; Modelica.Blocks.Routing.Replicator replicator(nout=nTested) "Signal replicator"; equation connect(ramp_min50_50pa.y, sum.u[1]); connect(PAmb.y, sum.u[2]); connect(sum.y, bouA.p_in); connect(PAmb.y, bouB.p_in); connect(ramp_min50_50pa.y, replicator.u); connect(replicator.y, contamData.u); connect(bouA.ports[1],ela. port_a); connect(bouA.ports[2], ori.port_a); connect(bouA.ports[3], pow_1dat.port_a); connect(bouA.ports[4], pow_2dat.port_a); connect(bouA.ports[5], pow_m_flow.port_a); connect(bouA.ports[6], pow_V_flow.port_a); connect(bouA.ports[7],tabDat_m_flow. port_a); connect(bouA.ports[8],tabDat_V_flow. port_a); connect(ela.port_b,sen_ela. port_a); connect(sen_ela.port_b, bouB.ports[1]); connect(ori.port_b,sen_ori. port_a); connect(sen_ori.port_b, bouB.ports[2]); connect(pow_1dat.port_b,sen_pow_1dat. port_a); connect(sen_pow_1dat.port_b, bouB.ports[3]); connect(pow_2dat.port_b,sen_pow_2dat. port_a); connect(sen_pow_2dat.port_b, bouB.ports[4]); connect(pow_m_flow.port_b,sen_pow_m_flow. port_a); connect(sen_pow_m_flow.port_b, bouB.ports[5]); connect(pow_V_flow.port_b,sen_pow_V_flow. port_a); connect(sen_pow_V_flow.port_b, bouB.ports[6]); connect(tabDat_m_flow.port_b,sen_tabDat_m_flow. port_a); connect(sen_tabDat_m_flow.port_b, bouB.ports[7]); connect(tabDat_V_flow.port_b,sen_tabDat_V_flow. port_a); connect(sen_tabDat_V_flow.port_b, bouB.ports[8]); end OneWayFlow;

Buildings.Airflow.Multizone.Validation.OpenDoorBuoyancyDynamic Buildings.Airflow.Multizone.Validation.OpenDoorBuoyancyDynamic

Model with open door and buoyancy driven flow only

Buildings.Airflow.Multizone.Validation.OpenDoorBuoyancyDynamic

Information

This model validates the door model for the situation where there is only buoyancy-driven air flow. Initially the volume is at a different temperature than the pressure source, leading to an airflow that eventually decays to zero.

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

Modelica definition

model OpenDoorBuoyancyDynamic "Model with open door and buoyancy driven flow only" extends Modelica.Icons.Example; package Medium = Buildings.Media.Air "Medium model"; Buildings.Airflow.Multizone.DoorOpen doo( redeclare package Medium = Medium) "Door"; Buildings.Fluid.Sources.Boundary_pT bou( redeclare package Medium = Medium, nPorts=1) "Pressure boundary"; Fluid.MixingVolumes.MixingVolume bouA( redeclare package Medium = Medium, T_start=292.15, V=2.5*5*5, energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, m_flow_nominal=0.01, nPorts=3) "Boundary condition at side a"; Buildings.Fluid.MixingVolumes.MixingVolume bouB( redeclare package Medium = Medium, T_start=294.15, V=2.5*5*5, energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, m_flow_nominal=0.01, nPorts=2) "Boundary condition at side b"; DoorDiscretizedOpen dooDis( forceErrorControlOnFlow=false, redeclare package Medium = Medium, vZer=0.000001) "Door"; Fluid.Sources.Boundary_pT bou1( redeclare package Medium = Medium, nPorts=1) "Pressure boundary"; Fluid.MixingVolumes.MixingVolume bouADis( redeclare package Medium = Medium, T_start=292.15, V=2.5*5*5, energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, m_flow_nominal=0.01, nPorts=3) "Boundary condition at side a"; Fluid.MixingVolumes.MixingVolume bouBDis( redeclare package Medium = Medium, T_start=294.15, V=2.5*5*5, energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, m_flow_nominal=0.01, nPorts=2) "Boundary condition at side b"; equation connect(doo.port_b1, bouB.ports[1]); connect(doo.port_a2, bouB.ports[2]); connect(doo.port_a1, bouA.ports[1]); connect(doo.port_b2, bouA.ports[2]); connect(bou.ports[1], bouA.ports[3]); connect(bou1.ports[1], bouADis.ports[1]); connect(dooDis.port_a1, bouADis.ports[2]); connect(dooDis.port_b2, bouADis.ports[3]); connect(dooDis.port_b1, bouBDis.ports[1]); connect(dooDis.port_a2, bouBDis.ports[2]); end OpenDoorBuoyancyDynamic;

Buildings.Airflow.Multizone.Validation.OpenDoorBuoyancyPressureDynamic Buildings.Airflow.Multizone.Validation.OpenDoorBuoyancyPressureDynamic

Model with open door and buoyancy and pressure driven flow

Buildings.Airflow.Multizone.Validation.OpenDoorBuoyancyPressureDynamic

Information

This model validates the door model for the situation where there is air flow due to buoyancy and static pressure difference. Initially the volumes are at a different temperatures and pressure, leading to an airflow that eventually decays to zero.

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

Modelica definition

model OpenDoorBuoyancyPressureDynamic "Model with open door and buoyancy and pressure driven flow" extends Modelica.Icons.Example; package Medium = Buildings.Media.Air "Medium model"; Buildings.Airflow.Multizone.DoorOpen doo(redeclare package Medium = Medium) "Door"; Buildings.Fluid.Sources.Boundary_pT bou( redeclare package Medium = Medium, nPorts=1) "Pressure boundary"; Fluid.MixingVolumes.MixingVolume bouA( redeclare package Medium = Medium, T_start=292.15, V=2.5*5*5, energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, m_flow_nominal=0.01, nPorts=3) "Boundary condition at side a"; Buildings.Fluid.MixingVolumes.MixingVolume bouB( redeclare package Medium = Medium, T_start=294.15, p_start=101320, V=2.5*5*5, energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, m_flow_nominal=0.01, nPorts=2) "Boundary condition at side b"; DoorDiscretizedOpen dooDis(redeclare package Medium = Medium) "Door"; Fluid.Sources.Boundary_pT bouDis(redeclare package Medium = Medium, nPorts=1) "Pressure boundary"; Fluid.MixingVolumes.MixingVolume bouADis( redeclare package Medium = Medium, T_start=292.15, V=2.5*5*5, energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, m_flow_nominal=0.01, nPorts=3) "Boundary condition at side a"; Fluid.MixingVolumes.MixingVolume bouBDis( redeclare package Medium = Medium, T_start=294.15, p_start=101320, V=2.5*5*5, energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, m_flow_nominal=0.01, nPorts=2) "Boundary condition at side b"; equation connect(doo.port_b1, bouB.ports[1]); connect(doo.port_a2, bouB.ports[2]); connect(doo.port_a1, bouA.ports[1]); connect(doo.port_b2, bouA.ports[2]); connect(bou.ports[1], bouA.ports[3]); connect(dooDis.port_b1, bouBDis.ports[1]); connect(dooDis.port_a2, bouBDis.ports[2]); connect(dooDis.port_a1, bouADis.ports[1]); connect(dooDis.port_b2, bouADis.ports[2]); connect(bouDis.ports[1], bouADis.ports[3]); end OpenDoorBuoyancyPressureDynamic;

Buildings.Airflow.Multizone.Validation.OpenDoorPressure Buildings.Airflow.Multizone.Validation.OpenDoorPressure

Model with one open door and only pressure-driven flow

Buildings.Airflow.Multizone.Validation.OpenDoorPressure

Information

This model validates the door model for the situation where there is only pressure-driven air flow.

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

Modelica definition

model OpenDoorPressure "Model with one open door and only pressure-driven flow" extends Modelica.Icons.Example; package Medium = Buildings.Media.Air "Medium model"; Buildings.Airflow.Multizone.DoorOpen doo( redeclare package Medium = Medium) "Door"; Fluid.Sources.Boundary_pT bouA( redeclare package Medium = Medium, p(displayUnit="Pa") = 101325, nPorts=4) "Boundary condition at side a"; Fluid.Sources.Boundary_pT bouB( redeclare package Medium = Medium, use_p_in=true, p(displayUnit="Pa"), nPorts=4) "Boundary condition at side b"; DoorDiscretizedOpen dooDis( redeclare package Medium = Medium, hA=2.1/2, hB=2.1/2) "Door"; Modelica.Blocks.Sources.TimeTable bouPre( table=[ 0.0,0; 1,0; 1,5; 2,5; 2,10; 3,10; 3,15; 4,15; 4,20; 5,20; 5,25; 6,25; 6,30; 7,30; 7,35; 8,35; 8,40; 24,40], timeScale=3600, offset=101325-20) "Pressure boundary condition"; equation connect(doo.port_b1, bouB.ports[1]); connect(doo.port_a2, bouB.ports[2]); connect(doo.port_a1, bouA.ports[1]); connect(doo.port_b2, bouA.ports[2]); connect(bouA.ports[3], dooDis.port_a1); connect(bouA.ports[4], dooDis.port_b2); connect(dooDis.port_b1, bouB.ports[3]); connect(dooDis.port_a2, bouB.ports[4]); connect(bouPre.y, bouB.p_in); end OpenDoorPressure;

Buildings.Airflow.Multizone.Validation.OpenDoorTemperature Buildings.Airflow.Multizone.Validation.OpenDoorTemperature

Model with one open door and only temperature-driven flow

Buildings.Airflow.Multizone.Validation.OpenDoorTemperature

Information

This model validates the door model for the situation where there is only temperature-driven air flow.

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

Modelica definition

model OpenDoorTemperature "Model with one open door and only temperature-driven flow" extends Modelica.Icons.Example; package Medium = Buildings.Media.Air "Medium model"; Buildings.Airflow.Multizone.DoorOpen doo( redeclare package Medium = Medium) "Door"; Fluid.Sources.Boundary_pT bouA( redeclare package Medium = Medium, nPorts=4) "Boundary condition at side a"; Fluid.Sources.Boundary_pT bouB( redeclare package Medium = Medium, use_T_in=true, nPorts=4) "Boundary condition at side b"; DoorDiscretizedOpen dooDis( redeclare package Medium = Medium, hA=2.1/2, hB=2.1/2) "Door"; Modelica.Blocks.Sources.TimeTable bouTem( table=[ 0.0,0; 1,0; 1,5; 2,5; 2,10; 3,10; 3,15; 4,15; 4,20; 5,20; 5,25; 6,25; 6,30; 7,30; 7,35; 8,35; 8,40; 24,40], timeScale=3600, offset=273.15) "Temperature boundary condition"; equation connect(doo.port_b1, bouB.ports[1]); connect(doo.port_a2, bouB.ports[2]); connect(doo.port_a1, bouA.ports[1]); connect(doo.port_b2, bouA.ports[2]); connect(bouA.ports[3], dooDis.port_a1); connect(bouA.ports[4], dooDis.port_b2); connect(dooDis.port_b1, bouB.ports[3]); connect(dooDis.port_a2, bouB.ports[4]); connect(bouTem.y, bouB.T_in); end OpenDoorTemperature;

Buildings.Airflow.Multizone.Validation.ThreeRoomsContam Buildings.Airflow.Multizone.Validation.ThreeRoomsContam

Model with three rooms for the validation of the multizone air exchange models

Buildings.Airflow.Multizone.Validation.ThreeRoomsContam

Information

This is a model of three rooms that exchange air among each based on density difference between the air in the rooms and the outside. The model implements the configuration shown below.

Configuration of the three rooms.

For the model that has been used for a comparative model validation between CONTAM and the Buildings library in Wetter (2006), see Buildings.Airflow.Multizone.Validation.ThreeRoomsContamDiscretizedDoor.

References

Michael Wetter. Multizone Airflow Model in Modelica. Proc. of the 5th International Modelica Conference, p. 431-440. Vienna, Austria, September 2006.

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

Parameters

TypeNameDefaultDescription
DoorOpendooOpeClodooOpeClo(redeclare package ...Door

Modelica definition

model ThreeRoomsContam "Model with three rooms for the validation of the multizone air exchange models" extends Modelica.Icons.Example; package Medium = Buildings.Media.Air(extraPropertiesNames={"CO2"}); Buildings.Fluid.MixingVolumes.MixingVolume volEas( redeclare package Medium = Medium, T_start=273.15 + 20, V=2.5*5*5*1, nPorts=5, m_flow_nominal=0.001, energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial) "Air volume east room"; Buildings.Airflow.Multizone.Orifice oriOutBot( redeclare package Medium = Medium, A=0.01, m=0.5) "Orifice at bottom of facade"; Buildings.Airflow.Multizone.MediumColumn colOutTop( redeclare package Medium = Medium, h=1.5, densitySelection=Buildings.Airflow.Multizone.Types.densitySelection.fromBottom) "Medium column for bottom floor outside air"; Buildings.Airflow.Multizone.Orifice oriOutTop( redeclare package Medium = Medium, A=0.01, m=0.5) "Orifice at top of facade"; Buildings.Airflow.Multizone.MediumColumn colEasInTop( redeclare package Medium = Medium, h=1.5, densitySelection=Buildings.Airflow.Multizone.Types.densitySelection.fromBottom) "Medium column for bottom floor"; Buildings.Fluid.Sources.Boundary_pT volOut( redeclare package Medium = Medium, nPorts=2, p(displayUnit="Pa") = 101325, T=283.15) "Outside air boundary condition"; Buildings.Airflow.Multizone.MediumColumn colEasInBot( redeclare package Medium = Medium, h=1.5, densitySelection=Buildings.Airflow.Multizone.Types.densitySelection.fromTop) "Medium column for bottom floor"; Buildings.Airflow.Multizone.MediumColumn colOutBot( redeclare package Medium = Medium, h=1.5, densitySelection=Buildings.Airflow.Multizone.Types.densitySelection.fromTop) "Medium column for bottom floor outside air"; Buildings.Airflow.Multizone.MediumColumn colWesBot( redeclare package Medium = Medium, h=1.5, densitySelection=Buildings.Airflow.Multizone.Types.densitySelection.fromBottom) "Medium column for bottom floor"; Buildings.Airflow.Multizone.Orifice oriWesTop( redeclare package Medium = Medium, m=0.5, A=0.01) "Orifice between top and bottom west floor"; Buildings.Airflow.Multizone.MediumColumn colWesTop( redeclare package Medium = Medium, h=1.5, densitySelection=Buildings.Airflow.Multizone.Types.densitySelection.fromTop) "Medium column for top floor"; replaceable DoorOpen dooOpeClo( redeclare package Medium = Medium, wOpe=1, hOpe=2.2, dp_turbulent(displayUnit="Pa") = 0.01, CD=0.78, m=0.5) constrainedby Fluid.Interfaces.PartialFourPortInterface "Door"; Buildings.Fluid.MixingVolumes.MixingVolume volWes( redeclare package Medium = Medium, T_start=273.15 + 25, nPorts=3, V=2.5*5*5, m_flow_nominal=0.001, energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial) "Air volume west floor"; Buildings.Airflow.Multizone.MediumColumn col1EasBot( redeclare package Medium = Medium, h=1.5, densitySelection=Buildings.Airflow.Multizone.Types.densitySelection.fromBottom) "Medium column for bottom floor"; Buildings.Airflow.Multizone.Orifice oriEasTop( redeclare package Medium = Medium, m=0.5, A=0.01) "Orifice between top and bottom east floor"; Buildings.Airflow.Multizone.MediumColumn colEasTop( redeclare package Medium = Medium, h=1.5, densitySelection=Buildings.Airflow.Multizone.Types.densitySelection.fromTop) "Medium column for top floor"; Buildings.Fluid.MixingVolumes.MixingVolume volTop( redeclare package Medium = Medium, T_start=273.15 + 20, V=2.5*5*10*1, nPorts=2, m_flow_nominal=0.001, energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial) "Air volume top floor"; Buildings.HeatTransfer.Sources.FixedTemperature TTop(T=293.15) "Fixed temperature"; Buildings.HeatTransfer.Sources.FixedTemperature TWes(T=298.15) "Fixed temperature"; Buildings.HeatTransfer.Sources.FixedTemperature TEas(T=293.15) "Fixed temperature"; Modelica.Thermal.HeatTransfer.Components.ThermalConductor conTop(G=1E9) "Thermal conductor"; Modelica.Thermal.HeatTransfer.Components.ThermalConductor conWes(G=1E9) "Thermal conductor"; Modelica.Thermal.HeatTransfer.Components.ThermalConductor conEas(G=1E9) "Thermal conductor"; equation connect(volWes.ports[1], dooOpeClo.port_b2); connect(volWes.ports[2], dooOpeClo.port_a1); connect(volWes.ports[3], colWesBot.port_b); connect(colWesBot.port_a, oriWesTop.port_b); connect(oriWesTop.port_a, colWesTop.port_b); connect(colWesTop.port_a, volTop.ports[1]); connect(volTop.ports[2], colEasTop.port_a); connect(colEasTop.port_b, oriEasTop.port_b); connect(oriEasTop.port_a, col1EasBot.port_a); connect(dooOpeClo.port_b1, volEas.ports[1]); connect(volEas.ports[2], dooOpeClo.port_a2); connect(colEasInBot.port_a, volEas.ports[3]); connect(volEas.ports[4], colEasInTop.port_b); connect(volEas.ports[5], col1EasBot.port_b); connect(colEasInTop.port_a, oriOutTop.port_a); connect(oriOutTop.port_b, colOutTop.port_a); connect(colOutTop.port_b, volOut.ports[1]); connect(colOutBot.port_a, volOut.ports[2]); connect(colOutBot.port_b, oriOutBot.port_b); connect(oriOutBot.port_a, colEasInBot.port_b); connect(TTop.port, conTop.port_a); connect(conTop.port_b, volTop.heatPort); connect(TWes.port, conWes.port_a); connect(conWes.port_b, volWes.heatPort); connect(TEas.port, conEas.port_a); connect(conEas.port_b, volEas.heatPort); end ThreeRoomsContam;

Buildings.Airflow.Multizone.Validation.ThreeRoomsContamDiscretizedDoor Buildings.Airflow.Multizone.Validation.ThreeRoomsContamDiscretizedDoor

Model with three rooms for the validation of the multizone air exchange models

Buildings.Airflow.Multizone.Validation.ThreeRoomsContamDiscretizedDoor

Information

This model is identical to Buildings.Airflow.Multizone.Validation.ThreeRoomsContam except that it uses a different door model.

This model has been used for a comparative model validation between CONTAM and the Buildings library. See Wetter (2006) for details of the validation.

References

Michael Wetter. Multizone Airflow Model in Modelica. Proc. of the 5th International Modelica Conference, p. 431-440. Vienna, Austria, September 2006.

Extends from Buildings.Airflow.Multizone.Validation.ThreeRoomsContam (Model with three rooms for the validation of the multizone air exchange models).

Modelica definition

model ThreeRoomsContamDiscretizedDoor "Model with three rooms for the validation of the multizone air exchange models" extends Buildings.Airflow.Multizone.Validation.ThreeRoomsContam( redeclare Buildings.Airflow.Multizone.DoorDiscretizedOperable dooOpeClo( redeclare package Medium = Medium, LClo=20*1E-4, wOpe=1, hOpe=2.2, CDOpe=0.78, CDClo=0.78, nCom=10, hA=3/2, hB=3/2, dp_turbulent(displayUnit="Pa") = 0.01)); Modelica.Blocks.Sources.Constant open1(k=1) "Constant signal for door opening"; equation connect(open1.y, dooOpeClo.y); end ThreeRoomsContamDiscretizedDoor;