Real-time calculation of efficiency η, temperature distribution T(x), and heat flux for rectangular, triangular, and parabolic fins. Adjust the sliders to explore optimal fin designs.
k is crucial—it's the fin's ability to "pump" heat from the base to the tip. A high k (like aluminum, ~200 W/mK) gives a gentle temperature drop. A low k (like plastic, ~0.2 W/mK) means the heat gets stuck near the base, and the tip is almost ambient temperature. Now, try a fun experiment: set a very high convection coefficient h with a plastic fin. You'll see efficiency crash because the fin can't supply heat fast enough to the surface!The core analysis assumes one-dimensional conduction along the fin length (x) with convection from the surface. The governing equation comes from an energy balance on a differential element of the fin.
$$ \frac{d^2\theta}{dx^2}- m^2\theta = 0 $$Where $\theta = T(x) - T_\infty$ is the temperature excess, $x$ is the distance from the base, and $m = \sqrt{\frac{hP}{kA_c}}$. Here, $P$ is the perimeter, $A_c$ is the cross-sectional area, $h$ is the convection coefficient, and $k$ is the thermal conductivity. The parameter $m$ determines how quickly the temperature drops.
The solution gives the temperature distribution. For a rectangular fin with an insulated tip, it is:
$$ \frac{\theta}{\theta_b}= \frac{T(x) - T_\infty}{T_b - T_\infty}= \frac{\cosh[m(L-x)]}{\cosh(mL)}$$The fin efficiency ($\eta_f$) is then defined as the ratio of actual heat transfer to the ideal heat transfer if the entire fin were at the base temperature.
$$ \eta_f = \frac{\tanh(mL)}{mL} $$For triangular and parabolic fins, the cross-sectional area $A_c$ changes with $x$, leading to different (and more complex) distributions and efficiency formulas, which this simulator calculates for you.
Electronics Cooling: The most common application is cooling computer CPUs and power electronics. Heat sinks are essentially arrays of fins. Engineers use tools like this to choose the right material (often aluminum for cost and weight) and shape to maximize heat dissipation within space constraints, preventing processor throttling or failure.
Automotive & Aerospace: Fins are used on air-cooled motorcycle and aircraft engines, as well as on oil coolers and intercoolers. In these applications, weight is critical. A triangular fin can provide nearly the same cooling as a rectangular one but with less material, directly improving fuel efficiency.
HVAC & Refrigeration: The evaporator and condenser coils in your air conditioner or refrigerator are finned tubes. The fin design (length, thickness, spacing) is optimized for a specific "h" (airflow speed) and "k" (copper or aluminum) to achieve efficient heat exchange between the refrigerant and the air.
Power Generation: In gas turbines and other power plants, turbine blades often have internal cooling channels and external fins to withstand extreme temperatures. Simulating fin efficiency is part of ensuring the blade metal stays within its safe operating limits, which is a classic CAE (Computer-Aided Engineering) analysis task.
When you start using this simulator, there are several pitfalls that beginners in CAE often fall into. The first one is overestimating the convective heat transfer coefficient h. For example, in natural convection (no fan), h is typically around 5–10 W/m²K, and even in forced convection (with a fan), it's usually only several tens to about 100 W/m²K. You might be tempted to set h to 200 or 300 to "increase the cooling effect," but there are limits to the real cooling capacity of air or water. In practice, the first step is to estimate h using appropriate correlation equations based on flow velocity.
The second point is that you cannot simply use the material table value for thermal conductivity k as-is. The thermal conductivity of aluminum listed in catalogs is about 200 W/mK, but this is for high-purity material. For actual cast products or A6061 aluminum alloy commonly used in heat sinks, it decreases to about 160 W/mK. Furthermore, if there is "thermal resistance" at the contact surface between the fin and the heat source, the temperature at the fin base itself becomes higher than assumed, throwing off the entire calculation. Before simulation, verify material properties using measured values or reliable data sheets.
The third point is not judging performance based on efficiency η alone. While η is certainly important, what you ultimately want to know is the "total heat dissipation Q." For instance, a long fin with η=0.6 often surpasses a short fin with η=0.8 in total heat dissipation because the former has a significantly larger surface area. This tool visualizes this through the "heat flux" graph. When designing, always keep in mind the goal of "maximizing Q within given volume or weight constraints" rather than "maximizing η" as you adjust parameters.
Rectangular aluminum fin (k=237 W/m·K) with h=85 W/m²·K, length L=0.05m, thickness t=0.003m cooled by forced convection. Calculated fin efficiency: 87.3%, base temperature 95°C, tip temperature 68°C. Total heat flux dissipated: 152W. Compare: identical stainless steel fin (k=16 W/m·K) yields only 41% efficiency and 28W flux, demonstrating why aluminum dominates automotive and electronics cooling applications.
rgb(${Math.round(100+s*100)},${Math.round(160+s*80)},${Math.round(255-s*100)});
} else if (t < 0.66) {
const s = (t - 0.33) / 0.33;
return rgb(${Math.round(200+s*55)},${Math.round(240-s*100)},${Math.round(155-s*155)});
} else {
const s = (t - 0.66) / 0.34;
return rgb(${Math.round(255)},${Math.round(140-s*140)},${Math.round(0)});
}
}
function resize() {
const dpr = window.devicePixelRatio || 1;
const w = el.parentElement.clientWidth - 40;
const H = Math.round(Math.min(w * 0.35, 200));
if (Math.abs(el.width - w * dpr) > 2 || el.height !== H * dpr) {
el.width = w * dpr;
el.height = H * dpr;
el.style.height = H + 'px';
ctx.setTransform(dpr, 0, 0, dpr, 0, 0);
}
return { W: w, H };
}
function frame() {
const { W, H } = resize();
const { L, t, m, Tb, Tinf, shape } = getFinParams();
animT += 0.02;
ctx.clearRect(0, 0, W, H);
ctx.fillStyle = '#f8f9fa';
ctx.fillRect(0, 0, W, H);
const padL = 80, padR = 40, padT = 30, padB = 45;
const drawW = W - padL - padR;
const drawH = H - padT - padB;
const N = 120;
const finH = drawH * 0.48; // visual fin half-height at base
const finBaseX = padL;
// Draw fin body with temperature colors
for (let i = 0; i < N; i++) {
const xFrac = i / N;
const x = xFrac * L;
const T = tempAtX(x, L, m, Tb, Tinf, shape);
const px = padL + xFrac * drawW;
const pw = drawW / N + 1;
// Fin height varies with shape
let hFrac = 1.0;
if (shape === 'triangular') hFrac = 1 - xFrac;
else if (shape === 'parabolic') hFrac = 1 - xFrac * xFrac;
const fH = finH * hFrac;
const cy = padT + drawH * 0.55;
ctx.fillStyle = tempColor(T, Tinf, Tb);
ctx.fillRect(px, cy - fH, pw, fH * 2);
}
// Fin outline
ctx.strokeStyle = 'rgba(0,0,0,0.3)';
ctx.lineWidth = 1;
ctx.beginPath();
for (let i = 0; i <= N; i++) {
const xFrac = i / N;
let hFrac = 1.0;
if (shape === 'triangular') hFrac = 1 - xFrac;
else if (shape === 'parabolic') hFrac = 1 - xFrac * xFrac;
const fH = finH * hFrac;
const cy = padT + drawH * 0.55;
const px = padL + xFrac * drawW;
if (i === 0) ctx.moveTo(px, cy - fH);
else ctx.lineTo(px, cy - fH);
}
for (let i = N; i >= 0; i--) {
const xFrac = i / N;
let hFrac = 1.0;
if (shape === 'triangular') hFrac = 1 - xFrac;
else if (shape === 'parabolic') hFrac = 1 - xFrac * xFrac;
const fH = finH * hFrac;
const cy = padT + drawH * 0.55;
const px = padL + xFrac * drawW;
ctx.lineTo(px, cy + fH);
}
ctx.closePath();
ctx.stroke();
// Base indicator
ctx.fillStyle = '#001F3F';
ctx.fillRect(0, padT, padL - 4, drawH);
ctx.fillStyle = tempColor(Tb, Tinf, Tb);
ctx.font = 'bold 11px Roboto Mono, monospace';
ctx.textAlign = 'center';
ctx.fillText(${Tb.toFixed(0)}°C, padL/2, padT + drawH/2 + 4);
ctx.fillStyle = '#6c757d';
ctx.font = '9px Roboto Mono';
ctx.fillText('Base', padL/2, padT + drawH/2 + 16);
// Tip label
const Ttip = tempAtX(L, L, m, Tb, Tinf, shape);
ctx.fillStyle = tempColor(Ttip, Tinf, Tb);
ctx.font = 'bold 11px Roboto Mono, monospace';
ctx.textAlign = 'left';
ctx.fillText(${Ttip.toFixed(0)}°C, W - padR + 4, padT + drawH/2 + 4);
ctx.fillStyle = '#6c757d';
ctx.font = '9px Roboto Mono';
ctx.fillText('Tip', W - padR + 4, padT + drawH/2 + 16);
// Animated convection particles
const nConv = 18;
for (let i = 0; i < nConv; i++) {
const xFrac = (i + 0.5) / nConv;
const T = tempAtX(xFrac * L, L, m, Tb, Tinf, shape);
const px = padL + xFrac * drawW;
let hFrac = 1.0;
if (shape === 'triangular') hFrac = 1 - xFrac;
else if (shape === 'parabolic') hFrac = 1 - xFrac * xFrac;
const fH = finH * hFrac;
const cy = padT + drawH * 0.55;
// Rising particle (hot air convecting away)
const tOff = ((animT + i * 0.35) % 1.0);
const py = cy - fH - tOff * 35;
const alpha = 1 - tOff;
const intensity = (T - Tinf) / Math.max(1, Tb - Tinf);
ctx.beginPath();
ctx.arc(px, py, 2.5, 0, Math.PI * 2);
ctx.fillStyle = rgba(255,${Math.round(120 + intensity*100)},0,${alpha * 0.7 * intensity});
ctx.fill();
}
// Color legend bar
const lgX = padL + drawW * 0.15, lgY = H - padB + 10, lgW = drawW * 0.7, lgH = 10;
const lgGrad = ctx.createLinearGradient(lgX, 0, lgX + lgW, 0);
lgGrad.addColorStop(0, tempColor(Tinf, Tinf, Tb));
lgGrad.addColorStop(0.5, tempColor((Tinf+Tb)/2, Tinf, Tb));
lgGrad.addColorStop(1, tempColor(Tb, Tinf, Tb));
ctx.fillStyle = lgGrad;
ctx.fillRect(lgX, lgY, lgW, lgH);
ctx.strokeStyle = '#dee2e6';
ctx.lineWidth = 0.5;
ctx.strokeRect(lgX, lgY, lgW, lgH);
ctx.fillStyle = '#6c757d';
ctx.font = '9px Roboto Mono';
ctx.textAlign = 'left';
ctx.fillText(${Tinf.toFixed(0)}°C, lgX, lgY + lgH + 10);
ctx.textAlign = 'right';
ctx.fillText(${Tb.toFixed(0)}°C, lgX + lgW, lgY + lgH + 10);
ctx.textAlign = 'center';
ctx.fillText('Temperature', lgX + lgW/2, lgY + lgH + 10);
requestAnimationFrame(frame);
}
frame();
})();