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.
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.
This model has been used for a comparative model validation between CONTAM and
the Buildings
library.
See Wetter (2006) for details of the validation.
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);
Buildings.Airflow.Multizone.Orifice oriOutBot(
redeclare package Medium = Medium,
A=0.01,
m=0.5);
Buildings.Airflow.Multizone.MediumColumn colOutTop(
redeclare package Medium = Medium,
h=1.5,
densitySelection=Buildings.Airflow.Multizone.Types.densitySelection.fromBottom);
Buildings.Airflow.Multizone.Orifice oriOutTop(
redeclare package Medium = Medium,
A=0.01,
m=0.5);
Buildings.Airflow.Multizone.MediumColumn colEasInTop(
redeclare package Medium = Medium,
h=1.5,
densitySelection=Buildings.Airflow.Multizone.Types.densitySelection.fromBottom);
Fluid.Sources.FixedBoundary volOut(
redeclare package Medium = Medium,
nPorts=2,
p(displayUnit="Pa") = 101325,
T=283.15);
Buildings.Airflow.Multizone.MediumColumn colEasInBot(
redeclare package Medium = Medium,
h=1.5,
densitySelection=Buildings.Airflow.Multizone.Types.densitySelection.fromTop);
Buildings.Airflow.Multizone.MediumColumn colOutBot(
redeclare package Medium = Medium,
h=1.5,
densitySelection=Buildings.Airflow.Multizone.Types.densitySelection.fromTop);
Buildings.Airflow.Multizone.MediumColumn colWesBot(
redeclare package Medium = Medium,
h=1.5,
densitySelection=Buildings.Airflow.Multizone.Types.densitySelection.fromBottom);
Buildings.Airflow.Multizone.Orifice oriWesTop(
redeclare package Medium = Medium,
m=0.5,
A=0.01);
Buildings.Airflow.Multizone.MediumColumn colWesTop(
redeclare package Medium = Medium,
h=1.5,
densitySelection=Buildings.Airflow.Multizone.Types.densitySelection.fromTop);
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)
"Discretized door";
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);
Modelica.Blocks.Sources.Constant open(k=1);
Buildings.Airflow.Multizone.MediumColumn col1EasBot(
redeclare package Medium = Medium,
h=1.5,
densitySelection=Buildings.Airflow.Multizone.Types.densitySelection.fromBottom);
Buildings.Airflow.Multizone.Orifice oriEasTop(
redeclare package Medium = Medium,
m=0.5,
A=0.01);
Buildings.Airflow.Multizone.MediumColumn colEasTop(
redeclare package Medium = Medium,
h=1.5,
densitySelection=Buildings.Airflow.Multizone.Types.densitySelection.fromTop);
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);
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(open.y, dooOpeClo.y);
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;