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.
model NumberOfBeams
extends Modelica.Icons.Example;
package MediumA =
Buildings.Media.Air ;
package MediumW =
Buildings.Media.Water ;
parameter Integer nBeams(min=1) = 10 ;
Buildings.Fluid.Sources.FixedBoundary sin_1(
redeclare package Medium = MediumW,
nPorts=2) ;
Buildings.Fluid.Sources.MassFlowSource_T souAir(
redeclare package Medium = MediumA,
use_m_flow_in=false,
nPorts=1,
m_flow=0.0792,
T=285.85) ;
Buildings.Fluid.Sources.FixedBoundary sin_3(
redeclare package Medium = MediumA,
nPorts=2);
Buildings.Fluid.Sources.FixedBoundary sou_1(
redeclare package Medium = MediumW,
nPorts=2,
T=288.15) ;
Buildings.Fluid.Movers.FlowControlled_m_flow pumHotWat(
redeclare package Medium = MediumW,
m_flow_nominal=0.094,
addPowerToMedium=false,
energyDynamics=Modelica.Fluid.Types.Dynamics.SteadyState,
use_inputFilter=false,
nominalValuesDefineDefaultPressureCurve=true) ;
Buildings.Fluid.Sources.FixedBoundary sou_2(
redeclare package Medium = MediumW,
nPorts=2,
T=320.95) ;
Buildings.Fluid.Sources.FixedBoundary sin_2(
redeclare package Medium = MediumW,
nPorts=2) ;
Buildings.Fluid.Movers.FlowControlled_m_flow pumChiWat(
redeclare package Medium = MediumW,
m_flow_nominal=0.094,
addPowerToMedium=false,
energyDynamics=Modelica.Fluid.Types.Dynamics.SteadyState,
use_inputFilter=false,
nominalValuesDefineDefaultPressureCurve=true) ;
Buildings.Fluid.HeatExchangers.ActiveBeams.CoolingAndHeating beaCooHea(
redeclare package MediumWat = MediumW,
redeclare package MediumAir = MediumA,
redeclare Buildings.Fluid.HeatExchangers.ActiveBeams.Data.Trox.DID632A_nozzleH_length6ft_cooling
perCoo,
redeclare Buildings.Fluid.HeatExchangers.ActiveBeams.Data.Trox.DID632A_nozzleH_length6ft_heating
perHea,
nBeams=1,
energyDynamics=Modelica.Fluid.Types.Dynamics.SteadyState) ;
Buildings.HeatTransfer.Sources.PrescribedTemperature prescribedTemperature ;
Buildings.Fluid.Sources.MassFlowSource_T souAir10(
redeclare package Medium = MediumA,
use_m_flow_in=false,
nPorts=1,
m_flow=0.0792*nBeams,
T=285.85) ;
Buildings.Fluid.Movers.FlowControlled_m_flow pumHotWat10(
redeclare package Medium = MediumW,
addPowerToMedium=false,
m_flow_nominal=0.094*nBeams,
energyDynamics=Modelica.Fluid.Types.Dynamics.SteadyState,
use_inputFilter=false,
nominalValuesDefineDefaultPressureCurve=true) ;
Buildings.Fluid.Movers.FlowControlled_m_flow pumChiWat10(
redeclare package Medium = MediumW,
addPowerToMedium=false,
m_flow_nominal=0.094*nBeams,
energyDynamics=Modelica.Fluid.Types.Dynamics.SteadyState,
use_inputFilter=false,
nominalValuesDefineDefaultPressureCurve=true) ;
Buildings.Fluid.HeatExchangers.ActiveBeams.CoolingAndHeating beaCooHea10(
redeclare package MediumWat = MediumW,
redeclare package MediumAir = MediumA,
redeclare Buildings.Fluid.HeatExchangers.ActiveBeams.Data.Trox.DID632A_nozzleH_length6ft_cooling
perCoo,
redeclare Buildings.Fluid.HeatExchangers.ActiveBeams.Data.Trox.DID632A_nozzleH_length6ft_heating
perHea,
nBeams=nBeams,
energyDynamics=Modelica.Fluid.Types.Dynamics.SteadyState) ;
Modelica.Blocks.Sources.Step step(
height=-0.094,
offset=0.094,
startTime=2000) ;
Modelica.Blocks.Sources.Step step1(height=0.094, startTime=3000) ;
Modelica.Blocks.Sources.Step step2(height=0.094*nBeams, startTime=3000) ;
Modelica.Blocks.Sources.Step step3(
height=-0.094*nBeams,
offset=0.094*nBeams,
startTime=2000) ;
Modelica.Blocks.Sources.Step step4(
offset=273.15 + 25,
height=-5,
startTime=2500) ;
equation
connect(sou_2.ports[1], pumHotWat.port_a);
connect(pumChiWat.port_a, sou_1.ports[1]);
connect(pumChiWat.port_b, beaCooHea.watCoo_a);
connect(beaCooHea.watCoo_b, sin_1.ports[1]);
connect(sin_2.ports[1], beaCooHea.watHea_b);
connect(beaCooHea.watHea_a, pumHotWat.port_b);
connect(souAir.ports[1], beaCooHea.air_a);
connect(sin_3.ports[1], beaCooHea.air_b);
connect(pumChiWat10.port_b, beaCooHea10.watCoo_a);
connect(beaCooHea10.watHea_a, pumHotWat10.port_b);
connect(souAir10.ports[1], beaCooHea10.air_a);
connect(pumChiWat10.port_a, sou_1.ports[2]);
connect(pumHotWat10.port_a, sou_2.ports[2]);
connect(beaCooHea10.air_b, sin_3.ports[2]);
connect(beaCooHea10.watCoo_b, sin_1.ports[2]);
connect(beaCooHea10.watHea_b, sin_2.ports[2]);
connect(step.y, pumChiWat.m_flow_in);
connect(step1.y, pumHotWat.m_flow_in);
connect(step3.y, pumChiWat10.m_flow_in);
connect(step2.y, pumHotWat10.m_flow_in);
connect(step4.y, prescribedTemperature.T);
connect(prescribedTemperature.port, beaCooHea10.heaPor);
connect(beaCooHea.heaPor, prescribedTemperature.port);
end NumberOfBeams;
This model validates whether the transient response is indeed
independent of the number of beams.
The model is similar to
Buildings.Fluid.HeatExchangers.ActiveBeams.Validation.NumberOfBeams,
except that it is configured with a dynamic balance and non-default initial conditions.