DEV Community

Cover image for A longer fin eventually stops helping: checking tanh(mL) saturation with 10 FEM cases
NovaSolver
NovaSolver

Posted on

A longer fin eventually stops helping: checking tanh(mL) saturation with 10 FEM cases

Heat flow through the fin base against fin length for aluminum and stainless, levelling off at each material's limit

Make a heat sink fin longer and you add surface area, so it sheds more heat. That is only true up to a point. Further along the fin, the metal gets closer to air temperature, and the extra length does almost nothing.

I solved a 6 mm diameter pin fin in NovaSolver Studio's heat conduction solver, in aluminum and stainless steel, at lengths from 10 to 160 mm, and compared all 10 cases with the fin equation.

The equation

Hold the base of a thin rod at temperature T_b and let it lose heat to surrounding air (temperature T_∞, heat transfer coefficient h). The temperature along the rod approaches air temperature exponentially, at a rate set by

m=hPkA=4hkD m = \sqrt{\frac{hP}{kA}} = \sqrt{\frac{4h}{kD}}

where P is the perimeter, A the cross-sectional area and k the thermal conductivity. With heat also leaving the tip, the heat entering at the base is

Q=hPkA θb sinh⁡mL+(h/mk)cosh⁡mLcosh⁡mL+(h/mk)sinh⁡mL,θb=Tb−T∞ Q = \sqrt{hPkA}\,\theta_b\,\frac{\sinh mL + (h/mk)\cosh mL}{\cosh mL + (h/mk)\sinh mL}, \qquad \theta_b = T_b - T_\infty

As L grows, the fraction approaches 1 and Q levels off at √(hPkA)·θ_b. If you ignore the tip, the fraction is tanh(mL), which is 96% of the limit at mL = 2.

import math

h, D, Tb, Tinf = 50.0, 0.006, 60.0, 25.0     # W/m2K, m, degC, degC
P, A, th = math.pi * D, math.pi * D**2 / 4, Tb - Tinf

for name, k in (("Aluminum", 200.0), ("Stainless", 16.0)):
    m = math.sqrt(h * P / (k * A))
    M = math.sqrt(h * P * k * A) * th            # heat flow of an infinitely long fin
    g = h / (m * k)
    print(f"{name}: m = {m:.1f} 1/m, limit {M:.3f} W")
    for L in (0.01, 0.02, 0.04, 0.08, 0.16):
        q = M * (math.sinh(m*L) + g*math.cosh(m*L)) / (math.cosh(m*L) + g*math.sinh(m*L))
        print(f"  L = {L*1000:3.0f} mm  mL = {m*L:4.2f}  Q = {q:.4f} W ({q/M:4.0%})")
# Aluminum: m = 12.9 1/m, limit 2.555 W
#   L =  10 mm  mL = 0.13  Q = 0.3766 W ( 15%)
#   L =  20 mm  mL = 0.26  Q = 0.6916 W ( 27%)
#   L =  40 mm  mL = 0.52  Q = 1.2514 W ( 49%)
#   L =  80 mm  mL = 1.03  Q = 1.9998 W ( 78%)
#   L = 160 mm  mL = 2.07  Q = 2.4774 W ( 97%)
# Stainless: m = 45.6 1/m, limit 0.723 W
#   L =  10 mm  mL = 0.46  Q = 0.3480 W ( 48%)
#   L =  20 mm  mL = 0.91  Q = 0.5447 W ( 75%)
#   L =  40 mm  mL = 1.83  Q = 0.6907 W ( 96%)
#   L =  80 mm  mL = 3.65  Q = 0.7219 W (100%)
#   L = 160 mm  mL = 7.30  Q = 0.7227 W (100%)
Enter fullscreen mode Exit fullscreen mode

This is a 1D model that ignores temperature differences across the section. The radial Biot number hr/k is 0.00075 for aluminum and 0.0094 for stainless, small enough for that assumption to hold.

The setup

Item Value
Shape Cylinder, 6 mm diameter, length 10 / 20 / 40 / 80 / 160 mm
Material Aluminum (k = 200 W/mK), stainless (k = 16 W/mK)
Base face Fixed at 60 °C
Side and tip Air at 25 °C, h = 50 W/m²K (roughly fan-driven air)

Solving it over MCP

The setup and solve went through Studio's MCP tools, which an AI client can call. Here is an excerpt from the 80 mm aluminum case, with Studio's replies after each arrow. These runs used a local development build after v0.7.6 (2026-11-08).

