Computes the temperatures at contact surfaces between the layers of a spherical non-homogeneous wall.

View versions (1)

Interface

#include <codecogs/engineering/thermodynamics/conduction/nhm_sphere.h>

using namespace Engineering::Thermodynamics::Conduction;

For a spherical non-homogeneous wall, formed by n layers of various diameters d_1, d_2, \ldots, d_n and thermal conductivities \lambda_1, \lambda_2, \ldots, \lambda_n the total conductive heat flow is unidirectional and is given by the following formula:

Q = 2\pi (t_1 - t_2) \left[ \sum_{i=1}^n \frac{1}{\lambda_i} 
\left( \frac{1}{d_{i-1}} - \frac{1}{d_i} \right) \right]^{-1}
(1)

where d_0 is the internal diameter of the spherical wall.

It is assumed that the <i>i</i>-th layer has constant thermal conductivity \lambda_i at any of its points.

The temperature at the contact surface between layer i and layer i + 1 will be denoted by ts_i, for any value of i between 1 and n-1. The value of these temperatures are obtained by considering the following equality relation between the total conductive heat flows which pass through each layer and the value of Q given above:

Q_1 = Q_2 = \ldots = Q_n = Q
(2)

where:

Q_k = 2 \pi (t_1 - ts_k) 
\left[ \sum_{i=1}^k \frac{1}{\lambda_i} 
\left( \frac{1}{d_{i-1}} - \frac{1}{d_i} \right) \right]^{-1}.
(3)

Hence we obtain the following formula:

ts_k = t_1 - \frac{Q}{2 \pi} \left[ \sum_{i=1}^k \frac{1}{\lambda_i} 
\left( \frac{1}{d_{i-1}} - \frac{1}{d_i} \right) \right]^{-1}
\qquad i = \overline{1, n-1}.
(4)

In the diagram below you may notice the temperatures t_1, ts_1, ts_2, \ldots, ts_{n-1}, t_2 which decrease while the heat flow passes through layers of increasing diameters and various thermal conductivities.

1/nhm_sphere0-378.jpg

Example 1

#include <codecogs/engineering/heat_transfer/conduction/nhm_sphere.h>
#include <stdio.h>

int main()
{
  // input data
  int n = 4;
  double t1 = 75.0, t2 = 20.0,
  d[5] = {0.1, 0.15, 0.2,  0.25, 0.35},
  lambda[4] = {0.75, 0.95, 1.2,  1.0};

  // display the various input data
  printf("Input values:\n\n");
  printf(" n = %d\nt1 = %.2lf\nt2 = %.2lf\n\n", n, t1, t2);
  printf("diameters:\n(");
  int i;
  for (i = 0; i < n; i++)
    printf("%.2lf, ", d[i]);
  printf("%.2lf)\n\n", d[n]);
  printf("lambda:\n(");
  for (i = 0; i < n - 1; i++)
    printf("%.2lf, ", lambda[i]);
  printf("%.2lf)\n\n", lambda[n - 1]);

  // compute the temperatures at the contact surfaces between all layers
  std::vector<double> result = 
  Engineering::Heat_Transfer::Conduction::nhm_sphere
  (4, t1, t2, d, lambda);

  // display the results
  printf("\nThe temperatures at contact surfaces between layers are:\n\n");
  printf("(");
  for (i = 0; i < result.size() - 1; i++)
    printf("%.5lf, ", result[i]);
  printf("%.5lf)\n\n", result[result.size() - 1]);

  return 0;
}

Output

Input values:

 n = 4
t1 = 75.00
t2 = 20.00

diameters:
(0.10, 0.15, 0.20, 0.25, 0.35)

lambda:
(0.75, 0.95, 1.20, 1.00)


The temperatures at contact surfaces between layers are:

(45.09862, 33.29544, 27.68893)

Parameters

n
the number of layers
t1
the temperature of the heat flow at the entry surface (<i>degrees Celsius</i>)
t2
the temperature of the heat flow at the exit surface (<i>degrees Celsius</i>)
d
an array with the diameters of the layers (<i>meters</i>)
lambda
an array with the thermal conductivities of the layers (<i>Watts per meter Celsius</i>)

Returns

A vector containing the temperatures at the contact surfaces between all layers (<i>degrees Celsius</i>).

The inequality t_1 > t_2 must always hold when passing values to the function. Also the diameters array must be given in increasing order, thus:

d_0 < d_1 < d_2 < \ldots < d_n.
(5)

References

Dan Stefanescu, Mircea Marinescu - "Termotehnica"

GPL Licence — free for non commercial use. See Licence details.