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
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);
Buildings.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) ;
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);
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) ;
Buildings.HeatTransfer.Sources.FixedTemperature TWes(T=298.15) ;
Buildings.HeatTransfer.Sources.FixedTemperature TEas(T=293.15) ;
Modelica.Thermal.HeatTransfer.Components.ThermalConductor conTop(G=1E9) ;
Modelica.Thermal.HeatTransfer.Components.ThermalConductor conWes(G=1E9) ;
Modelica.Thermal.HeatTransfer.Components.ThermalConductor conEas(G=1E9) ;
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;