FUNCTION
nhm_cylinder
Computes the temperatures at contact surfaces between the layers of a cylindrical non-homogeneous wall.
Interface
#include <codecogs/engineering/thermodynamics/conduction/nhm_cylinder.h>
using namespace Engineering::Thermodynamics::Conduction;
For a cylindrical non-homogeneous wall, formed by n layers of various diameters and thermal conductivities
the conductive heat flow is unidirectional and is given by the following formula per unit length:
where is the internal diameter of the pipe.
It is assumed that the <i>i</i>-th layer has constant thermal conductivity at any of its points.
The temperature at the contact surface between layer and layer
will be denoted by
, for any value of
between 1 and
. The value of these temperatures are obtained by considering the following equality relation between the conductive heat flows per unit length which pass through each layer and the value of
given above:
where:
Hence we obtain the following formula:
In the diagram below you may notice that the temperature decreases nonlinearly while the heat flow passes through layers of increasing diameters and various thermal conductivities.

Example 1
#include <codecogs/engineering/heat_transfer/conduction/nhm_cylinder.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_cylinder
(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:
(53.23062, 41.03671, 33.54887)Parameters
Returns
The inequality must always hold when passing values to the function. Also the diameters array must be given in increasing order, thus:
References
Dan Stefanescu, Mircea Marinescu - "Termotehnica"