import_geometry  fin80.step (thermal)
→ Imported fin80.step as c_20261108_194155_bdcb (rev 1): 3 faces, ...
  f1 [insulated] Cylinder, area 1507.96 mm2, centroid [0.0, 0.0, 40.0] mm
  f2 [insulated] Plane normal [0.0, 0.0, 1.0], area 28.27 mm2, centroid [-0.0, -0.0, 80.0] mm
  f3 [insulated] Plane normal [0.0, 0.0, -1.0], area 28.27 mm2, centroid [-0.0, -0.0, 0.0] mm

update_case  f3 = 60 degC / f1, f2 = convection 50 W/m2K, 25 degC / k = 200 W/mK / mesh.refine.f1 = 0.75 mm
validate_case
→ GREEN
  f1 (Face 1): convection h 50 W/m²K to 25 °C.
  f2 (Face 2): convection h 50 W/m²K to 25 °C.
  f3 (Face 3): 60 °C.
  Material: Custom, conductivity 200 W/mK.

check_convergence  (re-solves on coarse, normal and fine meshes)

get_results
→ ran=yes / converged=yes / mesh convergence (GCI) passed
  Max temperature: 60.0 °C
  Min temperature: 46.8 °C
  Heat flow in: 1.998 W

verify_case
→ Mesh convergence (temperature rise, GCI): finest mesh 13.204 K, Richardson extrapolation 13.213 K, GCI 0.08% (tolerance 5.0%) -> PASS
Enter fullscreen mode Exit fullscreen mode

The base (the face at z = 0), the tip and the side were picked out from the face orientations and positions.

mesh.refine.f1 sets the mesh size on the side face. My first run left it out, and on fins of 40 mm and longer at least one adjacent pair of mesh levels did not refine enough for the study, so Studio warned that it could not judge how reliable the answer was. I re-solved all 10 cases with the side at 0.75 mm, and every case then passed the mesh convergence check, which looks at the temperature difference inside the fin.

Results

Material Length mL Studio Fin equation Diff.
Aluminum 10 mm 0.13 0.3762 W 0.3766 W −0.12%
Aluminum 20 mm 0.26 0.6908 W 0.6916 W −0.11%
Aluminum 40 mm 0.52 1.250 W 1.251 W −0.09%
Aluminum 80 mm 1.03 1.998 W 2.000 W −0.07%
Aluminum 160 mm 2.07 2.476 W 2.477 W −0.05%
Stainless 10 mm 0.46 0.3471 W 0.3480 W −0.27%
Stainless 20 mm 0.91 0.5434 W 0.5447 W −0.24%
Stainless 40 mm 1.83 0.6895 W 0.6907 W −0.18%
Stainless 80 mm 3.65 0.7208 W 0.7219 W −0.15%
Stainless 160 mm 7.30 0.7216 W 0.7227 W −0.15%

In all 10 cases, the heat entering at the base matched the equation to within 0.3%.

Stainless reaches 95% of its limit at 40 mm. Stretching it four times longer, to 160 mm, only raises the heat flow from 0.6895 W to 0.7216 W, a 5% gain. Aluminum is at 97% of its limit at 160 mm, and going from 80 mm to 160 mm adds 24%.

Inside the fin

Axis temperature along an 80 mm fin for aluminum and stainless: FEM points on the fin equation curves

This is the temperature along the axis of the 80 mm fin. Stainless is at 30.8 °C just 40 mm from the base, where its excess over air has shrunk to about one sixth of the base value. Further out, that excess keeps shrinking and so does the heat lost per unit length. Aluminum is still at 46.8 °C at the tip, so the whole fin is working.

How long a fin is worth making comes down roughly to mL. Past mL = 2, added length costs material and weight while adding little heat flow. Under these conditions, that is about 155 mm for aluminum and about 44 mm for stainless.

Takeaways

  • Across 10 cases of a 6 mm pin fin, Studio's heat flow matched the fin equation to within 0.3%
  • Stainless reaches 95% of its limit at 40 mm and aluminum 97% at 160 mm; beyond that, more length adds very little
  • mL ≈ 2 is a good rule of thumb for fin length, and lower-conductivity materials level off at shorter lengths

NovaSolver Studio is free and open source (GPL-3.0). It solves structural, thermal and flow problems in one app and can be driven from MCP clients such as Claude Desktop.

Top comments (0)