Collection of models that illustrate model use and test models
Information
This package contains examples for the use of models that can be found in
Buildings.Fluid.Interfaces.
Extends from Modelica.Icons.ExamplesPackage (Icon for packages containing runnable examples).
Package Content
Name |
Description |
ConservationEquation
|
Model that tests the conservation equation |
ConservationEquationSensibleLatent
|
Model that tests the conservation equation for sensible and latent heat input |
EightPortHeatMassExchanger
|
EightPortHeatMassExchanger example model |
FourPortHeatMassExchanger
|
FourPortHeatMassExchanger example model |
HeaterCooler_u
|
Model that tests a heat exchanger model with reverse flow |
Humidifier_u
|
|
PrescribedOutlet
|
Test model for prescribed outlet state |
PrescribedOutlet_TSetOnly
|
Test model for prescribed outlet state |
PrescribedOutlet_Water
|
Test model for prescribed outlet state |
PrescribedOutlet_X_wSetOnly
|
Test model for prescribed outlet state |
ReverseFlowHumidifier
|
Model that tests the reverse flow for a humidifier |
ReverseFlowMassExchanger
|
Model that tests the reverse flow for a mass exchanger |
StaticTwoPortConservationEquation
|
Model that tests the static two port conservation equation |
BaseClasses
|
Package with base classes for Buildings.Fluid.Interfaces.Examples |
Model that tests the conservation equation
Information
Model that tests the conservation equations that are used
for the heat and mass balance.
Extends from Modelica.Icons.Example (Icon for runnable examples).
Modelica definition
model ConservationEquation
extends Modelica.Icons.Example;
package Medium =
Buildings.Media.Water ;
Buildings.Fluid.Interfaces.ConservationEquation dyn(
redeclare package Medium = Medium,
energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial,
nPorts=2,
fluidVolume=0.01,
use_mWat_flow=true) ;
Buildings.Fluid.Interfaces.StaticTwoPortConservationEquation ste(
redeclare package Medium = Medium,
m_flow_nominal=0.01,
show_T=true,
prescribedHeatFlowRate=true,
use_mWat_flow=true) ;
Modelica.Blocks.Sources.Constant mWat_flow(k=0)
;
Modelica.Blocks.Sources.TimeTable QSen_flow(startTime=0, table=[
0,-100;
900,-100;
900,0;
1800,0;
1800,100])
;
Buildings.Fluid.Sources.Boundary_pT sin(
nPorts=2,
use_p_in=false,
redeclare package Medium = Medium,
p=101325,
T=283.15);
Buildings.Fluid.FixedResistances.PressureDrop res1(
from_dp=true,
redeclare package Medium = Medium,
m_flow_nominal=0.01,
dp_nominal=100) ;
Buildings.Fluid.Sources.MassFlowSource_T bou(
nPorts=2,
redeclare package Medium = Medium,
m_flow=0.01) ;
Buildings.Fluid.FixedResistances.PressureDrop res2(
from_dp=true,
redeclare package Medium = Medium,
m_flow_nominal=0.01,
dp_nominal=100) ;
equation
connect(QSen_flow.y, dyn.Q_flow);
connect(mWat_flow.y, dyn.mWat_flow);
connect(bou.ports[1], dyn.ports[1]);
connect(res1.port_b, sin.ports[1]);
connect(QSen_flow.y, ste.Q_flow);
connect(mWat_flow.y, ste.mWat_flow);
connect(res2.port_b, sin.ports[2]);
connect(ste.port_a, bou.ports[2]);
connect(ste.port_b, res2.port_a);
connect(dyn.ports[2], res1.port_a);
end ConservationEquation;
Model that tests the conservation equation for sensible and latent heat input
Information
Validation model that injects into an air volume first sensible heat and then sensible plus latent heat
The air volume has a constant air mass flow rate. When adding the latent heat, its
temperature remains constant, excpet for some small approximation error because
the control volume has its constant set to simplify_mWat_flow
.
Extends from Modelica.Icons.Example (Icon for runnable examples).
Modelica definition
model ConservationEquationSensibleLatent
extends Modelica.Icons.Example;
package Medium =
Buildings.Media.Air ;
constant Modelica.Units.SI.SpecificEnergy h_fg=
Buildings.Media.Air.enthalpyOfCondensingGas(273.15 + 37)
;
Buildings.Fluid.Interfaces.ConservationEquation dynBal(
simplify_mWat_flow=true,
redeclare package Medium = Medium,
energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial,
fluidVolume=1,
use_mWat_flow=true,
nPorts=2) ;
Buildings.Fluid.Sources.Boundary_pT sin(
use_p_in=false,
redeclare package Medium = Medium,
p=101325,
T=283.15,
nPorts=1);
Buildings.Fluid.Sources.MassFlowSource_T bou(
redeclare package Medium = Medium,
m_flow=0.1,
nPorts=1) ;
Modelica.Blocks.Sources.Step QSen_flow(height=1000,startTime=900)
;
Modelica.Blocks.Sources.Step QLat_flow(height=1000, startTime=1800)
;
Modelica.Blocks.Math.Add QTot_flow ;
protected
Modelica.Blocks.Math.Gain mWat_flow(
final k(unit="kg/J") = 1/h_fg,
u(
final unit="W"),
y(
final unit="kg/s")) ;
equation
connect(mWat_flow.y, dynBal.mWat_flow);
connect(dynBal.Q_flow, QTot_flow.y);
connect(QTot_flow.u1, QSen_flow.y);
connect(QTot_flow.u2, QLat_flow.y);
connect(QLat_flow.y, mWat_flow.u);
connect(bou.ports[1], dynBal.ports[1]);
connect(dynBal.ports[2], sin.ports[1]);
end ConservationEquationSensibleLatent;
EightPortHeatMassExchanger example model
Information
This example model demonstrates the use of the
EightPortHeatMassExchanger model.
Extends from Modelica.Icons.Example (Icon for runnable examples).
Parameters
Type | Name | Default | Description |
MassFlowRate | m_flow_nominal | 1 | Nominal mass flow rate [kg/s] |
Modelica definition
model EightPortHeatMassExchanger
extends Modelica.Icons.Example;
package Medium =
Buildings.Media.Water;
parameter Modelica.Units.SI.MassFlowRate m_flow_nominal=1
;
Sources.Boundary_pT sin(
redeclare package Medium = Medium, nPorts=4)
;
Sources.MassFlowSource_T sou2(
redeclare package Medium = Medium,
use_m_flow_in=true,
use_T_in=true,
nPorts=1) ;
Sources.MassFlowSource_T sou1(
redeclare package Medium = Medium,
m_flow=1,
nPorts=1,
T=283.15) ;
Modelica.Blocks.Sources.Ramp ram_T2(
height=10,
offset=273.15,
duration=5) ;
Modelica.Blocks.Sources.Ramp ram_m2_flow(
height=-2,
offset=1,
duration=5) ;
Buildings.Fluid.Interfaces.EightPortHeatMassExchanger eigPor(
redeclare package Medium1 = Medium,
redeclare package Medium2 = Medium,
redeclare package Medium3 = Medium,
redeclare package Medium4 = Medium,
m1_flow_nominal=m_flow_nominal,
m2_flow_nominal=m_flow_nominal,
m3_flow_nominal=m_flow_nominal,
m4_flow_nominal=m_flow_nominal,
dp1_nominal=0,
dp2_nominal=0,
dp3_nominal=0,
dp4_nominal=0,
tau1=1,
tau2=1,
tau3=1,
tau4=1,
energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial)
;
Sources.MassFlowSource_T sou4(
redeclare package Medium = Medium,
use_m_flow_in=true,
use_T_in=true,
nPorts=1) ;
Modelica.Blocks.Sources.Ramp ram_T4(
duration=5,
height=-10,
offset=283.15) ;
Modelica.Blocks.Sources.Ramp ram_m4_flow(
duration=5,
height=2,
offset=-1) ;
Sources.MassFlowSource_T sou3(
redeclare package Medium = Medium,
m_flow=1,
nPorts=1,
T=303.15) ;
equation
connect(ram_m2_flow.y, sou2.m_flow_in);
connect(ram_T2.y, sou2.T_in);
connect(ram_m4_flow.y, sou4.m_flow_in);
connect(ram_T4.y, sou4.T_in);
connect(sou2.ports[1], eigPor.port_b2);
connect(sou4.ports[1], eigPor.port_b4);
connect(sou3.ports[1], eigPor.port_b3);
connect(sou1.ports[1], eigPor.port_b1);
connect(eigPor.port_a1, sin.ports[1]);
connect(eigPor.port_a3, sin.ports[2]);
connect(eigPor.port_a2, sin.ports[3]);
connect(eigPor.port_a4, sin.ports[4]);
end EightPortHeatMassExchanger;
FourPortHeatMassExchanger example model
Information
This example model demonstrates the used of the
FourPortHeatMassExchanger model.
Extends from Modelica.Icons.Example (Icon for runnable examples).
Parameters
Type | Name | Default | Description |
MassFlowRate | m_flow_nominal | 1 | Nominal mass flow rate [kg/s] |
Modelica definition
model FourPortHeatMassExchanger
extends Modelica.Icons.Example;
package Medium =
Buildings.Media.Water;
parameter Modelica.Units.SI.MassFlowRate m_flow_nominal=1
;
Buildings.Fluid.Interfaces.FourPortHeatMassExchanger fouPor(
redeclare package Medium1 = Medium,
redeclare package Medium2 = Medium,
m1_flow_nominal=m_flow_nominal,
m2_flow_nominal=m_flow_nominal,
dp1_nominal=0,
dp2_nominal=0,
tau1=1,
tau2=1,
energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial)
;
Sources.Boundary_pT sin(nPorts=2,
redeclare package Medium = Medium)
;
Sources.MassFlowSource_T sou1(
nPorts=1,
redeclare package Medium = Medium,
use_m_flow_in=true,
use_T_in=true) ;
Sources.MassFlowSource_T sou2(
nPorts=1,
redeclare package Medium = Medium,
m_flow=1,
T=283.15) ;
Modelica.Blocks.Sources.Ramp ram_T(
height=10,
offset=273.15,
duration=5) ;
Modelica.Blocks.Sources.Ramp ram_m_flow(
height=-2,
offset=1,
duration=5) ;
equation
connect(sin.ports[1], fouPor.port_b2);
connect(fouPor.port_b1, sin.ports[2]);
connect(sou1.ports[1], fouPor.port_a1);
connect(sou2.ports[1], fouPor.port_a2);
connect(ram_m_flow.y, sou1.m_flow_in);
connect(ram_T.y, sou1.T_in);
end FourPortHeatMassExchanger;
Model that tests a heat exchanger model with reverse flow
Information
Model that tests the basic class that is used for the heater models.
It adds and removes heat for forward and reverse flow.
The top and bottom models should give similar results,
although the sign of the temperature difference over the components
differ because of the reverse flow.
The model computes differences in results that are expected to be
close to each other after the initial transients decayed.
All temperature sensors are configured as steady-state sensors to avoid
differences in temperature due to the dynamic response of the sensor.
Extends from Modelica.Icons.Example (Icon for runnable examples).
Modelica definition
model HeaterCooler_u
extends Modelica.Icons.Example;
package Medium =
Buildings.Media.Water;
Buildings.Fluid.HeatExchangers.HeaterCooler_u hea1(
redeclare package Medium = Medium,
Q_flow_nominal=5000,
m_flow_nominal=0.5,
dp_nominal=200,
energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial)
;
Modelica.Blocks.Sources.Constant TDb(k=293.15) ;
Buildings.Fluid.Sources.Boundary_pT sou_1(
redeclare package Medium = Medium,
use_T_in=true,
nPorts=4,
p(displayUnit="Pa") = 101735,
T=293.15);
Buildings.Fluid.FixedResistances.PressureDrop res_11(
redeclare package Medium = Medium,
dp_nominal=5,
m_flow_nominal=0.5);
Buildings.Fluid.FixedResistances.PressureDrop res_12(
redeclare package Medium = Medium,
dp_nominal=5,
m_flow_nominal=0.5);
Buildings.Fluid.Sources.Boundary_pT sin_1(
redeclare
package Medium = Medium,
use_p_in=true,
T=288.15,
nPorts=4);
Modelica.Blocks.Sources.Constant POut(k=101325);
Modelica.Blocks.Sources.Ramp u(
height=2,
duration=3600,
offset=-1,
startTime=0) ;
Buildings.Fluid.HeatExchangers.HeaterCooler_u hea2(
redeclare package Medium = Medium,
Q_flow_nominal=5000,
m_flow_nominal=0.5,
dp_nominal=200,
energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial)
;
Modelica.Blocks.Math.Gain gain(k=-1);
Buildings.Fluid.HeatExchangers.HeaterCooler_u hea3(
redeclare package Medium = Medium,
Q_flow_nominal=5000,
m_flow_nominal=0.5,
dp_nominal=200,
energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial)
;
Buildings.Fluid.FixedResistances.PressureDrop res_2(
redeclare package Medium = Medium,
dp_nominal=5,
m_flow_nominal=0.5);
Buildings.Fluid.FixedResistances.PressureDrop res_3(
redeclare package Medium = Medium,
dp_nominal=5,
m_flow_nominal=0.5);
Buildings.Fluid.HeatExchangers.HeaterCooler_u hea4(
redeclare package Medium = Medium, Q_flow_nominal=5000,
m_flow_nominal=0.5,
dp_nominal=200,
energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial)
;
Buildings.Fluid.FixedResistances.PressureDrop res_4(
redeclare package Medium = Medium,
dp_nominal=5,
m_flow_nominal=0.5);
Buildings.Fluid.MixingVolumes.MixingVolume mix1(
redeclare package Medium = Medium, V=
0.000001,
nPorts=2,
m_flow_nominal=0.5,
energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial);
Modelica.Blocks.Math.Add che1(k2=-1);
Modelica.Blocks.Math.Add che2(k2=-1);
Buildings.Fluid.HeatExchangers.HeaterCooler_u hea5(
redeclare package Medium = Medium,
Q_flow_nominal=5000,
m_flow_nominal=0.5,
dp_nominal=200,
energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial)
;
Buildings.Fluid.FixedResistances.PressureDrop res_1(
redeclare package Medium = Medium,
dp_nominal=5,
m_flow_nominal=0.5);
Buildings.Fluid.FixedResistances.PressureDrop res_5(
redeclare package Medium = Medium,
dp_nominal=5,
m_flow_nominal=0.5);
Buildings.Fluid.HeatExchangers.HeaterCooler_u hea6(
redeclare package Medium =
Medium, Q_flow_nominal=5000,
m_flow_nominal=0.5,
dp_nominal=200,
energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial)
;
Buildings.Fluid.HeatExchangers.HeaterCooler_u hea7(
redeclare package Medium = Medium,
Q_flow_nominal=5000,
m_flow_nominal=0.5,
dp_nominal=200,
energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial)
;
Buildings.Fluid.FixedResistances.PressureDrop res_6(
redeclare package Medium = Medium,
dp_nominal=5,
m_flow_nominal=0.5);
Buildings.Fluid.FixedResistances.PressureDrop res_7(
redeclare package Medium = Medium,
dp_nominal=5,
m_flow_nominal=0.5);
Buildings.Fluid.HeatExchangers.HeaterCooler_u hea8(
redeclare package Medium = Medium, Q_flow_nominal=5000,
m_flow_nominal=0.5,
dp_nominal=200,
energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial)
;
Buildings.Fluid.FixedResistances.PressureDrop res_8(
redeclare package Medium = Medium,
dp_nominal=5,
m_flow_nominal=0.5);
Buildings.Fluid.MixingVolumes.MixingVolume mix2(
redeclare package Medium = Medium,
V=0.000001,
nPorts=2,
m_flow_nominal=0.5,
energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial);
Modelica.Blocks.Math.Add che9(k2=-1);
Modelica.Blocks.Math.Add che10(k2=-1);
Buildings.Fluid.Sensors.TemperatureTwoPort
senTem2a(
redeclare package Medium = Medium,
m_flow_nominal=0.5,
tau=0) ;
Buildings.Fluid.Sensors.TemperatureTwoPort
senTem2b(
redeclare package Medium = Medium,
m_flow_nominal=0.5,
tau=0) ;
Buildings.Fluid.Sensors.TemperatureTwoPort
senTem1a(
redeclare package Medium = Medium,
m_flow_nominal=0.5,
tau=0) ;
Buildings.Fluid.Sensors.TemperatureTwoPort
senTem1b(
redeclare package Medium = Medium,
m_flow_nominal=0.5,
tau=0) ;
Buildings.Fluid.Sensors.TemperatureTwoPort
senTem3a(
redeclare package Medium = Medium,
m_flow_nominal=0.5,
tau=0) ;
Buildings.Fluid.Sensors.TemperatureTwoPort
senTem3b(
redeclare package Medium = Medium,
m_flow_nominal=0.5,
tau=0) ;
Buildings.Fluid.Sensors.TemperatureTwoPort
senTem4a(
redeclare package Medium = Medium,
m_flow_nominal=0.5,
tau=0) ;
Buildings.Fluid.Sensors.TemperatureTwoPort
senTem4b(
redeclare package Medium = Medium,
m_flow_nominal=0.5,
tau=0) ;
Modelica.Blocks.Math.Add che3(k2=-1);
Modelica.Blocks.Math.Add che4(k2=-1);
Modelica.Blocks.Math.Add che5(k2=-1);
Modelica.Blocks.Math.Add che6(k2=-1);
Buildings.Fluid.Sensors.TemperatureTwoPort
senTem6b(
redeclare package Medium = Medium,
m_flow_nominal=0.5,
tau=0) ;
Buildings.Fluid.Sensors.TemperatureTwoPort
senTem6a(
redeclare package Medium = Medium,
m_flow_nominal=0.5,
tau=0) ;
Buildings.Fluid.Sensors.TemperatureTwoPort
senTem5b(
redeclare package Medium = Medium,
m_flow_nominal=0.5,
tau=0) ;
Buildings.Fluid.Sensors.TemperatureTwoPort
senTem5a(
redeclare package Medium = Medium,
m_flow_nominal=0.5,
tau=0) ;
Modelica.Blocks.Math.Add che7(k2=-1);
Modelica.Blocks.Math.Add che8(k2=-1);
Buildings.Fluid.Sensors.TemperatureTwoPort
senTem8b(
redeclare package Medium = Medium,
m_flow_nominal=0.5,
tau=0) ;
Buildings.Fluid.Sensors.TemperatureTwoPort
senTem8a(
redeclare package Medium = Medium,
m_flow_nominal=0.5,
tau=0) ;
Buildings.Fluid.Sensors.TemperatureTwoPort
senTem7b(
redeclare package Medium = Medium,
m_flow_nominal=0.5,
tau=0) ;
Buildings.Fluid.Sensors.TemperatureTwoPort
senTem7a(
redeclare package Medium = Medium,
m_flow_nominal=0.5,
tau=0) ;
equation
connect(POut.y,sin_1. p_in);
connect(TDb.y,sou_1. T_in);
connect(u.y, hea1.u);
connect(gain.y, hea2.u);
connect(u.y, gain.u);
connect(u.y, hea3.u);
connect(gain.y, hea4.u);
connect(u.y, hea6.u);
connect(u.y, hea8.u);
connect(gain.y, hea5.u);
connect(gain.y, hea7.u);
connect(sin_1.ports[1], res_12.port_a);
connect(sin_1.ports[2], res_3.port_a);
connect(sou_1.ports[1], res_11.port_a);
connect(sou_1.ports[2], res_2.port_a);
connect(sin_1.ports[3], res_1.port_a);
connect(sin_1.ports[4], res_6.port_a);
connect(sou_1.ports[3], res_5.port_a);
connect(sou_1.ports[4], res_7.port_a);
connect(mix1.ports[1], res_4.port_a);
connect(mix2.ports[1], res_8.port_a);
connect(senTem1a.T,che1. u1);
connect(senTem2a.T,che1. u2);
connect(senTem1b.T,che2. u2);
connect(senTem2b.T,che2. u1);
connect(senTem4a.T,che4. u2);
connect(senTem3a.T,che4. u1);
connect(senTem4b.T,che3. u1);
connect(senTem3b.T,che3. u2);
connect(senTem6a.T,che6. u2);
connect(senTem5a.T,che6. u1);
connect(senTem6b.T,che5. u1);
connect(senTem5b.T,che5. u2);
connect(senTem8a.T,che8. u2);
connect(senTem7a.T,che8. u1);
connect(senTem8b.T,che7. u1);
connect(senTem7b.T,che7. u2);
connect(senTem3a.T,che10. u1);
connect(senTem7a.T,che10. u2);
connect(senTem2b.T,che9. u1);
connect(senTem5b.T,che9. u2);
connect(res_12.port_b, senTem2a.port_a);
connect(senTem2a.port_b, hea2.port_a);
connect(hea2.port_b, senTem2b.port_a);
connect(senTem2b.port_b, senTem1b.port_b);
connect(hea1.port_b, senTem1b.port_a);
connect(res_11.port_b, senTem1a.port_a);
connect(senTem1a.port_b, hea1.port_a);
connect(res_2.port_b, senTem3a.port_a);
connect(senTem3a.port_b, hea3.port_a);
connect(hea3.port_b, senTem3b.port_a);
connect(senTem3b.port_b, mix1.ports[2]);
connect(hea4.port_b, senTem4b.port_a);
connect(res_3.port_b, senTem4a.port_a);
connect(senTem4a.port_b, hea4.port_a);
connect(senTem4b.port_b, res_4.port_b);
connect(res_5.port_b, senTem6a.port_a);
connect(senTem6a.port_b, hea6.port_a);
connect(hea6.port_b, senTem6b.port_a);
connect(senTem6b.port_b, senTem5b.port_b);
connect(senTem5b.port_a, hea5.port_b);
connect(hea5.port_a, senTem5a.port_b);
connect(senTem5a.port_a, res_1.port_b);
connect(res_7.port_b, senTem8a.port_a);
connect(senTem8a.port_b, hea8.port_a);
connect(hea8.port_b, senTem8b.port_a);
connect(senTem8b.port_b, res_8.port_b);
connect(mix2.ports[2], senTem7b.port_b);
connect(senTem7b.port_a, hea7.port_b);
connect(hea7.port_a, senTem7a.port_b);
connect(senTem7a.port_a, res_6.port_b);
end HeaterCooler_u;
Information
Model that tests the basic class that is used for the humidifier model.
It adds and removes water for forward and reverse flow.
The top and bottom models should give similar results, although
the sign of the humidity difference over the components differ
because of the reverse flow.
The model computes differences of results that
are expected to be close to each other after the
initial transients decayed.
Extends from Modelica.Icons.Example (Icon for runnable examples).
Parameters
Type | Name | Default | Description |
MassFlowRate | mWat_flow_nominal | 0.001 | Nominal water mass flow rate [kg/s] |
Modelica definition
model Humidifier_u
extends Modelica.Icons.Example;
package Medium =
Buildings.Media.Air;
parameter Modelica.Units.SI.MassFlowRate mWat_flow_nominal=0.001
;
Humidifier hea1(
redeclare package Medium =
Medium,
m_flow_nominal=0.5,
mWat_flow_nominal=mWat_flow_nominal,
dp_nominal=50,
show_T=true,
energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial)
;
Modelica.Blocks.Sources.Constant TDb(k=293.15) ;
Buildings.Fluid.Sources.Boundary_pT sou_1(
redeclare package Medium = Medium,
use_T_in=true,
nPorts=4,
p(displayUnit="Pa") = 101435,
T=293.15);
Buildings.Fluid.FixedResistances.PressureDrop res_11(
redeclare package Medium = Medium,
dp_nominal=5,
m_flow_nominal=0.5);
Buildings.Fluid.FixedResistances.PressureDrop res_12(
redeclare package Medium = Medium,
dp_nominal=5,
m_flow_nominal=0.5);
Buildings.Fluid.Sources.Boundary_pT sin_1(
redeclare package Medium = Medium,
use_p_in=true,
T=288.15,
nPorts=4);
Modelica.Blocks.Sources.Constant POut(k=101325);
Modelica.Blocks.Sources.Ramp u(
duration=3600,
startTime=0,
height=1,
offset=0) ;
Humidifier hea2(
redeclare package Medium = Medium,
m_flow_nominal=0.5,
mWat_flow_nominal=mWat_flow_nominal,
dp_nominal=50,
show_T=true,
energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial)
;
Modelica.Blocks.Math.Gain gain(k=-1);
Humidifier hea3(
redeclare package Medium = Medium,
m_flow_nominal=0.5,
mWat_flow_nominal=mWat_flow_nominal,
dp_nominal=50,
show_T=true,
energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial)
;
Buildings.Fluid.FixedResistances.PressureDrop res_2(
redeclare package Medium = Medium,
dp_nominal=5,
m_flow_nominal=0.5);
Buildings.Fluid.FixedResistances.PressureDrop res_3(
redeclare package Medium = Medium,
dp_nominal=5,
m_flow_nominal=0.5);
Humidifier hea4(
redeclare package Medium = Medium,
m_flow_nominal=0.5,
mWat_flow_nominal=mWat_flow_nominal,
dp_nominal=50,
show_T=true,
energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial)
;
Buildings.Fluid.FixedResistances.PressureDrop res_4(
redeclare package Medium = Medium,
dp_nominal=5,
m_flow_nominal=0.5);
Buildings.Fluid.MixingVolumes.MixingVolume mix1(
redeclare package Medium = Medium,
V=0.000001,
nPorts=2,
m_flow_nominal=0.5,
energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial);
Modelica.Blocks.Math.Add che1(k2=-1);
Modelica.Blocks.Sources.RealExpression y1(y=hea2.staB.T);
Modelica.Blocks.Sources.RealExpression y2(y=hea1.staB.T);
Modelica.Blocks.Math.Add che2(k2=-1);
Modelica.Blocks.Sources.RealExpression y3(y=hea2.staA.T);
Modelica.Blocks.Sources.RealExpression y4(y=hea1.staA.T);
Modelica.Blocks.Math.Add che3(k2=-1);
Modelica.Blocks.Sources.RealExpression y5(y=hea4.staB.T);
Modelica.Blocks.Sources.RealExpression y6(y=hea3.staB.T);
Modelica.Blocks.Math.Add che4(k2=-1);
Modelica.Blocks.Sources.RealExpression y7(y=hea4.staA.T);
Modelica.Blocks.Sources.RealExpression y8(y=hea3.staA.T);
Humidifier hea5(
redeclare package Medium =
Medium,
m_flow_nominal=0.5,
mWat_flow_nominal=mWat_flow_nominal,
dp_nominal=50,
show_T=true,
energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial)
;
Buildings.Fluid.FixedResistances.PressureDrop res_1(
redeclare package Medium = Medium,
dp_nominal=5,
m_flow_nominal=0.5);
Buildings.Fluid.FixedResistances.PressureDrop res_5(
redeclare package Medium = Medium,
dp_nominal=5,
m_flow_nominal=0.5);
Humidifier hea6(
redeclare package Medium =
Medium,
m_flow_nominal=0.5,
mWat_flow_nominal=mWat_flow_nominal,
dp_nominal=50,
show_T=true,
energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial)
;
Humidifier hea7(
redeclare package Medium =
Medium,
m_flow_nominal=0.5,
mWat_flow_nominal=mWat_flow_nominal,
dp_nominal=50,
show_T=true,
energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial)
;
Buildings.Fluid.FixedResistances.PressureDrop res_6(
redeclare package Medium = Medium,
dp_nominal=5,
m_flow_nominal=0.5);
Buildings.Fluid.FixedResistances.PressureDrop res_7(
redeclare package Medium = Medium,
dp_nominal=5,
m_flow_nominal=0.5);
Humidifier hea8(
redeclare package Medium =
Medium,
m_flow_nominal=0.5,
mWat_flow_nominal=mWat_flow_nominal,
dp_nominal=50,
show_T=true,
energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial)
;
Buildings.Fluid.FixedResistances.PressureDrop res_8(
redeclare package Medium = Medium,
dp_nominal=5,
m_flow_nominal=0.5);
Buildings.Fluid.MixingVolumes.MixingVolume mix2(
redeclare package Medium = Medium, V=
0.000001,
nPorts=2,
m_flow_nominal=0.5,
energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial);
Modelica.Blocks.Math.Add che5(k2=-1);
Modelica.Blocks.Sources.RealExpression y9(y=hea6.staB.T);
Modelica.Blocks.Sources.RealExpression y10(
y=hea5.staB.T);
Modelica.Blocks.Math.Add che6(k2=-1);
Modelica.Blocks.Sources.RealExpression y11(
y=hea6.staA.T);
Modelica.Blocks.Sources.RealExpression y12(
y=hea5.staA.T);
Modelica.Blocks.Math.Add che7(k2=-1);
Modelica.Blocks.Sources.RealExpression y13(
y=hea8.staB.T);
Modelica.Blocks.Sources.RealExpression y14(
y=hea7.staB.T);
Modelica.Blocks.Math.Add che8(k2=-1);
Modelica.Blocks.Sources.RealExpression y15(
y=hea8.staA.T);
Modelica.Blocks.Sources.RealExpression y16(
y=hea7.staA.T);
Modelica.Blocks.Math.Add che9(k2=-1);
Modelica.Blocks.Sources.RealExpression y17(y=hea2.staB.T);
Modelica.Blocks.Sources.RealExpression y18(y=hea5.staB.T);
Modelica.Blocks.Math.Add che10(k2=-1);
Modelica.Blocks.Sources.RealExpression y19(y=hea4.staA.T);
Modelica.Blocks.Sources.RealExpression y20(y=hea7.staA.T);
Modelica.Blocks.Math.Add che11(k2=-1);
Modelica.Blocks.Sources.RealExpression y21(y=hea2.staB.X[1]);
Modelica.Blocks.Sources.RealExpression y22(y=hea1.staB.X[1]);
Modelica.Blocks.Math.Add che12(k2=-1);
Modelica.Blocks.Sources.RealExpression y23(
y=hea2.staA.X[1]);
Modelica.Blocks.Sources.RealExpression y24(
y=hea1.staA.X[1]);
Modelica.Blocks.Math.Add che13(k2=-1);
Modelica.Blocks.Sources.RealExpression y25(
y=hea4.staB.X[1]);
Modelica.Blocks.Sources.RealExpression y26(
y=hea3.staB.X[1]);
Modelica.Blocks.Math.Add che14(k2=-1);
Modelica.Blocks.Sources.RealExpression y27(
y=hea4.staA.X[1]);
Modelica.Blocks.Sources.RealExpression y28(
y=hea3.staA.X[1]);
Modelica.Blocks.Math.Add che15(k2=-1);
Modelica.Blocks.Sources.RealExpression y29(
y=hea6.staB.X[1]);
Modelica.Blocks.Sources.RealExpression y30(
y=hea5.staB.X[1]);
Modelica.Blocks.Math.Add che16(k2=-1);
Modelica.Blocks.Sources.RealExpression y31(
y=hea6.staA.X[1]);
Modelica.Blocks.Sources.RealExpression y32(
y=hea5.staA.X[1]);
Modelica.Blocks.Math.Add che17(k2=-1);
Modelica.Blocks.Sources.RealExpression y33(
y=hea8.staB.X[1]);
Modelica.Blocks.Sources.RealExpression y34(
y=hea7.staB.X[1]);
Modelica.Blocks.Math.Add che18(k2=-1);
Modelica.Blocks.Sources.RealExpression y35(
y=hea8.staA.X[1]);
Modelica.Blocks.Sources.RealExpression y36(
y=hea7.staA.X[1]);
Modelica.Blocks.Math.Add che19(k2=-1);
Modelica.Blocks.Sources.RealExpression y37(y=hea2.staB.X[1]);
Modelica.Blocks.Sources.RealExpression y38(y=hea5.staB.X[1]);
Modelica.Blocks.Math.Add che20(k2=-1);
Modelica.Blocks.Sources.RealExpression y39(y=hea4.staA.X[1]);
Modelica.Blocks.Sources.RealExpression y40(y=hea7.staA.X[1]);
protected
model Humidifier
extends Buildings.Fluid.Humidifiers.Humidifier_u;
Medium.ThermodynamicState staA=
Medium.setState_phX(port_a.p,
actualStream(port_a.h_outflow),
actualStream(port_a.Xi_outflow))
;
Medium.ThermodynamicState staB=
Medium.setState_phX(port_b.p,
actualStream(port_b.h_outflow),
actualStream(port_b.Xi_outflow))
;
end Humidifier;
equation
connect(POut.y,sin_1. p_in);
connect(TDb.y,sou_1. T_in);
connect(res_11.port_b, hea1.port_a);
connect(u.y, hea1.u);
connect(gain.y, hea2.u);
connect(u.y, gain.u);
connect(res_12.port_b, hea2.port_a);
connect(res_2.port_b, hea3.port_a);
connect(u.y, hea3.u);
connect(gain.y, hea4.u);
connect(res_3.port_b, hea4.port_a);
connect(hea4.port_b, res_4.port_b);
connect(hea1.port_b, hea2.port_b);
connect(y1.y,che1. u1);
connect(y2.y,che1. u2);
connect(y3.y,che2. u1);
connect(y4.y,che2. u2);
connect(y5.y,che3. u1);
connect(y6.y,che3. u2);
connect(y7.y,che4. u1);
connect(y8.y,che4. u2);
connect(res_1.port_b, hea5.port_a);
connect(res_5.port_b, hea6.port_a);
connect(res_6.port_b,hea7. port_a);
connect(res_7.port_b,hea8. port_a);
connect(hea8.port_b,res_8. port_b);
connect(hea5.port_b,hea6. port_b);
connect(y9.y,che5. u1);
connect(y10.y,che5. u2);
connect(y11.y,che6. u1);
connect(y12.y,che6. u2);
connect(y13.y,che7. u1);
connect(y14.y,che7. u2);
connect(y15.y,che8. u1);
connect(y16.y,che8. u2);
connect(y17.y,che9. u1);
connect(y18.y,che9. u2);
connect(y19.y,che10. u1);
connect(y20.y,che10. u2);
connect(u.y, hea6.u);
connect(u.y, hea8.u);
connect(gain.y, hea5.u);
connect(gain.y, hea7.u);
connect(y21.y,che11. u1);
connect(y22.y,che11. u2);
connect(y23.y,che12. u1);
connect(y24.y,che12. u2);
connect(y25.y,che13. u1);
connect(y26.y,che13. u2);
connect(y27.y,che14. u1);
connect(y28.y,che14. u2);
connect(y29.y,che15. u1);
connect(y30.y,che15. u2);
connect(y31.y,che16. u1);
connect(y32.y,che16. u2);
connect(y33.y,che17. u1);
connect(y34.y,che17. u2);
connect(y35.y,che18. u1);
connect(y36.y,che18. u2);
connect(y37.y,che19. u1);
connect(y38.y,che19. u2);
connect(y39.y,che20. u1);
connect(y40.y,che20. u2);
connect(sin_1.ports[1], res_12.port_a);
connect(sin_1.ports[2], res_3.port_a);
connect(sou_1.ports[1], res_11.port_a);
connect(sou_1.ports[2], res_2.port_a);
connect(sin_1.ports[3], res_1.port_a);
connect(sin_1.ports[4], res_6.port_a);
connect(sou_1.ports[3], res_5.port_a);
connect(sou_1.ports[4], res_7.port_a);
connect(hea3.port_b, mix1.ports[1]);
connect(mix1.ports[2], res_4.port_a);
connect(hea7.port_b, mix2.ports[1]);
connect(mix2.ports[2], res_8.port_a);
end Humidifier_u;
Test model for prescribed outlet state
Information
Model that demonstrates
Buildings.Fluid.Interfaces.PrescribedOutlet
with mass fraction setpoint.
Extends from Modelica.Icons.Example (Icon for runnable examples), Buildings.Fluid.Interfaces.Examples.BaseClasses.PrescribedOutletState (Test model for prescribed outlet state).
Parameters
Type | Name | Default | Description |
replaceable package Medium | Air | Medium model |
MassFlowRate | m_flow_nominal | 0.1 | Nominal mass flow rate [kg/s] |
Modelica definition
model PrescribedOutlet
extends Modelica.Icons.Example;
extends Buildings.Fluid.Interfaces.Examples.BaseClasses.PrescribedOutletState;
equation
connect(setHeaHigPow.y[1], heaHigPow.TSet);
connect(setHeaHigPow.y[2], heaHigPow.X_wSet);
connect(setCooLimPow.y[1], cooLimPow.TSet);
connect(setCooLimPow.y[2], cooLimPow.X_wSet);
connect(setHeaCooUnl.y[1], heaCooUnl.TSet);
connect(setHeaCooUnl.y[2], heaCooUnl.X_wSet);
connect(setHeaCooUnl.y[1], steSta.TSet);
connect(setHeaCooUnl.y[2], steSta.X_wSet);
end PrescribedOutlet;
Test model for prescribed outlet state
Information
Model that demonstrates
Buildings.Fluid.Interfaces.PrescribedOutlet
with temperature setpoint.
Extends from Modelica.Icons.Example (Icon for runnable examples), Buildings.Fluid.Interfaces.Examples.BaseClasses.PrescribedOutletState (Test model for prescribed outlet state).
Parameters
Type | Name | Default | Description |
replaceable package Medium | Air | Medium model |
MassFlowRate | m_flow_nominal | 0.1 | Nominal mass flow rate [kg/s] |
Modelica definition
model PrescribedOutlet_TSetOnly
extends Modelica.Icons.Example;
extends Buildings.Fluid.Interfaces.Examples.BaseClasses.PrescribedOutletState
(
steSta(use_X_wSet=false),
heaHigPow(use_X_wSet=false),
cooLimPow(use_X_wSet=false),
heaCooUnl(use_X_wSet=false));
equation
connect(setHeaHigPow.y[1], heaHigPow.TSet);
connect(setCooLimPow.y[1], cooLimPow.TSet);
connect(setHeaCooUnl.y[1], heaCooUnl.TSet);
connect(setHeaCooUnl.y[1], steSta.TSet);
end PrescribedOutlet_TSetOnly;
Test model for prescribed outlet state
Information
Model that demonstrates
Buildings.Fluid.Interfaces.PrescribedOutlet
with temperature setpoint and water as the medium.
Extends from Modelica.Icons.Example (Icon for runnable examples), Buildings.Fluid.Interfaces.Examples.BaseClasses.PrescribedOutletState (Test model for prescribed outlet state).
Parameters
Type | Name | Default | Description |
replaceable package Medium | Air | Medium model |
MassFlowRate | m_flow_nominal | 0.1 | Nominal mass flow rate [kg/s] |
Connectors
Type | Name | Description |
replaceable package Medium | Medium model |
Modelica definition
Test model for prescribed outlet state
Information
Model that demonstrates
Buildings.Fluid.Interfaces.PrescribedOutlet
with mass fraction setpoint.
Extends from Modelica.Icons.Example (Icon for runnable examples), Buildings.Fluid.Interfaces.Examples.BaseClasses.PrescribedOutletState (Test model for prescribed outlet state).
Parameters
Type | Name | Default | Description |
replaceable package Medium | Air | Medium model |
MassFlowRate | m_flow_nominal | 0.1 | Nominal mass flow rate [kg/s] |
Modelica definition
model PrescribedOutlet_X_wSetOnly
extends Modelica.Icons.Example;
extends Buildings.Fluid.Interfaces.Examples.BaseClasses.PrescribedOutletState
(
heaHigPow(use_TSet=false),
cooLimPow(use_TSet=false),
heaCooUnl(use_TSet=false),
steSta(use_TSet=false));
equation
connect(setHeaHigPow.y[2], heaHigPow.X_wSet);
connect(setCooLimPow.y[2], cooLimPow.X_wSet);
connect(setHeaCooUnl.y[2], heaCooUnl.X_wSet);
connect(setHeaCooUnl.y[2], steSta.X_wSet);
end PrescribedOutlet_X_wSetOnly;
Model that tests the reverse flow for a humidifier
Information
This model tests whether the results for a humidifer are
identical for forward flow and reverse flow.
Extends from Modelica.Icons.Example (Icon for runnable examples).
Modelica definition
model ReverseFlowHumidifier
extends Modelica.Icons.Example;
package Medium =
Buildings.Media.Air;
Modelica.Blocks.Math.Add cheTem(k2=-1)
;
Modelica.Blocks.Math.Add cheEnt(k2=-1)
;
Modelica.Blocks.Math.Add cheMas(k2=-1)
;
Buildings.Fluid.Humidifiers.Humidifier_u humBac(
redeclare package Medium = Medium,
dp_nominal=0,
m_flow(start=1),
m_flow_nominal=1,
mWat_flow_nominal=0.1,
energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial)
;
Buildings.Fluid.Humidifiers.Humidifier_u humFor(
redeclare package Medium = Medium,
dp_nominal=0,
m_flow(start=1),
m_flow_nominal=1,
mWat_flow_nominal=0.1,
energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial)
;
Modelica.Blocks.Sources.Constant u2(k=0.01) ;
Modelica.Fluid.Sources.MassFlowSource_T source1(
redeclare package Medium = Medium,
use_m_flow_in=false,
use_T_in=false,
use_X_in=false,
T(displayUnit="K") = 323.15,
X={0.01,0.99},
nPorts=1,
m_flow=0.5) ;
Buildings.Fluid.Sources.Boundary_pT sink1(
redeclare package Medium = Medium,
nPorts=2) ;
Sensors.SpecificEnthalpy senEnt1(
redeclare package Medium = Medium,
warnAboutOnePortConnection=false)
;
Buildings.Fluid.Sensors.Temperature senTem1(
redeclare package Medium = Medium,
warnAboutOnePortConnection=false)
;
Sensors.MassFraction senMas1(
redeclare package Medium = Medium,
warnAboutOnePortConnection=false)
;
Buildings.Fluid.Sensors.Temperature senTem2(
redeclare package Medium = Medium,
warnAboutOnePortConnection=false)
;
Sensors.SpecificEnthalpy senEnt2(
redeclare package Medium = Medium,
warnAboutOnePortConnection=false)
;
Sensors.MassFraction senMas2(
redeclare package Medium = Medium,
warnAboutOnePortConnection=false)
;
FixedResistances.PressureDrop res1(
redeclare package Medium = Medium,
m_flow_nominal=1,
from_dp=true,
linearized=false,
dp_nominal=1000) ;
FixedResistances.PressureDrop res2(
redeclare package Medium = Medium,
m_flow_nominal=1,
from_dp=true,
linearized=false,
dp_nominal=1000) ;
Modelica.Fluid.Sources.MassFlowSource_T source2(
redeclare package Medium = Medium,
use_m_flow_in=false,
use_T_in=false,
use_X_in=false,
T(displayUnit="K") = 323.15,
X={0.01,0.99},
nPorts=1,
m_flow=0.5) ;
equation
connect(u2.y, humFor.u);
connect(u2.y, humBac.u);
connect(humFor.port_b, senTem1.port);
connect(humFor.port_b, senEnt1.port);
connect(humFor.port_b, senMas1.port);
connect(humBac.port_a, senTem2.port);
connect(humBac.port_a, senEnt2.port);
connect(humBac.port_a, senMas2.port);
connect(humFor.port_b, res1.port_a);
connect(res1.port_b, sink1.ports[1]);
connect(humBac.port_a, res2.port_a);
connect(res2.port_b, sink1.ports[2]);
connect(senTem1.T,cheTem. u1);
connect(senEnt1.h_out,cheEnt. u1);
connect(senMas1.X,cheMas. u1);
connect(senTem2.T,cheTem. u2);
connect(senEnt2.h_out,cheEnt. u2);
connect(senMas2.X,cheMas. u2);
connect(humFor.port_a, source1.ports[1]);
connect(source2.ports[1], humBac.port_b);
end ReverseFlowHumidifier;
Model that tests the reverse flow for a mass exchanger
Information
This model tests whether the results for a mass exchanger are
identical for forward flow and reverse flow.
Note that if the latent heat transfer effectiveness is non-zero, then
the results will differ. The reason is that the maximum capacity stream
is computed using the mass flow rates at port_a1
and port_a2
. For reverse flow, they are not equal if
moisture is added to the mass flow rate. Using an average mass flow rate
in computing the heat and moisture transfer would lead to identical results,
but it would introduce additional nonlinear equations that need to be solved.
Therefore, the model uses the mass flow rates at port_a1
and port_a2
.
Note: This problem fails to translate in Dymola 2012 due to an error in Dymola's support
of stream connector. This bug will be corrected in future versions of Dymola.
Extends from Modelica.Icons.Example (Icon for runnable examples).
Modelica definition
model ReverseFlowMassExchanger
extends Modelica.Icons.Example;
package Medium =
Buildings.Media.Air;
Modelica.Blocks.Math.Add cheTem(k2=-1)
;
Modelica.Blocks.Math.Add cheEnt(k2=-1)
;
Modelica.Blocks.Math.Add cheMas(k2=-1)
;
Modelica.Fluid.Sources.MassFlowSource_T source2(
m_flow=1,
redeclare package Medium = Medium,
use_m_flow_in=false,
use_T_in=false,
use_X_in=false,
nPorts=1,
T(displayUnit="degC") = 303.15,
X={0.02,0.98});
Buildings.Fluid.MassExchangers.ConstantEffectiveness masExcFor(
redeclare package Medium1 = Medium,
redeclare package Medium2 = Medium,
m1_flow_nominal=1,
m2_flow_nominal=1,
dp1_nominal=0,
dp2_nominal=0,
epsL=0) ;
Buildings.Fluid.MassExchangers.ConstantEffectiveness masExcRev(
redeclare package Medium1 = Medium,
redeclare package Medium2 = Medium,
m1_flow_nominal=1,
m2_flow_nominal=1,
dp1_nominal=0,
dp2_nominal=0,
epsL=0) ;
Buildings.Fluid.Sources.Boundary_pT sink2(
redeclare package Medium = Medium,
nPorts=2) ;
FixedResistances.PressureDrop res3(
redeclare package Medium = Medium,
m_flow_nominal=1,
from_dp=true,
linearized=false,
dp_nominal=1000) ;
FixedResistances.PressureDrop res4(
redeclare package Medium = Medium,
m_flow_nominal=1,
from_dp=true,
linearized=false,
dp_nominal=1000) ;
Sensors.SpecificEnthalpy senEnt3(
redeclare package Medium = Medium,
warnAboutOnePortConnection=false);
Buildings.Fluid.Sensors.Temperature senTem3(
redeclare package Medium = Medium,
warnAboutOnePortConnection=false);
Sensors.MassFraction senMas3(
redeclare package Medium = Medium,
warnAboutOnePortConnection=false);
Sensors.SpecificEnthalpy senEnt4(
redeclare package Medium = Medium,
warnAboutOnePortConnection=false);
Buildings.Fluid.Sensors.Temperature senTem4(
redeclare package Medium = Medium,
warnAboutOnePortConnection=false);
Sensors.MassFraction senMas4(
redeclare package Medium = Medium,
warnAboutOnePortConnection=false);
Modelica.Blocks.Math.Add cheTem1(k2=-1)
;
Modelica.Blocks.Math.Add cheEnt1(k2=-1)
;
Modelica.Blocks.Math.Add cheMas1(k2=-1)
;
Modelica.Fluid.Sources.MassFlowSource_T source3(
m_flow=1,
redeclare package Medium = Medium,
use_m_flow_in=false,
use_T_in=false,
use_X_in=false,
X={0.01,0.99},
nPorts=1,
T(displayUnit="degC") = 293.15);
Modelica.Fluid.Sources.MassFlowSource_T source4(
m_flow=1,
redeclare package Medium = Medium,
use_m_flow_in=false,
use_T_in=false,
use_X_in=false,
nPorts=1,
T(displayUnit="degC") = 303.15,
X={0.02,0.98});
Modelica.Fluid.Sources.MassFlowSource_T source1(
m_flow=1,
redeclare package Medium = Medium,
use_m_flow_in=false,
use_T_in=false,
use_X_in=false,
X={0.01,0.99},
nPorts=1,
T(displayUnit="degC") = 293.15);
Sources.Boundary_pT sink1(
redeclare package Medium = Medium,
nPorts=2) ;
Sensors.SpecificEnthalpy senEnt1(
redeclare package Medium = Medium,
warnAboutOnePortConnection=false);
Buildings.Fluid.Sensors.Temperature senTem1(
redeclare package Medium = Medium,
warnAboutOnePortConnection=false);
Sensors.MassFraction senMas1(
redeclare package Medium = Medium,
warnAboutOnePortConnection=false);
Buildings.Fluid.Sensors.Temperature senTem2(
redeclare package Medium = Medium,
warnAboutOnePortConnection=false);
Sensors.SpecificEnthalpy senEnt2(
redeclare package Medium = Medium,
warnAboutOnePortConnection=false);
Sensors.MassFraction senMas2(
redeclare package Medium = Medium,
warnAboutOnePortConnection=false);
FixedResistances.PressureDrop res1(
redeclare package Medium = Medium,
m_flow_nominal=1,
from_dp=true,
linearized=false,
dp_nominal=1000) ;
FixedResistances.PressureDrop res2(
redeclare package Medium = Medium,
m_flow_nominal=1,
from_dp=true,
linearized=false,
dp_nominal=1000) ;
equation
connect(res1.port_b, sink1.ports[1]);
connect(res2.port_b, sink1.ports[2]);
connect(senTem1.T,cheTem. u1);
connect(senEnt1.h_out,cheEnt. u1);
connect(senMas1.X,cheMas. u1);
connect(senTem2.T,cheTem. u2);
connect(senEnt2.h_out,cheEnt. u2);
connect(senMas2.X,cheMas. u2);
connect(masExcFor.port_b1, res1.port_a);
connect(masExcFor.port_a1, source1.ports[1]);
connect(masExcRev.port_a1, res2.port_a);
connect(source2.ports[1], masExcFor.port_a2);
connect(masExcRev.port_a1, senTem2.port);
connect(masExcRev.port_a1, senEnt2.port);
connect(masExcRev.port_a1, senMas2.port);
connect(masExcFor.port_b1, senTem1.port);
connect(masExcFor.port_b1, senEnt1.port);
connect(masExcFor.port_b1, senMas1.port);
connect(masExcFor.port_b2, res3.port_a);
connect(masExcRev.port_a2, res4.port_a);
connect(res3.port_b, sink2.ports[1]);
connect(res4.port_b, sink2.ports[2]);
connect(senTem3.T,cheTem1. u1);
connect(senTem4.T,cheTem1. u2);
connect(senEnt3.h_out,cheEnt1. u1);
connect(senEnt4.h_out,cheEnt1. u2);
connect(senMas3.X,cheMas1. u1);
connect(senMas4.X,cheMas1. u2);
connect(masExcFor.port_b2, senTem3.port);
connect(masExcFor.port_b2, senEnt3.port);
connect(masExcFor.port_b2, senMas3.port);
connect(masExcRev.port_a2, senTem4.port);
connect(masExcRev.port_a2, senEnt4.port);
connect(masExcRev.port_a2, senMas4.port);
connect(source3.ports[1], masExcRev.port_b1);
connect(source4.ports[1], masExcRev.port_b2);
end ReverseFlowMassExchanger;
Model that tests the static two port conservation equation
Information
Model that tests the conservation equations that are used
for the heat and mass balance.
The instances have either water or air, and either allow or prohibit
flow reversal.
This example tests the implementation of the steady-state balance.
Extends from Modelica.Icons.Example (Icon for runnable examples).
Modelica definition
model StaticTwoPortConservationEquation
extends Modelica.Icons.Example;
package MediumW =
Buildings.Media.Water ;
package MediumA =
Buildings.Media.Air ;
Modelica.Blocks.Sources.Constant mWat_flow(k=0)
;
Modelica.Blocks.Sources.TimeTable QSen_flow(startTime=0, table=[
0,-100;
900,-100;
900,0;
1800,0;
1800,100])
;
SubModel modWatRev(
redeclare package Medium = MediumW,
allowFlowReversal=true,
use_mWat_flow = false) ;
SubModel modWatNoRev(
redeclare package Medium = MediumW,
allowFlowReversal=false,
use_mWat_flow = false) ;
SubModel modAirRev(
redeclare package Medium = MediumA,
allowFlowReversal=true,
use_mWat_flow = true) ;
SubModel modAirNoRev(
redeclare package Medium = MediumA,
allowFlowReversal=false,
use_mWat_flow = true) ;
equation
connect(QSen_flow.y, modWatRev.Q_flow);
connect(mWat_flow.y, modWatRev.mWat_flow);
protected
model SubModel
replaceable package Medium =
Modelica.Media.Interfaces.PartialMedium
;
Sources.MassFlowSource_T bou(
nPorts=1,
redeclare package Medium =
Medium,
m_flow=0.01) ;
Buildings.Fluid.Interfaces.StaticTwoPortConservationEquation conEqn(
redeclare package Medium =
Medium,
m_flow_nominal=0.01,
show_T=true,
allowFlowReversal=allowFlowReversal,
use_mWat_flow=use_mWat_flow,
prescribedHeatFlowRate=true) ;
Buildings.Fluid.Sources.Boundary_pT sin(
use_p_in=false,
redeclare package Medium =
Medium,
nPorts=1,
p=101325,
T=283.15) ;
Modelica.Blocks.Interfaces.RealInput Q_flow(unit="W");
Modelica.Blocks.Interfaces.RealInput mWat_flow(unit="kg/s");
parameter Boolean use_mWat_flow
;
parameter Boolean allowFlowReversal=true
;
equation
connect(conEqn.port_b, sin.ports[1]);
connect(conEqn.port_a, bou.ports[1]);
connect(Q_flow, conEqn.Q_flow);
connect(mWat_flow, conEqn.mWat_flow);
end SubModel;
equation
connect(QSen_flow.y, modWatNoRev.Q_flow);
connect(mWat_flow.y, modWatNoRev.mWat_flow);
connect(QSen_flow.y, modAirRev.Q_flow);
connect(mWat_flow.y, modAirRev.mWat_flow);
connect(QSen_flow.y, modAirNoRev.Q_flow);
connect(mWat_flow.y, modAirNoRev.mWat_flow);
end StaticTwoPortConservationEquation;
Model for humidifier that adds a variable for the thermodynamic states at its ports
Information
Extends from Buildings.Fluid.Humidifiers.Humidifier_u (Ideal humidifier or dehumidifier with prescribed water mass flow rate addition or subtraction).
Parameters
Type | Name | Default | Description |
replaceable package Medium | PartialCondensingGases | Medium in the component |
MassFlowRate | mWat_flow_nominal | | Water mass flow rate at u=1, positive for humidification [kg/s] |
Nominal condition |
MassFlowRate | m_flow_nominal | | Nominal mass flow rate [kg/s] |
PressureDifference | dp_nominal | | Pressure difference [Pa] |
Assumptions |
Boolean | allowFlowReversal | true | = false to simplify equations, assuming, but not enforcing, no flow reversal |
Advanced |
MassFlowRate | m_flow_small | 1E-4*abs(m_flow_nominal) | Small mass flow rate for regularization of zero flow [kg/s] |
Diagnostics |
Boolean | show_T | false | = true, if actual temperature at port is computed |
Flow resistance |
Boolean | from_dp | false | = true, use m_flow = f(dp) else dp = f(m_flow) |
Boolean | linearizeFlowResistance | false | = true, use linear relation between m_flow and dp for any flow rate |
Real | deltaM | 0.1 | Fraction of nominal flow rate where flow transitions to laminar |
Dynamics |
Nominal condition |
Time | tau | 30 | Time constant at nominal flow (if energyDynamics <> SteadyState) [s] |
Conservation equations |
Dynamics | energyDynamics | Modelica.Fluid.Types.Dynamic... | Type of energy balance: dynamic (3 initialization options) or steady state |
Initialization |
AbsolutePressure | p_start | Medium.p_default | Start value of pressure [Pa] |
Temperature | T_start | Medium.T_default | Start value of temperature [K] |
MassFraction | X_start[Medium.nX] | Medium.X_default | Start value of mass fractions m_i/m [kg/kg] |
ExtraProperty | C_start[Medium.nC] | fill(0, Medium.nC) | Start value of trace substances |
Connectors
Type | Name | Description |
FluidPort_a | port_a | Fluid connector a (positive design flow direction is from port_a to port_b) |
FluidPort_b | port_b | Fluid connector b (positive design flow direction is from port_a to port_b) |
input RealInput | u | Control input [1] |
output RealOutput | mWat_flow | Water added to the fluid [kg/s] |
HeatPort_a | heatPort | Heat port for total heat exchange with the control volume |
Modelica definition
Parameters
Type | Name | Default | Description |
replaceable package Medium | Modelica.Media.Interfaces.Pa... | Medium model |
Boolean | use_mWat_flow | | Set to true to enable exchange of moisture |
Boolean | allowFlowReversal | true | = false to simplify equations, assuming, but not enforcing, no flow reversal |
Connectors
Type | Name | Description |
replaceable package Medium | Medium model |
input RealInput | Q_flow | [W] |
input RealInput | mWat_flow | [kg/s] |
Modelica definition
model SubModel
replaceable package Medium =
Modelica.Media.Interfaces.PartialMedium
;
Sources.MassFlowSource_T bou(
nPorts=1,
redeclare package Medium =
Medium,
m_flow=0.01) ;
Buildings.Fluid.Interfaces.StaticTwoPortConservationEquation conEqn(
redeclare package Medium =
Medium,
m_flow_nominal=0.01,
show_T=true,
allowFlowReversal=allowFlowReversal,
use_mWat_flow=use_mWat_flow,
prescribedHeatFlowRate=true) ;
Buildings.Fluid.Sources.Boundary_pT sin(
use_p_in=false,
redeclare package Medium =
Medium,
nPorts=1,
p=101325,
T=283.15) ;
Modelica.Blocks.Interfaces.RealInput Q_flow(unit="W");
Modelica.Blocks.Interfaces.RealInput mWat_flow(unit="kg/s");
parameter Boolean use_mWat_flow
;
parameter Boolean allowFlowReversal=true
;
equation
connect(conEqn.port_b, sin.ports[1]);
connect(conEqn.port_a, bou.ports[1]);
connect(Q_flow, conEqn.Q_flow);
connect(mWat_flow, conEqn.mWat_flow);
end SubModel;