modelEmbeddedPipe

Embedded pipe model based on EN 15377 and (Koschenz, 2000). The water capacity is lumped to TOut

Extends from IDEAS.Fluid.Interfaces.LumpedVolumeDeclarations (Declarations for lumped volumes), IDEAS.Fluid.Interfaces.PartialTwoPortInterface (Partial model with two ports and declaration of quantities that are used by many models), IDEAS.Fluid.Interfaces.TwoPortFlowResistanceParameters (Parameters for flow resistance for models with two ports).

Information

Dynamic model of an embedded pipe for a concrete core activation. This model is based on (Koschenz, 2000). In addition the model provides the options to simulate the concrete core activation as if there were multiple parallel branches. This affects the pressure drop calculation and also the thermal calculations.

Assumptions and limitations

The implementation of Koschenz mentions that a minimum discretization (i.e. using nDiscr) is required to avoid violation of the second law of thermodynamics. The model explicitly enforces the second law even for nDiscr=1 by upper bounding the heat flow rate such that this minimum discretization does not apply to our implementation. The parameter nDiscr thus only affects the results at larger flow rates. The example IDEAS.Fluid.HeatExchangers.RadiantSlab.Examples.EmbeddedPipeNDiscr provides an indication of the sensitivity of the results to the value of nDiscr.

The embeddedPipe model is designed to be used together with an IDEAS.Buildings.Components.InternalWall. When nDiscr>1, the wall/floor should also be discretized to be physically correct, although the discretizations can also be connected to the same wall/floor, which gives a reasonable approximation as illustrated by the example IDEAS.Fluid.HeatExchangers.RadiantSlab.Examples.EmbeddedPipeNDiscr.

R_x_val represents thermal resistance between the outer pipe wall temperature and the (fictive) uniform TABS temperature. For small concrete/screed layer thicknesses (di ≤ 0.3·T, with T the distance between the pipes), a correction factor needs to be taken into account (see Eq.4-4 and 4-24 in (Koschenz, 2000)).

R_w_val represents the convective thermal resistance between the embedded pipe wall and the water flowing in that pipe. Depending on the Reynolds number rey, laminar or turbulent flow is assumed. For turbulent flow, the convective heat transfer coefficient is determined using a correlation (Eq.4-37) from (Koschenz, 2000). For laminar flow, the convective heat transfer coefficent is calculated using a constant Nusselt number of 4.

Typical use and important parameters

Following parameters need to be set:

  • RadSlaCha is a record with all the parameters of the geometry, materials, and even number of discretization layers in the nakedTabs model.
  • mFlow_min is used to check the validity of the operating conditions and is by default half of the nominal mass flow rate.
  • A_floor is the surface area of (one side of) the radiant slab.
  • nDiscr can be used for discretizing the EmbeddedPipe along the flow direction. See above for a more detailed discussion.
  • nParCir can be used for calculating the pressure drops as if there were multiple EmbeddedPipes connected in parallel. The total mass flow rate is then split over multiple circuits and the pressure drop is calculated accordingly.
  • R_C is the thermal resistivity from the center of the TABS or floor heating system to the zones. Note that the upper and lower resistivities need to be calculated as if they were in parallel. This parameter has a default value based on RadSlaCha but it may be improved if necessary. The impact of the value of this parameter on the model performance is low except in cases of very low mass flow rates.

Options

By default dp_nominal is calculated by making an estimate of the total pipe length. This pressure drop can be an underestimation of the real pressure drop. The used pipe lengths can be changed in the Pressure drop tab. Parameter dp_nominal can be used to override the default calculation.

Validation

A limited verification has been performed in IDEAS.Fluid.HeatExchangers.RadiantSlab.Examples.EmbeddedPipeVerification.

References

EN 15377, Heating systems in buildings – Design of embedded water-based surface heating and cooling systems., 2008.

M. Koschenz and B. Lehmann, Thermoaktive Bauteilsysteme tabs. Dübendorf, Switzerland: EMPA Energyiesysteme/Haustechnik, 2000, ISBN: 9783905594195.

Transsolar, TRNSYS 16 - A TRaNsient SYstem Simulation program, User Manual. Volume 6: Multizone Building modeling with Type56 and TRNBuild. Madison, 2007.

Parameters

