Collection of models that validate the heat exchanger models
Information
This package contains models that validate the heat exchanger models.
The examples plot various outputs, which have been verified against
analytical solutions. These model outputs are stored as reference data to
allow continuous validation whenever models in the library change.
Extends from Modelica.Icons.ExamplesPackage (Icon for packages containing runnable examples).
Package Content
Name |
Description |
ConstantEffectiveness
|
Model that demonstrates use of a heat exchanger with constant effectiveness |
HeaterCooler_T
|
Model that demonstrates the ideal heater/cooler model for a prescribed outlet temperature, configured as steady-state |
HeaterCooler_T_dynamic
|
Model that demonstrates the ideal heater/cooler model for a prescribed outlet temperature, configured as dynamic |
HeaterCooler_u
|
Model that demonstrates the ideal heater model |
Model that demonstrates use of a heat exchanger with constant effectiveness
Information
This model tests
Annex60.Fluid.HeatExchangers.ConstantEffectiveness
for different inlet conditions.
Extends from Modelica.Icons.Example (Icon for runnable examples).
Modelica definition
model ConstantEffectiveness
extends Modelica.Icons.Example;
package Medium1 =
Annex60.Media.Water;
package Medium2 =
Annex60.Media.Air;
Annex60.Fluid.Sources.Boundary_pT sin_2(
redeclare package Medium = Medium2,
use_p_in=true,
nPorts=1,
T=273.15 + 10,
X={0.001,0.999});
Modelica.Blocks.Sources.Ramp PIn(
height=200,
duration=60,
offset=101325,
startTime=50);
Annex60.Fluid.Sources.Boundary_pT sou_2(
redeclare package Medium = Medium2, T=273.15 + 5,
use_p_in=true,
use_T_in=true,
nPorts=1);
Modelica.Blocks.Sources.Ramp TWat(
height=10,
duration=60,
offset=273.15 + 30,
startTime=60) ;
Modelica.Blocks.Sources.Constant TDb(k=293.15) ;
Modelica.Blocks.Sources.Constant POut(k=101325);
Annex60.Fluid.Sources.Boundary_pT sin_1(
redeclare package Medium = Medium1,
use_p_in=true,
nPorts=1,
p=300000,
T=273.15 + 25);
Annex60.Fluid.Sources.Boundary_pT sou_1(
redeclare package Medium = Medium1,
p=300000 + 5000,
T=273.15 + 50,
use_T_in=true,
nPorts=1);
Annex60.Fluid.HeatExchangers.ConstantEffectiveness hex(
redeclare package Medium1 = Medium1,
redeclare package Medium2 = Medium2,
show_T=true,
m1_flow_nominal=5,
m2_flow_nominal=5,
dp1_nominal=500,
dp2_nominal=10);
Modelica.Blocks.Sources.Trapezoid trapezoid(
amplitude=5000,
rising=10,
width=100,
falling=10,
period=3600,
offset=300000);
equation
connect(PIn.y,sou_2. p_in);
connect(TDb.y, sou_2.T_in);
connect(TWat.y, sou_1.T_in);
connect(sou_1.ports[1], hex.port_a1);
connect(hex.port_a2, sou_2.ports[1]);
connect(POut.y, sin_2.p_in);
connect(hex.port_b1, sin_1.ports[1]);
connect(sin_2.ports[1], hex.port_b2);
connect(trapezoid.y, sin_1.p_in);
end ConstantEffectiveness;
Model that demonstrates the ideal heater/cooler model for a prescribed outlet temperature, configured as steady-state
Information
Model that demonstrates the use of an ideal heater and an ideal cooler.
The heater model has a capacity of Q_flow_max = 1.0e4
Watts and
the cooler model has a capacitiy of Q_flow_min = -1000
Watts.
Hence, both only track their set point of the outlet temperature during certain times.
There is also a heater and cooler with unlimited capacity.
At t=1000 second, the flow reverses its direction.
Each flow leg has the same mass flow rate. There are three mass flow sources
as using one source only would yield a nonlinear system of equations that
needs to be solved to determine the mass flow rate distribution.
Extends from Modelica.Icons.Example (Icon for runnable examples).
Parameters
Type | Name | Default | Description |
MassFlowRate | m_flow_nominal | 0.1 | Nominal mass flow rate [kg/s] |
Modelica definition
model HeaterCooler_T
extends Modelica.Icons.Example;
package Medium =
Annex60.Media.Water;
parameter Modelica.SIunits.MassFlowRate m_flow_nominal=0.1
;
Annex60.Fluid.Sources.Boundary_pT sin(
redeclare package Medium = Medium,
use_T_in=false,
p(displayUnit="Pa"),
T=293.15,
nPorts=3) ;
Annex60.Fluid.HeatExchangers.HeaterCooler_T heaHigPow(
redeclare package Medium = Medium,
m_flow_nominal=m_flow_nominal,
dp_nominal=6000,
Q_flow_maxHeat=1e4) ;
Annex60.Fluid.Sensors.TemperatureTwoPort heaHigPowOut(
redeclare package
Medium = Medium, m_flow_nominal=m_flow_nominal) ;
Modelica.Blocks.Sources.TimeTable TSetHeat(table=[0,273.15 + 20.0; 120,273.15
+ 20.0; 120,273.15 + 60.0; 500,273.15 + 60.0; 500,273.15 + 30.0; 1200,273.15 + 30.0])
;
Annex60.Fluid.Sensors.TemperatureTwoPort cooLimPowOut(
redeclare package
Medium = Medium, m_flow_nominal=m_flow_nominal) ;
Annex60.Fluid.HeatExchangers.HeaterCooler_T cooLimPow(
redeclare package Medium = Medium,
m_flow_nominal=m_flow_nominal,
dp_nominal=6000,
Q_flow_maxCool=-1000)
;
Modelica.Blocks.Sources.TimeTable TSetCool(table=[0,273.15 + 20.0; 120,273.15
+ 20.0; 120,273.15 + 15.0; 500,273.15 + 15.0; 500,273.15 + 10.0; 1200,273.15 + 10.0])
;
Annex60.Fluid.HeatExchangers.HeaterCooler_T heaCooUnl(
redeclare package Medium = Medium,
m_flow_nominal=m_flow_nominal,
dp_nominal=6000)
;
Modelica.Blocks.Sources.TimeTable TSetCoolHeat(table=[0,273.15 + 20.0; 120,273.15
+ 20.0; 120,273.15 + 15.0; 500,273.15 + 15.0; 500,273.15 + 30.0; 1200,273.15
+ 30.0]) ;
Annex60.Fluid.Sensors.TemperatureTwoPort heaCooUnlOut(
redeclare package
Medium = Medium, m_flow_nominal=m_flow_nominal) ;
Modelica.Blocks.Sources.Ramp m_flow(
height=-2*m_flow_nominal,
duration=100,
offset=m_flow_nominal,
startTime=1000) ;
Annex60.Fluid.Sensors.TemperatureTwoPort heaHigPowIn(
redeclare package Medium =
Medium, m_flow_nominal=m_flow_nominal) ;
Annex60.Fluid.Sensors.TemperatureTwoPort cooLimPowIn(
redeclare package Medium =
Medium, m_flow_nominal=m_flow_nominal) ;
Annex60.Fluid.Sensors.TemperatureTwoPort heaCooUnlIn(
redeclare package Medium =
Medium, m_flow_nominal=m_flow_nominal) ;
Sources.MassFlowSource_T sou1(
redeclare package Medium = Medium,
use_m_flow_in=true,
nPorts=1,
T=293.15) ;
Sources.MassFlowSource_T sou2(
redeclare package Medium = Medium,
use_m_flow_in=true,
nPorts=1,
T=293.15) ;
Sources.MassFlowSource_T sou3(
redeclare package Medium = Medium,
use_m_flow_in=true,
nPorts=1,
T=293.15) ;
equation
connect(heaHigPow.port_b, heaHigPowOut.port_a);
connect(TSetHeat.y, heaHigPow.TSet);
connect(cooLimPow.port_b, cooLimPowOut.port_a);
connect(TSetCool.y, cooLimPow.TSet);
connect(heaCooUnl.port_b, heaCooUnlOut.port_a);
connect(TSetCoolHeat.y, heaCooUnl.TSet);
connect(heaHigPowIn.port_b, heaHigPow.port_a);
connect(cooLimPowIn.port_b, cooLimPow.port_a);
connect(heaCooUnlIn.port_b, heaCooUnl.port_a);
connect(heaCooUnlOut.port_b, sin.ports[1]);
connect(cooLimPowOut.port_b, sin.ports[2]);
connect(heaHigPowOut.port_b, sin.ports[3]);
connect(m_flow.y, sou1.m_flow_in);
connect(sou1.ports[1], heaHigPowIn.port_a);
connect(m_flow.y, sou2.m_flow_in);
connect(m_flow.y, sou3.m_flow_in);
connect(sou2.ports[1], cooLimPowIn.port_a);
connect(sou3.ports[1], heaCooUnlIn.port_a);
end HeaterCooler_T;
Model that demonstrates the ideal heater/cooler model for a prescribed outlet temperature, configured as dynamic
Information
Model that demonstrates the use of an ideal heater and an ideal cooler, configured as dynamic models.
This example is identical to
Annex60.Fluid.HeatExchangers.Validation.HeaterCooler_T
except that the heater and cooler models are configured to have a
time constant of 60 seconds at nominal flow rate.
At lower flow rate, the time constant increases proportional to the mass flow rate.
Extends from HeaterCooler_T (Model that demonstrates the ideal heater/cooler model for a prescribed outlet temperature, configured as steady-state).
Parameters
Type | Name | Default | Description |
MassFlowRate | m_flow_nominal | 0.1 | Nominal mass flow rate [kg/s] |
Modelica definition
model HeaterCooler_T_dynamic
extends HeaterCooler_T(
heaHigPow(energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial),
cooLimPow(energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial),
heaCooUnl(energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial));
end HeaterCooler_T_dynamic;
Model that demonstrates the ideal heater model
Information
Model that demonstrates the use of an ideal heater.
Both heater models are identical, except that one model is configured
as a steady-state model, whereas the other is configured as a dynamic model.
Both heaters add heat to the medium to track a set-point for the outlet
temperature.
Extends from Modelica.Icons.Example (Icon for runnable examples).
Parameters
Type | Name | Default | Description |
MassFlowRate | m_flow_nominal | 3000/1000/20 | Nominal mass flow rate [kg/s] |
Modelica definition
model HeaterCooler_u
extends Modelica.Icons.Example;
package Medium =
Annex60.Media.Air;
parameter Modelica.SIunits.MassFlowRate
m_flow_nominal=3000/1000/20 ;
Annex60.Fluid.Sources.Boundary_pT sin(
redeclare package Medium = Medium,
use_T_in=false,
p(displayUnit="Pa"),
T=293.15,
nPorts=2)
;
Annex60.Fluid.HeatExchangers.HeaterCooler_u heaSte(
redeclare package Medium = Medium,
m_flow_nominal=m_flow_nominal,
dp_nominal=6000,
Q_flow_nominal=3000,
energyDynamics=Modelica.Fluid.Types.Dynamics.SteadyState)
;
Annex60.Fluid.Sensors.TemperatureTwoPort senTem1(
redeclare package Medium = Medium,
m_flow_nominal=m_flow_nominal) ;
Modelica.Blocks.Sources.TimeTable TSet(table=[0, 273.15 + 20; 120, 273.15
+20; 120, 273.15 + 30; 1200, 273.15 + 30])
;
Annex60.Controls.Continuous.LimPID con1(
controllerType=Modelica.Blocks.Types.SimpleController.PI,
Td=1,
k=1,
Ti=10)
;
Annex60.Fluid.HeatExchangers.HeaterCooler_u heaDyn(
redeclare package Medium = Medium,
m_flow_nominal=m_flow_nominal,
dp_nominal=6000,
Q_flow_nominal=3000,
energyDynamics=Modelica.Fluid.Types.Dynamics.SteadyStateInitial)
;
Annex60.Fluid.Sensors.TemperatureTwoPort senTem2(
redeclare package Medium = Medium,
m_flow_nominal=m_flow_nominal) ;
Annex60.Controls.Continuous.LimPID con2(
controllerType=Modelica.Blocks.Types.SimpleController.PI,
Td=1,
Ti=10,
k=0.1)
;
Annex60.Fluid.Sources.MassFlowSource_T sou(
redeclare package Medium = Medium,
use_T_in=false,
nPorts=2,
m_flow=2*m_flow_nominal,
T=293.15) ;
equation
connect(senTem1.T, con1.u_m);
connect(TSet.y, con1.u_s);
connect(con1.y, heaSte.u);
connect(heaSte.port_b, senTem1.port_a);
connect(senTem2.T, con2.u_m);
connect(TSet.y, con2.u_s);
connect(con2.y, heaDyn.u);
connect(heaDyn.port_b, senTem2.port_a);
connect(heaSte.port_a, sou.ports[1]);
connect(sou.ports[2], heaDyn.port_a);
connect(senTem2.port_b, sin.ports[1]);
connect(senTem1.port_b, sin.ports[2]);
end HeaterCooler_u;
http://iea-annex60.org