Heat Transfer Coefficient

Quick Start

If we have some sort of air-flow to heat a surface we want to know its HCTC, Heat Transfer Coefficient.


This app is part of the general set of heat calculations.

Heat Transfer Coefficient

T0 °C
A cm²
m g
Cp J/gK
t s
Tmax °C
//One universal basic required here to get things going once loaded
window.onload = function () {
    //restoreDefaultValues(); //Un-comment this if you want to start with defaults

//Main() is hard wired as THE place to start calculating when inputs change
//It does no calculations itself, it merely sets them up, sends off variables, gets results and, if necessary, plots them.
function Main() {
    //Save settings every time you calculate, so they're always ready on a reload

    //Send all the inputs as a structured object
    //If you need to convert to, say, SI units, do it here!
    const inputs = {
        T1: sliders.SlideT1.value,
        T2: sliders.SlideT2.value,
        A: sliders.SlideA.value * 1e-4,  //cm2 to m2
        m: sliders.Slidem.value / 1e3, //g to kg
        Cp: sliders.SlideCp.value * 1e3, //J/gK to J/kgK
        HTCF: sliders.SlideHTCF.value,
        t: sliders.Slidet.value,

    //Send inputs off to CalcIt where the names are instantly available
    //Get all the resonses as an object, result

    const result = CalcIt(inputs);

    //Set all the text box outputs
    document.getElementById('Tmax').value = result.Tmax;

    //Do all relevant plots by calling plotIt - if there's no plot, nothing happens
    //plotIt is part of the app infrastructure in app.new.js
    if (result.plots) {
        for (let i = 0; i < result.plots.length; i++) {
            plotIt(result.plots[i], result.canvas[i]);

    //You might have some other stuff to do here, but for most apps that's it for Main!

//Here's the app calculation
function CalcIt({ T1, T2, A, m, Cp, HTCF, t }) {
    const nSteps = 300
    let tNow = 0, T = T1, tinc = t / nSteps, TPlot = []
    TPlot.push({ x: 0, y: T1 })
    for (i = 0; i < nSteps; i++) {
        T += HTCF * A * (T2 - T) / Cp / m * tinc
        tNow += tinc

        TPlot.push({ x: tNow, y: T })

    const plotData = [TPlot]
    const lineLabels = ["T"]
    const myColors = ["blue"]
    const borderWidth = [2]

    //Now set up all the graphing data detail by detail.
    const prmap = {
        plotData: plotData, //An array of 1 or more datasets
        lineLabels: lineLabels, //An array of labels for each dataset
        colors: myColors, //An array of colors for each dataset
        hideLegend: true,
        borderWidth: borderWidth,
        xLabel: 't&s', //Label for the x axis, with an & to separate the units
        yLabel: 'T&°C', //Label for the y axis, with an & to separate the units
        y2Label: null, //Label for the y2 axis, null if not needed
        yAxisL1R2: [], //Array to say which axis each dataset goes on. Blank=Left=1
        logX: false, //Is the x-axis in log form?
        xTicks: undefined, //We can define a tick function if we're being fancy
        logY: false, //Is the y-axis in log form?
        yTicks: undefined, //We can define a tick function if we're being fancy
        legendPosition: 'top', //Where we want the legend - top, bottom, left, right
        xMinMax: [,], //Set min and max, e.g. [-10,100], leave one or both blank for auto
        yMinMax: [,], //Set min and max, e.g. [-10,100], leave one or both blank for auto
        y2MinMax: [,], //Set min and max, e.g. [-10,100], leave one or both blank for auto
        xSigFigs: 'F1', //These are the sig figs for the Tooltip readout. A wide choice!
        ySigFigs: 'F1', //F for Fixed, P for Precision, E for exponential

    //Now we return everything - text boxes, plot and the name of the canvas, which is 'canvas' for a single plot
    return {
        plots: [prmap],
        canvas: ['canvas'],
        Tmax: T.toFixed(1),
        // Emitted1: Emitted1.toPrecision(3),
        // Peak2: (Peak2*1e6).toFixed(1) + " μm",
        // Emitted2: Emitted2.toPrecision(3),
        // Flow: Flow.toPrecision(3),

It's easy

You have some flow of hot air and want to heat something up, so you want a high Heat Transfer Coefficient, the number of Watts per m² delivered into the bulk surface per degree temperature difference between air and bulk. Measuring an HTCF is easy, but most of us try to avoid doing it because we think it's hard. You take a block of metal, with heat capacity Cp, not too large, not too small, with area A and mass m, containing a thermocouple connected to a data collection system. The block starts at temperature T0 and the hot air is at temperature TH. We put the block under the air and record the temperature rise. At time t, when the block is at temperature T, the rate of rise is given by


To use the app to measure your HTCF, set the relevant input parameters and slide the HTCF slider till the curve is a good match to your data. The mouse gives you a readout at each point so you can quickly check how reasonable your fit is over a few time points. A quick starting point for finding the HTCF is the Tmax reached at the end of your measurement time.

What parameters to choose?

You'll probably want to use Al (Cp=0.921), Cu (Cp=0.377) or steel(Cp~0.5) as the mass - whatever you have around. Something like 10x5 cm, 0.5mm thick makes sense for nozzles capable of producing a "good" HTCF. But it will depend on your setup, you might need to be much smaller/lighter or you might want a much bigger block - use the app to give you some idea of what might be too fast or too slow given your rough expectation of your HTCF. The time over which you want to do the experiment depends on how well you want to (visually) fit your data. With a typical block you might want a few minutes, a heavier block and a lower HTCF you might want to wait for 10+ minutes. There's no need to wait for the full exponential curve to reach TH but the bigger the T range, the better you can be confident of a good fit to your data.

The heat transfer coefficient of a nozzle system depends on many factors: shape, size, air velocity, distance from nozzle to surface, inter-nozzle spacing. Old-fashioned systems might achieve only 50 W/m²K. A high-performance, double-sized drying system can produced 200 W/m²K.

Bad fits

If you don't get a good fit, that's telling you something odd about your setup. The assumption is that the internal thermal conductivity of the block is large ("Biot number>>1"), so the measured temperature isn't lagging behind the true one. We also assume that the block isn't loosing lots of heat to whatever it's sitting on. Maybe some insulating foam can get you to a better fit. Finally, the block must be "thin" so the delivery of heat around the edges is insignificant. If necessary, the block can sit in a foam holder so both the base and the edges are insulated.