TypeNameDefaultDescription
IDEAS.Fluid.HeatExchangers.RadiantSlab.BaseClasses.RadiantSlabCharRadSlaCha
Modelica.Units.SI.LengthpipeDiaIntRadSlaCha.d_a - 2*RadSlaCha.s_rPipe internal diameter
Modelica.Units.SI.AreaA_floorTABS or floor heating surface area
IntegernDiscr1Number of series discretisations along the flow direction
RealnParCir1Number of parallel circuits in the tabs
Modelica.Units.SI.ThermalInsulanceR_r_valRadSlaCha.T*log(RadSlaCha.d_a/pipeDiaInt)/(2*Modelica.Constants.pi*RadSlaCha.lambda_r)Fixed thermal resistance value of thermal conduction through pipe wall * surface of floor between 2 pipes (see RadSlaCha documentation)
Modelica.Units.SI.ThermalInsulanceR_x_valRadSlaCha.T*(log(RadSlaCha.T/(3.14*RadSlaCha.d_a)) + corr)/(2*Modelica.Constants.pi*RadSlaCha.lambda_b)Fixed thermal resistance value of thermal conduction from pipe wall to layer
Realcorrif RadSlaCha.S_1/RadSlaCha.T > 0.3 and RadSlaCha.S_2/RadSlaCha.T > 0.3 and RadSlaCha.d_a/RadSlaCha.T < 0.2 then 0 else sum(((RadSlaCha.alp1/RadSlaCha.lambda_b*RadSlaCha.T - 2*Modelica.Constants.pi*s)/(RadSlaCha.alp1/RadSlaCha.lambda_b*RadSlaCha.T + 2*Modelica.Constants.pi*s)*exp(-4*Modelica.Constants.pi*s/RadSlaCha.T*RadSlaCha.S_2) + (RadSlaCha.alp2/RadSlaCha.lambda_b*RadSlaCha.T - 2*Modelica.Constants.pi*s)/(RadSlaCha.alp2/RadSlaCha.lambda_b*RadSlaCha.T + 2*Modelica.Constants.pi*s)*exp(-4*Modelica.Constants.pi*s/RadSlaCha.T*RadSlaCha.S_1) - 2*exp(-4*Modelica.Constants.pi*s/RadSlaCha.T*(RadSlaCha.S_1 + RadSlaCha.S_2)))/(exp(-4*Modelica.Constants.pi*s/RadSlaCha.T*(RadSlaCha.S_1 + RadSlaCha.S_2)) - (RadSlaCha.alp1/RadSlaCha.lambda_b*RadSlaCha.T + 2*Modelica.Constants.pi*s)/(RadSlaCha.alp1/RadSlaCha.lambda_b*RadSlaCha.T - 2*Modelica.Constants.pi*s)*(RadSlaCha.alp2/RadSlaCha.lambda_b*RadSlaCha.T + 2*Modelica.Constants.pi*s)/(RadSlaCha.alp2/RadSlaCha.lambda_b*RadSlaCha.T - 2*Modelica.Constants.pi*s)) for s in 1:10)Correction factor if the screed thickness(es) are too small compared to the pipe spacing and/or the pipe diameter is too large compared to the pipe spacing (Koschenz, 2000, Eq.4-24). The summation goes to 10 instead of infinity as this does not improve the accuracy.
Dynamics › Conservation equations
Modelica.Fluid.Types.DynamicsenergyDynamics (from LumpedVolumeDeclarations)Modelica.Fluid.Types.Dynamics.DynamicFreeInitialType of energy balance: dynamic (3 initialization options) or steady state
Modelica.Fluid.Types.DynamicssubstanceDynamics (from LumpedVolumeDeclarations)energyDynamicsType of independent mass fraction balance: dynamic (3 initialization options) or steady state
Modelica.Fluid.Types.DynamicstraceDynamics (from LumpedVolumeDeclarations)energyDynamicsType of trace substance balance: dynamic (3 initialization options) or steady state
Advanced › Dynamics
Modelica.Fluid.Types.DynamicsmassDynamics (from LumpedVolumeDeclarations)energyDynamicsType of mass balance: dynamic (3 initialization options) or steady state, must be steady state if energyDynamics is steady state
Initialization
Medium.AbsolutePressurep_start (from LumpedVolumeDeclarations)Medium.p_defaultStart value of pressure
Medium.TemperatureT_start (from LumpedVolumeDeclarations)Medium.T_defaultStart value of temperature
Medium.MassFraction[Medium.nX]X_start (from LumpedVolumeDeclarations)Medium.X_defaultStart value of mass fractions m_i/m
Medium.ExtraProperty[Medium.nC]C_start (from LumpedVolumeDeclarations)fill(0, Medium.nC)Start value of trace substances
Medium.ExtraProperty[Medium.nC]C_nominal (from LumpedVolumeDeclarations)fill(1E-2, Medium.nC)Nominal value of trace substances. (Set to typical order of magnitude.)
Dynamics
RealmSenFac (from LumpedVolumeDeclarations)1Factor for scaling the sensible thermal mass of the volume
Assumptions
BooleanallowFlowReversal (from PartialTwoPort)true= false to simplify equations, assuming, but not enforcing, no flow reversal
Nominal condition
Modelica.Units.SI.MassFlowRatem_flow_nominal (from PartialTwoPortInterface)Nominal mass flow rate
Modelica.Units.SI.PressureDifferencedp_nominal (from TwoPortFlowResistanceParameters)Pressure difference
Modelica.Units.SI.MassFlowRatem_flowMinm_flow_nominal*0.5Minimal mass flow rate when in operation - used for validity check
Advanced
Modelica.Units.SI.MassFlowRatem_flow_small (from PartialTwoPortInterface)1E-4*abs(m_flow_nominal)Small mass flow rate for regularization of zero flow
BooleanhomotopyInitializationtrue= true, use homotopy method
Booleanlinearizedfalse= true, use linear relation between m_flow and dp for any mass flow rate
Advanced › Diagnostics
Booleanshow_T (from PartialTwoPortInterface)false= true, if actual temperature at port is computed
Flow resistance
BooleancomputeFlowResistance (from TwoPortFlowResistanceParameters)true=true, compute flow resistance. Set to false to assume no friction
Booleanfrom_dp (from TwoPortFlowResistanceParameters)false= true, use m_flow = f(dp) else dp = f(m_flow)
BooleanlinearizeFlowResistance (from TwoPortFlowResistanceParameters)false= true, use linear relation between m_flow and dp for any flow rate
RealdeltaM (from TwoPortFlowResistanceParameters)0.1Fraction of nominal flow rate where flow transitions to laminar
Modelica.Units.SI.Lengthroughness2.5e-5Absolute roughness of pipe, with a default for a smooth steel pipe
Modelica.Units.SI.LengthL_floorA_floor^(1/2)Floor length, along the pipe direction
RealN_pipesA_floor/L_floor/RadSlaCha.T - 1Number of parallel pipes in the slab
Modelica.Units.SI.LengthpipeBendEqLen2*(N_pipes - 1)*(2.267*RadSlaCha.T/2/pipeDiaInt + 6.18)*pipeDiaIntPipe bends equivalent length, default according to Fox and McDonald (chapter 8.7, twice the linearized losses of a 90 degree bend)
Modelica.Units.SI.LengthpipeEqLenpipeBendEqLen + (L_floor - 2*RadSlaCha.T)*N_pipesTotal pipe equivalent length, default assuming 180 dg turns starting at RadSlaCha.T from the end of the slab
Thermal
Modelica.Units.SI.ThermalInsulanceR_c1/(RadSlaCha.lambda_b/RadSlaCha.S_1 + RadSlaCha.lambda_b/RadSlaCha.S_2)Specific thermal resistivity of (parallel) slabs connected to top and bottom of TABS / floor heating system

