| Name | Description |
|---|---|
| Dynamic radiator for space heating | |
| Collection of models that illustrate model use and test models |
Buildings.Fluid.HeatExchangers.Radiators.RadiatorEN442_2
However, to allow for varying mass flow rates, the transferred heat is computed using a discretization along the water flow path, and heat is exchanged between each compartment and a uniform room air and radiation temperature. This discretization is different from the computation in EN 442-2, which may give water outlet temperatures that are below the room temperature at low mass flow rates. Also, rather than using only one room temperature, this model uses a room air and room radiation temperature.
The parameter energyDynamics (in the Assumptions tab), determines whether the model computes the dynamic or the steady-state response. For the transient response, heat storage is computed using a finite volume approach for the water and the metal mass, which are both assumed to be at the same temperature.
The default parameters are for a flat plate radiator without fins, with one plate of water carying fluid, and a height of 0.42 meters.
Extends from Fluid.Interfaces.PartialStaticTwoPortInterface (Partial model transporting fluid between two ports without storing mass or energy).
| Type | Name | Default | Description |
|---|---|---|---|
| replaceable package Medium | PartialMedium | Medium in the component | |
| Power | Q_flow_nominal | Nominal heating power [W] | |
| Real | fraRad | 0.35 | Fraction radiant heat transfer |
| TemperatureDifference | dT_nominal | 50 | Nominal temperature difference (between water and air) [K] |
| Real | n | 1.24 | Exponent for heat transfer |
| Nominal condition | |||
| MassFlowRate | m_flow_nominal | Nominal mass flow rate [kg/s] | |
| Initialization | |||
| MassFlowRate | m_flow.start | 0 | Mass flow rate from port_a to port_b (m_flow > 0 is design flow direction) [kg/s] |
| Pressure | dp.start | 0 | Pressure difference between port_a and port_b [Pa] |
| Assumptions | |||
| Boolean | allowFlowReversal | system.allowFlowReversal | = true to allow flow reversal, false restricts to design direction (port_a -> port_b) |
| Dynamics | |||
| Integer | nEle | 5 | Number of elements used in the discretization |
| Dynamics | energyDynamics | system.energyDynamics | Formulation of energy balance |
| Volume | VWat | 5.8E-6*Q_flow_nominal | Water volume of radiator [m3] |
| Mass | mDry | 0.0263*Q_flow_nominal | Dry mass of radiator that will be lumped to water heat capacity [kg] |
| Advanced | |||
| MassFlowRate | m_flow_small | 1E-4*m_flow_nominal | Small mass flow rate for regularization of zero flow [kg/s] |
| TemperatureDifference | deltaT | 0.1 | Temperature difference used for smoothing of heat transfer coefficient [K] |
| Diagnostics | |||
| Boolean | show_V_flow | false | = true, if volume flow rate at inflowing port is computed |
| Boolean | show_T | false | = true, if actual temperature at port is computed (may lead to events) |
| Initialization | |||
| AbsolutePressure | p_start | system.p_start | Start value of pressure [Pa] |
| Boolean | use_T_start | true | = true, use T_start, otherwise h_start |
| Temperature | T_start | if use_T_start then system.T... | Start value of temperature [K] |
| SpecificEnthalpy | h_start | if use_T_start then Medium.s... | Start value of specific enthalpy [J/kg] |
| 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 |
| 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) |
| HeatPort_a | heatPortCon | Heat port for convective heat transfer with room air temperature |
| HeatPort_a | heatPortRad | Heat port for radiative heat transfer with room radiation temperature |
model RadiatorEN442_2 "Dynamic radiator for space heating"
extends Fluid.Interfaces.PartialStaticTwoPortInterface(
showDesignFlowDirection = false);
parameter Integer nEle(min=1) = 5
"Number of elements used in the discretization";
parameter Modelica.SIunits.Power Q_flow_nominal "Nominal heating power";
parameter Real fraRad(min=0, max=1) = 0.35 "Fraction radiant heat transfer";
// Assumptions
parameter Modelica.Fluid.Types.Dynamics energyDynamics=system.energyDynamics
"Formulation of energy balance";
// Initialization
parameter Medium.AbsolutePressure p_start = system.p_start
"Start value of pressure";
parameter Boolean use_T_start = true "= true, use T_start, otherwise h_start";
parameter Medium.Temperature T_start=
if use_T_start then system.T_start else Medium.temperature_phX(p_start,h_start,X_start)
"Start value of temperature";
parameter Medium.SpecificEnthalpy h_start=
if use_T_start then Medium.specificEnthalpy_pTX(p_start, T_start, X_start) else Medium.h_default
"Start value of specific enthalpy";
parameter Medium.MassFraction X_start[Medium.nX] = Medium.X_default
"Start value of mass fractions m_i/m";
parameter Medium.ExtraProperty C_start[Medium.nC](
quantity=Medium.extraPropertiesNames)=fill(0, Medium.nC)
"Start value of trace substances";
parameter Modelica.SIunits.TemperatureDifference dT_nominal(min=0) = 50
"Nominal temperature difference (between water and air)";
parameter Real n = 1.24 "Exponent for heat transfer";
parameter Modelica.SIunits.Volume VWat = 5.8E-6*Q_flow_nominal
"Water volume of radiator";
parameter Modelica.SIunits.Mass mDry = 0.0263*Q_flow_nominal if
not (energyDynamics == Modelica.Fluid.Types.Dynamics.SteadyState)
"Dry mass of radiator that will be lumped to water heat capacity";
Modelica.SIunits.HeatFlowRate QCon_flow
"Heat input into the water due to convective heat transfer with room air";
Modelica.SIunits.HeatFlowRate QRad_flow
"Heat input into the water due to radiative heat transfer with room";
Modelica.SIunits.HeatFlowRate Q_flow "Heat input into the water";
parameter Modelica.SIunits.TemperatureDifference deltaT=0.1
"Temperature difference used for smoothing of heat transfer coefficient";
public
Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a heatPortCon
"Heat port for convective heat transfer with room air temperature";
Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a heatPortRad
"Heat port for radiative heat transfer with room radiation temperature";
Modelica.Thermal.HeatTransfer.Components.HeatCapacitor[nEle] heaCapDry(
each C=500*mDry/nEle,
each T(start=T_start)) if not (energyDynamics == Modelica.Fluid.Types.Dynamics.SteadyState)
"heat capacity of radiator metal";
Modelica.Thermal.HeatTransfer.Sources.PrescribedHeatFlow[nEle] preHeaFloCon
"Heat input into radiator from convective heat transfer";
Modelica.Thermal.HeatTransfer.Sources.PrescribedHeatFlow[nEle] preHeaFloRad
"Heat input into radiator from radiative heat transfer";
Fluid.MixingVolumes.MixingVolume[nEle] vol(
redeclare each package Medium = Medium,
each nPorts = 2,
each V=VWat/nEle,
each final use_HeatTransfer=true,
redeclare each model HeatTransfer =
Modelica.Fluid.Vessels.BaseClasses.HeatTransfer.IdealHeatTransfer,
each final energyDynamics=energyDynamics,
each final massDynamics=energyDynamics,
each final p_start=p_start,
each final use_T_start=use_T_start,
each final T_start=T_start,
each final h_start=h_start,
each final X_start=X_start,
each final C_start=C_start) "Volume for fluid stream";
protected
Modelica.SIunits.TemperatureDifference[nEle] dTCon
"Temperature difference for convective heat transfer";
Modelica.SIunits.TemperatureDifference[nEle] dTRad
"Temperature difference for radiative heat transfer";
parameter Modelica.SIunits.ThermalConductance UA_nominaln = Q_flow_nominal /dT_nominal^n/nEle;
Modelica.SIunits.ThermalConductance[nEle] UACon
"Thermal conductance between radiator and room for convective heat transfer";
Modelica.SIunits.ThermalConductance[nEle] UARad
"Thermal conductance between radiator and room for radiative heat transfer";
equation
for i in 1:nEle loop
dTCon[i] = heatPortCon.T - vol[i].medium.T;
dTRad[i] = heatPortRad.T - vol[i].medium.T;
UACon[i] = (1-fraRad) * UA_nominaln *
Buildings.Utilities.Math.Functions.regNonZeroPower(x=dTCon[i], n=n-1, delta=deltaT);
UARad[i] = fraRad * UA_nominaln *
Buildings.Utilities.Math.Functions.regNonZeroPower(x=dTRad[i], n=n-1, delta=deltaT);
preHeaFloCon[i].Q_flow = UACon[i] * dTCon[i];
preHeaFloRad[i].Q_flow = UARad[i] * dTRad[i];
end for;
QCon_flow = sum(preHeaFloCon[i].Q_flow for i in 1:nEle);
QRad_flow = sum(preHeaFloRad[i].Q_flow for i in 1:nEle);
Q_flow = QCon_flow + QRad_flow;
heatPortCon.Q_flow = QCon_flow;
heatPortRad.Q_flow = QRad_flow;
connect(preHeaFloCon.port, vol.heatPort);
connect(preHeaFloRad.port, vol.heatPort);
connect(heaCapDry.port, vol.heatPort);
connect(port_a, vol[1].ports[1]);
connect(vol[nEle].ports[2], port_b);
for i in 1:nEle-1 loop
connect(vol[i].ports[2], vol[i+1].ports[1]);
end for;
end RadiatorEN442_2;