Name | Description |
---|---|
UsersGuide | User's Guide |
ConductorSingleLayer | Model for single layer heat conductance |
ConductorMultiLayer | Model for heat conductance through a solid with multiple material layers |
Convection | Model for a convective heat transfer |
ConstructionOpaque | Model for an opaque construction such as a wall, floor or ceiling |
WindowsBeta | Package with models for windows |
Radiosity | Package with models for radiosity transfer |
Data | Data for heat transfer models |
Functions | Functions for heat transfer package |
Examples | Collection of models that illustrate model use and test models |
BaseClasses | Package with base classes for HeatTransfer package |
Interfaces | Package with interfaces for heat transfer models |
If the material is a record that extends
Buildings.HeatTransfer.Data.Solids and its
specific heat capacity (as defined by the record material.c
)
is non-zero, then this model computes transient heat conduction, i.e., it
computes a numerical approximation to the solution of the heat equation
ρ c (∂ T(u,t) ⁄ ∂t) = k (∂² T(u,t) ⁄ ∂u²),
where ρ is the mass density, c is the specific heat capacity per unit mass, T is the temperature at location u and time t and k is the heat conductivity. At the locations u=0 and u=x, where x is the material thickness, the temperature and heat flow rate is equal to the temperature and heat flow rate of the heat heat ports.
To spatially discretize the heat equation, the construction is
divided into compartments with material.nSta ≥ 1
state variables.
The state variables are connected to each other through thermal conductors.
There is also a thermal conductor
between the surfaces and the outermost state variables. Thus, to obtain
the surface temperature, use port_a.T
(or port_b.T
)
and not the variable T[1]
.
Each compartment has the same material properties.
To build multi-layer constructions,
use
Buildings.HeatTransfer.ConductorMultiLayer instead of this model.
If material.c=0
, or if the material extends
Buildings.HeatTransfer.Data.Resistances,
then steady-state heat conduction is computed. In this situation, the heat
flow between its heat ports is
Q = A k ⁄ x (Ta-Tb),
where A is the cross sectional area, x is the layer thickness, Ta is the temperature at port a and Tb is the temperature at port b.
Extends from Buildings.HeatTransfer.BaseClasses.PartialConductor (Model for heat conductor).
Type | Name | Default | Description |
---|---|---|---|
Area | A | Heat transfer area [m2] | |
ThermalResistance | R | if (material.R == 0) then ma... | Thermal resistance of construction [K/W] |
Material | material | redeclare parameter Data.Bas... | Material from Data.Solids or Data.Resistances |
Initialization | |||
Boolean | steadyStateInitial | false | =true initializes dT(0)/dt=0, false initializes T(0) at fixed temperature using T_a_start and T_b_start |
Temperature | T_a_start | 293.15 | Initial temperature at port_a, used if steadyStateInitial = false [K] |
Temperature | T_b_start | 293.15 | Initial temperature at port_b, used if steadyStateInitial = false [K] |
Type | Name | Description |
---|---|---|
HeatPort_a | port_a | Heat port at surface a |
HeatPort_b | port_b | Heat port at surface b |
model ConductorSingleLayer "Model for single layer heat conductance" extends Buildings.HeatTransfer.BaseClasses.PartialConductor( final R=if (material.R == 0) then material.x/material.k/A else material.R/A); // if material.R == 0, then the material specifies material.k, and this model specifies x // For resistances, material.k need not be specified, and hence we use material.R // The value T[:].start is used by the solver when finding initial states // that satisfy dT/dt=0, which requires solving a system of nonlinear equations // if the convection coefficient is a function of temperature. Modelica.SIunits.Temperature T[nSta](start= {T_a_start+(T_b_start-T_a_start) * UA * sum(1/(if (k==1 or k==nSta+1) then UAnSta2 else UAnSta) for k in 1:i) for i in 1:nSta}) "Temperature at the states"; Modelica.SIunits.HeatFlowRate Q_flow[nSta+1] "Heat flow rate from state i to i+1"; replaceable parameter Data.BaseClasses.Material material "Material from Data.Solids or Data.Resistances"; parameter Boolean steadyStateInitial=false "=true initializes dT(0)/dt=0, false initializes T(0) at fixed temperature using T_a_start and T_b_start"; parameter Modelica.SIunits.Temperature T_a_start=293.15 "Initial temperature at port_a, used if steadyStateInitial = false"; parameter Modelica.SIunits.Temperature T_b_start=293.15 "Initial temperature at port_b, used if steadyStateInitial = false"; protected parameter Modelica.SIunits.HeatCapacity C = A*material.x*material.d*material.c/material.nSta "Heat capacity associated with the temperature state"; // nodes at surface have only 1/2 the layer thickness // final parameter Modelica.SIunits.ThermalConductance G[nSta+1](each fixed=false) // "Thermal conductance of layer between the states"; Modelica.SIunits.TemperatureSlope der_T[nSta] "Time derivative of temperature (= der(T))"; final parameter Integer nSta(min=1) = material.nSta "Number of state variables"; final parameter Modelica.SIunits.ThermalConductance UAnSta = UA*nSta "Thermal conductance between nodes"; final parameter Modelica.SIunits.ThermalConductance UAnSta2 = 2*UAnSta "Thermal conductance between nodes and surface boundary"; initial equation // G={UA*nSta * (if (i==1 or i==nSta+1) then 2 else 1) for i in 1:nSta+1}; // The initialization is only done for materials that store energy. if not material.steadyState then if steadyStateInitial then der_T = zeros(nSta); else for i in 1:nSta loop T[i] = T_a_start+(T_b_start-T_a_start) * UA * sum(1/(if (k==1 or k==nSta+1) then UAnSta2 else UAnSta) for k in 1:i); end for; end if; end if; equation port_a.Q_flow = +Q_flow[1]; port_b.Q_flow = -Q_flow[nSta+1]; Q_flow[1] = UAnSta2 * (port_a.T-T[1]); Q_flow[nSta+1] = UAnSta2 * (T[nSta] -port_b.T); for i in 2:nSta loop // Q_flow[i] is heat flowing from (i-1) to (i) Q_flow[i] = UAnSta * (T[i-1]-T[i]); end for; if material.steadyState then der_T = zeros(nSta); for i in 2:nSta+1 loop Q_flow[i] = Q_flow[1]; end for; else for i in 1:nSta loop der(T[i]) = (Q_flow[i]-Q_flow[i+1])/C; der_T[i] = der(T[i]); end for; end if;end ConductorSingleLayer;
To obtain the surface temperature of the construction, use port_a.T
(or port_b.T
)
and not the variable T[1]
because there is a thermal resistance between the surface
and the temperature state.
Extends from Buildings.HeatTransfer.BaseClasses.PartialConductor (Model for heat conductor), Buildings.HeatTransfer.BaseClasses.PartialConstruction (Partial model for constructions with and without convective heat transfer coefficient).
Type | Name | Default | Description |
---|---|---|---|
Area | A | Heat transfer area [m2] | |
ThermalResistance | R | sum(lay[:].R) | Thermal resistance of construction [K/W] |
Generic | layers | redeclare parameter Building... | Construction definition from Data.OpaqueConstructions |
Initialization | |||
Boolean | steadyStateInitial | false | =true initializes dT(0)/dt=0, false initializes T(0) at fixed temperature using T_a_start and T_b_start |
Temperature | T_a_start | 293.15 | Initial temperature at port_a, used if steadyStateInitial = false [K] |
Temperature | T_b_start | 293.15 | Initial temperature at port_b, used if steadyStateInitial = false [K] |
Type | Name | Description |
---|---|---|
HeatPort_a | port_a | Heat port at surface a |
HeatPort_b | port_b | Heat port at surface b |
model ConductorMultiLayer "Model for heat conductance through a solid with multiple material layers" extends Buildings.HeatTransfer.BaseClasses.PartialConductor( final R=sum(lay[:].R)); Modelica.SIunits.Temperature T[sum(nSta)] "Temperature at the states"; Modelica.SIunits.HeatFlowRate Q_flow[sum(nSta)+nLay] "Heat flow rate from state i to i+1"; extends Buildings.HeatTransfer.BaseClasses.PartialConstruction;protected ConductorSingleLayer[nLay] lay( each final A=A, material = layers.material, T_a_start = _T_a_start, T_b_start = _T_b_start, each steadyStateInitial = steadyStateInitial) "Material layer"; protected parameter Modelica.SIunits.Temperature _T_a_start[nLay](fixed=false) "Initial temperature at port_a of respective layer, used if steadyStateInitial = false"; parameter Modelica.SIunits.Temperature _T_b_start[nLay](fixed=false) "Initial temperature at port_b of respective layer, used if steadyStateInitial = false"; initial equation for i in 1:nLay loop _T_a_start[i] = T_b_start+(T_a_start-T_b_start) * 1/R * sum(lay[k].R for k in i:nLay); _T_b_start[i] = T_a_start+(T_b_start-T_a_start) * 1/R * sum(lay[k].R for k in 1:i); end for; equation // This section assigns the temperatures and heat flow rates of the layer models to // an array that makes plotting the results easier. for i in 1:nLay loop for j in 1:nSta[i] loop T[sum(nSta[k] for k in 1:(i-1)) +j] = lay[i].T[j]; end for; for j in 1:nSta[i]+1 loop Q_flow[sum(nSta[k] for k in 1:i-1)+(i-1)+j] = lay[i].Q_flow[j]; end for; end for;connect(port_a, lay[1].port_a); for i in 1:nLay-1 loopconnect(lay[i].port_b, lay[i+1].port_a); end for;connect(lay[nLay].port_b, port_b); end ConductorMultiLayer;
Extends from Buildings.BaseClasses.BaseIcon (Base icon).
Type | Name | Default | Description |
---|---|---|---|
ConvectionModel | conMod | Buildings.RoomsBeta.Types.Co... | Convective heat transfer model |
CoefficientOfHeatTransfer | hFixed | 3 | Constant convection coefficient [W/(m2.K)] |
Angle | til | Surface tilt [rad] | |
Area | A | Heat transfer area [m2] |
Type | Name | Description |
---|---|---|
HeatPort_a | solid | |
HeatPort_b | fluid |
model Convection "Model for a convective heat transfer" extends Buildings.BaseClasses.BaseIcon; parameter Buildings.RoomsBeta.Types.ConvectionModel conMod= Buildings.RoomsBeta.Types.ConvectionModel.Fixed "Convective heat transfer model"; parameter Modelica.SIunits.CoefficientOfHeatTransfer hFixed=3 "Constant convection coefficient"; parameter Modelica.SIunits.Angle til(displayUnit="deg") "Surface tilt"; parameter Modelica.SIunits.Area A "Heat transfer area"; Modelica.SIunits.HeatFlux q_flow "Convective heat flux from solid -> fluid"; Modelica.SIunits.HeatFlowRate Q_flow "Heat flow rate from solid -> fluid"; Modelica.SIunits.TemperatureDifference dT(start=0) "= solid.T - fluid.T";Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a solid; Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_b fluid; protected final parameter Real cosTil=Modelica.Math.cos(til) "Cosine of window tilt"; final parameter Real sinTil=Modelica.Math.sin(til) "Sine of window tilt"; final parameter Boolean isCeiling = abs(sinTil) < 10E-10 and cosTil > 0 "Flag, true if the surface is a ceiling"; final parameter Boolean isFloor = abs(sinTil) < 10E-10 and cosTil < 0 "Flag, true if the surface is a floor"; equation dT = solid.T - fluid.T; solid.Q_flow = Q_flow; fluid.Q_flow = -Q_flow; if (conMod == Buildings.RoomsBeta.Types.ConvectionModel.Fixed) then q_flow = hFixed * dT; else // Even if hCon is a step function with a step at zero, // the product hCon*dT is differentiable at zero with // a continuous first derivative if isCeiling then q_flow = Buildings.HeatTransfer.Functions.ConvectiveHeatFlux.ceiling(dT=dT); elseif isFloor then q_flow = Buildings.HeatTransfer.Functions.ConvectiveHeatFlux.floor(dT=dT); else q_flow = Buildings.HeatTransfer.Functions.ConvectiveHeatFlux.wall(dT=dT); end if; end if; Q_flow = A*q_flow;end Convection;
The model has a parameter til
that is used as the surface tilt.
Because in the room model
Buildings.RoomsBeta, the surface a
faces the exterior and
the surface b
faces the room air, the parameter til
is used as follows:
Value of parameter til |
Surface a | Surface b | |
---|---|---|---|
Buildings.RoomsBeta.Types.Tilt.Ceiling |
floor (facing the exterior) | ceiling (facing the room) | |
Buildings.RoomsBeta.Types.Tilt.Floor |
ceiling (facing the exterior) | floor (facing the room) |
Type | Name | Default | Description |
---|---|---|---|
Area | A | Heat transfer area [m2] | |
Generic | layers | redeclare parameter Building... | Construction definition from Data.OpaqueConstructions |
ConvectionModel | conMod | Buildings.RoomsBeta.Types.Co... | Convective heat transfer model |
CoefficientOfHeatTransfer | hFixed | 3 | Constant convection coefficient [W/(m2.K)] |
Angle | til | Surface tilt [rad] | |
Initialization | |||
Boolean | steadyStateInitial | false | =true initializes dT(0)/dt=0, false initializes T(0) at fixed temperature using T_a_start and T_b_start |
Temperature | T_a_start | 293.15 | Initial temperature at port_a, used if steadyStateInitial = false [K] |
Temperature | T_b_start | 293.15 | Initial temperature at port_b, used if steadyStateInitial = false [K] |
Advanced | |||
CoefficientOfHeatTransfer | hCon_a_start | 3 | Convective heat transfer coefficient on side a, used to compute initial condition [W/(m2.K)] |
CoefficientOfHeatTransfer | hCon_b_start | hCon_a_start | Convective heat transfer coefficient on side b, used to compute initial condition [W/(m2.K)] |
Type | Name | Description |
---|---|---|
HeatPort_a | port_a | Heat port at outside of air boundary layer near surface a |
HeatPort_b | port_b | Heat port at outside of air boundary layer near surface b |
HeatPort_a | surf_a | Heat port at surface a |
HeatPort_b | surf_b | Heat port at surface b |
model ConstructionOpaque "Model for an opaque construction such as a wall, floor or ceiling" extends Buildings.BaseClasses.BaseIcon; extends Buildings.HeatTransfer.BaseClasses.PartialConstruction; parameter Buildings.RoomsBeta.Types.ConvectionModel conMod= Buildings.RoomsBeta.Types.ConvectionModel.Fixed "Convective heat transfer model"; parameter Modelica.SIunits.CoefficientOfHeatTransfer hFixed=3 "Constant convection coefficient"; parameter Modelica.SIunits.Angle til(displayUnit="deg") "Surface tilt"; parameter Modelica.SIunits.Area A "Heat transfer area"; final parameter Modelica.SIunits.CoefficientOfHeatTransfer U = UA/A "U-value (without surface heat transfer coefficients)"; final parameter Modelica.SIunits.ThermalConductance UA = 1/R "Thermal conductance of construction (without surface heat transfer coefficients)"; final parameter Modelica.SIunits.ThermalResistance R = solid.R + 1/A/hCon_a_start + 1/A/hCon_b_start "Thermal resistance of construction";ConductorMultiLayer solid( final A=A, final layers=layers, final steadyStateInitial=steadyStateInitial, T_a_start= T_b_start + (T_a_start - T_b_start)/R/(A*hCon_a_start), T_b_start= T_a_start + (T_b_start - T_a_start)/R/(A*hCon_b_start)) "Model for opaque construction"; Modelica.SIunits.TemperatureDifference dT "port_a.T - port_b.T";Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a port_a "Heat port at outside of air boundary layer near surface a"; Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_b port_b "Heat port at outside of air boundary layer near surface b"; Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a surf_a "Heat port at surface a"; Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_b surf_b "Heat port at surface b"; Convection con_a(final A=A, final conMod=conMod, final hFixed=hFixed, final til=Modelica.Constants.pi - til) "Convective heat transfer at surface a"; Convection con_b(final A=A, final conMod=conMod, final hFixed=hFixed, final til=til) "Convective heat transfer at surface b"; parameter Modelica.SIunits.CoefficientOfHeatTransfer hCon_a_start=3 "Convective heat transfer coefficient on side a, used to compute initial condition"; parameter Modelica.SIunits.CoefficientOfHeatTransfer hCon_b_start=hCon_a_start "Convective heat transfer coefficient on side b, used to compute initial condition"; equation dT = port_a.T - port_b.T;connect(port_a, con_a.fluid); connect(con_a.solid, solid.port_a); connect(solid.port_b, con_b.solid); connect(con_b.fluid, port_b); connect(solid.port_a, surf_a); connect(solid.port_b, surf_b); end ConstructionOpaque;