Connectors

TypeNameDefaultDescription
Modelica.Fluid.Interfaces.FluidPort_aport_a (from PartialTwoPort)Fluid connector a (positive design flow direction is from port_a to port_b)
Modelica.Fluid.Interfaces.FluidPort_bport_b (from PartialTwoPort)Fluid connector b (positive design flow direction is from port_a to port_b)
Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_bheatPortEmbPort to the core of a floor heating/concrete activation
Modelica.Blocks.Interfaces.RealOutputQTotTotal thermal power going into the heat port

Components

TypeNameDefaultDescription
Modelica.Units.SI.MassFlowRatem_flow (from PartialTwoPortInterface)port_a.m_flowMass flow rate from port_a to port_b (m_flow > 0 is design flow direction)
Modelica.Units.SI.PressureDifferencedp (from PartialTwoPortInterface)port_a.p - port_b.pPressure difference between port_a and port_b
Medium.ThermodynamicStatesta_a (from PartialTwoPortInterface)if allowFlowReversal then Medium.setState_phX(port_a.p, noEvent(actualStream(port_a.h_outflow)), noEvent(actualStream(port_a.Xi_outflow))) else Medium.setState_phX(port_a.p, noEvent(inStream(port_a.h_outflow)), noEvent(inStream(port_a.Xi_outflow)))Medium properties in port_a
Medium.ThermodynamicStatesta_b (from PartialTwoPortInterface)if allowFlowReversal then Medium.setState_phX(port_b.p, noEvent(actualStream(port_b.h_outflow)), noEvent(actualStream(port_b.Xi_outflow))) else Medium.setState_phX(port_b.p, noEvent(port_b.h_outflow), noEvent(port_b.Xi_outflow))Medium properties in port_b
Modelica.Units.SI.TemperatureTincat(1, {senTemIn.T}, vol[1:nDiscr - 1].heatPort.T)
Modelica.Units.SI.PowerQThermal power going into the TABS / floor heating system
Modelica.Units.SI.ThermalInsulanceR_w_valIDEAS.Utilities.Math.Functions.spliceFunction(x = rey - (reyHi + reyLo)/2, pos = RadSlaCha.T^0.13/8/Modelica.Constants.pi*abs((pipeDiaInt/(m_flowSpLimit*L_r)))^0.87, neg = RadSlaCha.T/(4*Medium.thermalConductivity(sta_default)*Modelica.Constants.pi), deltax = (reyHi - reyLo)/2)Flow dependent resistance value of convective heat transfer inside pipe for both turbulent and laminar heat transfer.
Modelica.Units.SI.ThermalInsulanceR_tTotal equivalent specific resistivity as defined by Koschenz in eqn 4-59
Modelica.Units.SI.ThermalConductanceG_tEquivalent thermal conductance
Modelica.Units.SI.ThermalConductanceG_maxMaximum thermal conductance based on mass flow rate
Modelica.Units.SI.ReynoldsNumberreym_flow/nParCir/A_pipe*pipeDiaInt/mu_defaultReynolds number
IDEAS.Fluid.MixingVolumes.MixingVolumevol
FixedResistances.ParallelPressureDropres
Modelica.Thermal.HeatTransfer.Sources.PrescribedHeatFlowheatFlowWaterHeat flow rate that is extracted from the fluid
Modelica.Thermal.HeatTransfer.Sources.PrescribedHeatFlowheatFlowSolidHeat flow rate that is injected in the solid material
Modelica.Blocks.Math.Gainnegate
Modelica.Blocks.Sources.RealExpressionQ_tabs
Modelica.Blocks.Math.SumsumQTabsBlock that sums the volume heat flow rates
Sensors.TemperatureTwoPortsenTemInSensor for inlet temperature

