Heat Radiative

Quick Start

The amount of heat that flows radiatively depends on temperature and emissivity - and on the temperature difference between emitter and receiver.

Credits

This app is part of the trio of Conductive (Insulation and Flow), Convective and Radiative heat transfer.

Heat Radiative

T1 °K
T2 °K
Emissivity ε1
Emissivity ε2
Max λ1
Max λ2
Emitted1 kW/m²
Emitted2 kW/m²
Heat flow W/m²
//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
    const queryString = window.location.search
    if (queryString.length>0){
        const urlParams = new URLSearchParams(queryString)
        const T1 = urlParams.get('T1')
        if (! isNaN(T1)) sliders.SlideT1.value=T1
        const T2 = urlParams.get('T2')
        if (! isNaN(T2)) sliders.SlideT2.value=T2
        const eta1 = urlParams.get('eta1')
        if (! isNaN(eta1)) sliders.Slideeta1.value=eta1
        const eta2 = urlParams.get('eta2')
        if (! isNaN(eta2)) sliders.Slideeta2.value=eta2

    }

    Main();
};

//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
    saveSettings();

    //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, 
        eta1: sliders.Slideeta1.value, 
        eta2: sliders.Slideeta2.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('Peak1').value = result.Peak1; 
    document.getElementById('Emitted1').value = result.Emitted1; 
    document.getElementById('Peak2').value = result.Peak2; 
    document.getElementById('Emitted2').value = result.Emitted2; 
    document.getElementById('Flow').value = result.Flow; 
    //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, eta1, eta2 }) {

   const h=6.63E-34, c=3.00E+08,k=1.38E-23, Stefan=5.6703e-8
    const kT1=k*T1, kT2=k*T2, hc2=2*h*c*c
    const Emitted1=eta1*Stefan*Math.pow(T1,4)/1000 //to kW
    const Emitted2=eta2*Stefan*Math.pow(T2,4)/1000 //to kW
    const Flow=Stefan*Math.abs(Math.pow(T1,4)-Math.pow(T2,4))/(1/eta1+1/eta2-1) //keep in W
   let Bz1um=[],Bz2um=[],Bz1,Bz2,v, Peak1=0,Max1=0, Peak2=0,Max2=0, iinc=0.01
     for (i=0.2;i<=25;i+=iinc){ //Do the primary scan in μm
        lambda=i/1e6
        l5=Math.pow(lambda,5)
        v=c/lambda
        Bz1=eta1*hc2/l5/(Math.exp(h*v/kT1)-1)
        if (Bz1>Max1){
            Peak1=lambda
            Max1=Bz1
        }
        Bz1um.push({x:lambda*1e6,y:Bz1})
        Bz2=eta2*hc2/l5/(Math.exp(h*v/kT2)-1)
        if (Bz2>Max2){
            Peak2=lambda
            Max2=Bz2
        }
        Bz2um.push({x:lambda*1e6,y:Bz2})
        if (i > 1) iinc=0.1
   }
   const Max=Math.max(Max1,Max2)
    for (i=0;i < Bz1um.length;i++){
        Bz1um[i].y/=Max
        Bz2um[i].y/=Max
    }
    //Integrated/=Bzcm.length
    const plotData = [Bz1um,Bz2um]
    const lineLabels = ["T1","T2"]
    const myColors = T1 > T2 ?["orange","blue"]: ["blue","orange"]
    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: false,
        borderWidth: borderWidth,
        xLabel: 'λ&μm', //Label for the x axis, with an & to separate the units
        yLabel: 'Relative emission& ', //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: 'F0', //These are the sig figs for the Tooltip readout. A wide choice!
        ySigFigs: 'F2', //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'],
        Peak1: (Peak1*1e6).toFixed(1) + " μm",
        Emitted1: Emitted1.toPrecision(3),
        Peak2: (Peak2*1e6).toFixed(1) + " μm",
        Emitted2: Emitted2.toPrecision(3),
        Flow: Flow.toPrecision(3),
    };
}
            

Wavelength-dependent emission

As the graph shows, the relative amount of energy emitted at any wavelength, λ, depends on the temperature of the emitter and its emissivity ε. The T-dependence is described by Planck's law which is best described by the frequency of the radiation, `ν=c/λ`. With the speed of light, c, Boltmann's constant k and Planck's constant h we have the frequency dependence of intensity, Iν at temperature T in °K:

`I_ν=ε((2hν^3)/c^2)1/(e^((hν)/(kT))-1)`

We show the curves for your two chosen temperatures and emissivities. As an approximate guide, anything dull and/or rough will have ε ~ 1 and anything shiny and smooth will be closer to ε = 0.02.

Radiative heat flow

The total heat flux Q in W/m² is given by the Stefan-Boltzmann equation, using Stefan's constant σ = 5.67e-8:

`Q=εσT^4`

The flux between two (planar) surfaces at T1 and T2 with ε1 and ε2 is given by:

`Q=(σ(T_1^4-T_2^4))/(1/ε_1+1/ε_2-1)`