Buildings.HeatTransfer.Conduction

Package with models for heat conduction

Information


This package provides component models to compute heat conduction.

Extends from Modelica.Icons.VariantsPackage (Icon for package containing variants).

Package Content

NameDescription
Buildings.HeatTransfer.Conduction.SingleLayer SingleLayer Model for single layer heat conductance
Buildings.HeatTransfer.Conduction.MultiLayer MultiLayer Model for heat conductance through a solid with multiple material layers
Buildings.HeatTransfer.Conduction.BaseClasses BaseClasses Package with base classes for Buildings.HeatTransfer.Conduction


Buildings.HeatTransfer.Conduction.SingleLayer Buildings.HeatTransfer.Conduction.SingleLayer

Model for single layer heat conductance

Buildings.HeatTransfer.Conduction.SingleLayer

Information


This is a model of a heat conductor for a single material
that computes transient or steady-state heat conductions.

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.Conduction.MultiLayer 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.Conduction.BaseClasses.PartialConductor (Partial model for heat conductor).

Parameters

TypeNameDefaultDescription
AreaA Heat transfer area [m2]
ThermalResistanceRif (material.R == 0) then ma...Thermal resistance of construction [K/W]
Materialmaterialredeclare parameter Data.Bas...Material from Data.Solids or Data.Resistances
Initialization
BooleansteadyStateInitialfalse=true initializes dT(0)/dt=0, false initializes T(0) at fixed temperature using T_a_start and T_b_start
TemperatureT_a_start293.15Initial temperature at port_a, used if steadyStateInitial = false [K]
TemperatureT_b_start293.15Initial temperature at port_b, used if steadyStateInitial = false [K]

Connectors

TypeNameDescription
HeatPort_aport_aHeat port at surface a
HeatPort_bport_bHeat port at surface b

Modelica definition

model SingleLayer "Model for single layer heat conductance"
  extends Buildings.HeatTransfer.Conduction.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},
      each nominal = 300) "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];

    port_a.T-T[1] = Q_flow[1]/UAnSta2;
    T[nSta] -port_b.T = Q_flow[nSta+1]/UAnSta2;
    for i in 2:nSta loop
       // Q_flow[i] is heat flowing from (i-1) to (i)
       T[i-1]-T[i] = Q_flow[i]/UAnSta;
    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 SingleLayer;

Buildings.HeatTransfer.Conduction.MultiLayer Buildings.HeatTransfer.Conduction.MultiLayer

Model for heat conductance through a solid with multiple material layers

Buildings.HeatTransfer.Conduction.MultiLayer

Information


This is a model of a heat conductor with multiple material layers and energy storage.
The construction has at least one material layer, and each layer has
at least one temperature node. The layers are modeled using an instance of 

Buildings.HeatTransfer.Conduction.SingleLayer.

The construction material is defined by a record of the package Buildings.HeatTransfer.Data.OpaqueConstructions. This record allows specifying materials that store energy, and material that are a thermal conductor only with no heat storage.

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.Conduction.BaseClasses.PartialConductor (Partial model for heat conductor), Buildings.HeatTransfer.Conduction.BaseClasses.PartialConstruction (Partial model for multi-layer constructions).

Parameters

TypeNameDefaultDescription
AreaA Heat transfer area [m2]
ThermalResistanceRsum(lay[:].R)Thermal resistance of construction [K/W]
Genericlayersredeclare parameter Building...Construction definition from Data.OpaqueConstructions
Initialization
BooleansteadyStateInitialfalse=true initializes dT(0)/dt=0, false initializes T(0) at fixed temperature using T_a_start and T_b_start
TemperatureT_a_start293.15Initial temperature at port_a, used if steadyStateInitial = false [K]
TemperatureT_b_start293.15Initial temperature at port_b, used if steadyStateInitial = false [K]

Connectors

TypeNameDescription
HeatPort_aport_aHeat port at surface a
HeatPort_bport_bHeat port at surface b

Modelica definition

model MultiLayer 
  "Model for heat conductance through a solid with multiple material layers"
  extends Buildings.HeatTransfer.Conduction.BaseClasses.PartialConductor(
   final R=sum(lay[:].R));
  Modelica.SIunits.Temperature T[sum(nSta)](each nominal = 300) 
    "Temperature at the states";
  Modelica.SIunits.HeatFlowRate Q_flow[sum(nSta)+nLay] 
    "Heat flow rate from state i to i+1";
  extends Buildings.HeatTransfer.Conduction.BaseClasses.PartialConstruction;

protected 
  Buildings.HeatTransfer.Conduction.SingleLayer[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 loop
  connect(lay[i].port_b, lay[i+1].port_a);
  end for;
  connect(lay[nLay].port_b, port_b);

end MultiLayer;

Automatically generated Fri May 06 14:13:02 2011.