Revisions

  • August 12, 2025, by Jelger Jansen:
    Fix correction term and wrong asserts and update documentation.
    See #1381.
  • March 20, 2020 by Filip Jorissen:
    Fixed inconsistency in the mass computation of the MixingVolume. See #1116.
  • January 31, 2020 by Filip Jorissen:
    Propagated allowFlowReversal in TemperatureTwoPort sensor. See #1105.
  • October 19, 2019 by Filip Jorissen:
    Removed discretization assert since we limit the heat flow rate to physically realistic values already using a limit on G_t. Revised documentation. See #863.
  • October 18, 2019 by Filip Jorissen:
    Using TemperatureTwoPort sensor. See #1081.
  • October 13, 2019 by Filip Jorissen:
    Bugfix for division by zero when dp_nominal=0, See #1031.
  • August 14, 2019 by Iago Cupeiro:
    Added output that computes the total TABS heat flow of the EmbeddedPipe.
  • April 16, 2019 by Filip Jorissen:
    Added checks for flow reversal. See #1006.
  • April 16, 2019 by Filip Jorissen:
    Removed computeFlowResistance=false since this parameter was hidden in the advanced tab and this setting can easily lead to singularities. See #1014.
  • June 21, 2018 by Filip Jorissen:
    Set final alpha=0 in prescribedHeatFlow to avoid large algebraic loops in specific cases. See #852.
  • April 26, 2017 by Filip Jorissen:
    Removed useSimplifiedRt parameter since this leads to a violation of the second law for small flow rates. See #717.
  • November, 2015, by Filip Jorissen:
    Revised implementation for small flow rates.
  • 2015, by Filip Jorissen:
    Revised implementation
  • March, 2014, by Filip Jorissen:
    IDEAS baseclasses
  • May, 2013, by Roel De Coninck:
    Documentation
  • April, 2012, by Roel De Coninck:
    Rebasing on common Partial_Emission
  • 2011, by Roel De Coninck: First version and validation