Piping Toolset
HomeCalculators › Thermal Expansion Table Interpolation Calculator (in/100 ft)

Thermal Expansion Table Interpolation Calculator (in/100 ft)

Interpolates the unit thermal expansion e = e1 + (e2e1)·(TT1)/(T2T1) between two bracketing rows you read from your code's thermal-expansion table, then scales it to the total growth ΔL = e·L/100 over the run. The table values themselves are copyrighted code data and stay user inputs — you enter the two rows, the calculator interpolates.

Method last updated (calculation changelog) · fixture-verified on every build — most recently 2026-07-31.

Every piping flexibility calculation starts with the same number and almost nobody computes it from first principles: how much does this run grow. The codes publish it as a table of unit thermal expansion — inches per 100 feet, indexed by material group and temperature, in ASME B31.3 Table C-1 and the equivalent appendix of B31.1. Design temperatures do not land on table rows, so the value that goes into the loop sizing, the spring travel, the nozzle load and the anchor spacing is almost always an interpolation between two of them.

That interpolation is trivial arithmetic, and it is also the single most-repeated hand calculation in piping stress work. It is repeated on every line, it feeds every downstream number, and it is done under time pressure on a pad of paper often enough that transcription errors in it are a recognised category of mistake. This card does exactly that step and nothing else — read two rows, get the value, get the growth — so the arithmetic is repeatable and the two rows you used are recorded alongside the answer.

The reason it is structured as "enter two rows" rather than "pick a material and a temperature" is a licensing one, and it is worth being explicit about. The expansion tables are copyrighted standard content. This site does not reproduce code table values; it implements public equations and takes tabulated data as user input. So the engineer reads the two bracketing rows from the edition their project is actually contracted to — which also means the calculation is anchored to the right edition rather than to whatever data a tool happened to embed — and the tool does the interpolation and the unit conversion.

One thing to know about what the tabulated value means before using it: the code tables are cumulative expansion from a reference temperature, conventionally 70 °F, not incremental expansion per degree. That has a practical consequence engineers get wrong regularly — for a line that operates below its installed temperature, or for a differential between two operating states, the growth is the difference between two table entries, not a single entry. The section below on that is the most useful part of this page.

Linear interpolation between two thermal-expansion table rows A chart of unit thermal expansion against temperature. Two marked table rows are joined by a straight segment, dashed beyond them to indicate extrapolation, with guides dropping from the interpolated value at the design temperature. e (in/100 ft) T (°F) T_1 , e_1 — table row T_2 , e_2 — table row interpolated e design T ΔL = e · L / 100 L in ft, ΔL in inches e = e_1 + (e_2 − e_1)·(T − T_1)/(T_2 − T_1)
Two bracketing rows read from the code's thermal-expansion table define a straight segment; the design temperature is read off it. Interpolating inside the bracket is the intended use — projecting the same line beyond the entered rows is extrapolation, and the calculator warns when the design temperature falls outside them.
Open this calculator → Download sample report

Method

Straight-line interpolation between two table points, then a unit conversion to total growth:

e = e1 + ( e2 − e1 ) · ( T − T1 ) / ( T2 − T1 )

ΔL = e · L / 100

where T1 and T2 are the two bracketing temperatures from the table with their tabulated expansions e1 and e2 in in/100 ft, T the design temperature, and L the run length in feet. The division by 100 is the conversion from the table's per-100-feet basis to the actual run — the sole reason the tables are published that way is to keep the numbers to a readable magnitude, and it is a common slip to drop it and end up a hundredfold out.

The interpolation is linear by construction, which is what the codes intend for use between adjacent published rows. Thermal expansion is not truly linear in temperature — the coefficient itself drifts, which is precisely why the tables have many rows rather than one coefficient — but across the interval between two adjacent rows the curvature is small enough that a straight line is the accepted treatment. Interpolating across a wide gap by skipping rows is a different proposition and is where the linear assumption starts to cost accuracy.

The engine requires T2T1 and a positive length, and it does not require the design temperature to lie between the two rows — it will extrapolate. It warns when you do: if T falls outside the interval you entered, the result is a projection beyond the data, and the correct fix is to go back to the table and read the rows that actually bracket your temperature. The warning exists because extrapolation here is nearly always a data-entry error rather than an intentional choice.

Inputs
T1Lower bracketing table temperature°F
e1Tabulated expansion at T1, read from the code table — user-suppliedin/100 ft
T2Upper bracketing table temperature°F
e2Tabulated expansion at T2, read from the code table — user-suppliedin/100 ft
TDesign temperature to interpolate at°F
LRun length between the points whose relative movement you wantft
Outputs
eInterpolated unit expansion at the design temperaturein/100 ft
deltaLTotal growth over the run lengthin

Limitations — what this calculator is not

Quick reference — the cumulative-table trap

The single most common error with these tables is treating a tabulated value as the growth for a case where it is not. Every published value is cumulative expansion from the reference temperature (conventionally 70 °F), so what you enter depends on which movement you are after:

What you are calculatingWhat to interpolateWhy
Growth from ambient install to operating temperatureThe value at the operating temperature, used directly.Install is at the reference temperature, so the cumulative value is the movement. This is the ordinary case and the one the table is written for.
Growth from a hot install (steam-traced, summer tie-in) to operatingInterpolate both, then take the difference: e(Top) − e(Tinstall).The line is already partly expanded when it is anchored. Using the operating value alone overstates the movement — sometimes helpfully, sometimes not.
Movement between two operating states (start-up, regeneration, upset)Interpolate both states and take the difference.The stress range that matters is between the extremes the system actually sees, not between ambient and the hotter one.
Contraction on a cryogenic or sub-ambient lineThe value at the operating temperature, which is negative.Below the reference temperature the tabulated expansion is negative and the line gets shorter. The arithmetic is identical; the sign is not, and it reverses every movement direction downstream.

The consequence of getting this wrong is not subtle. A line taken as growing from 70 °F when it was actually anchored hot can have its calculated movement overstated by a third or more — which shows up as an oversized loop, an unnecessary expansion joint, or a spring selected for travel the line never sees.

Worked example — fixture-verified

A 120 ft straight run whose design temperature falls exactly between two rows of the expansion table. The engineer reads the bracketing rows for the line's material group: 0.5 in/100 ft at 100 °F and 1.5 in/100 ft at 200 °F. The design temperature is 150 °F.

Given
Lower table temperature T₁100°F
Expansion at T₁0.5in/100 ft
Upper table temperature T₂200°F
Expansion at T₂1.5in/100 ft
Design temperature T150°F
Run length L120ft

Step by step

  1. Position within the bracket: (T − T₁)/(T₂ − T₁) = (150 − 100)/(200 − 100) = 50/100 = 0.5 — the design temperature sits exactly halfway between the two rows.
  2. Span of the table values: e₂ − e₁ = 1.5 − 0.5 = 1.0 in/100 ft across the interval.
  3. Interpolated expansion: e = 0.5 + 1.0 · 0.5 = 1.0 in/100 ft.
  4. Scale to the run: ΔL = e · L / 100 = 1.0 · 120 / 100 = 1.2.
  5. Total free growth of the run: 1.2 in.
  6. Status is COMPUTED — this is a load-input calculation, and there is no pass/fail criterion until the 1.2 in is absorbed by a loop or restrained into a stress.
Result COMPUTED
e — interpolated unit expansion1.0in/100 ft
deltaL — total free growth1.2in

1.2 inches is the number that now propagates. It is what an expansion loop on this run has to absorb, what a spring hanger at the far end has to travel, and what — if the run is restrained between two anchors instead — becomes a force and a stress rather than a movement. That last case is worth a moment: the same 1.2 in fully restrained in a carbon steel run develops a longitudinal stress on the order of tens of thousands of psi, which is why the answer to "can I just anchor both ends" is almost always no. Take the growth into the expansion loop sizing to absorb it, or into the displacement stress range check to qualify what happens if you do not.

Why you can trust these numbers: this exact case is fixture expansion-interpolation.json — case “midpoint interpolation, 120 ft run” (tolerance 1e-9) — in the calc-core release gate. It re-runs on every commit; a red fixture blocks deployment. See the validation methodology.

Sources & citations

Per the source & citation policy, allowable-stress and factor table values are user-supplied. Where a page does reproduce specific ASME data (the B16.5 ratings, the quick-reference tables), it does so under ASME authorization and states the source table and conditions inline.

FAQ

Why do I have to enter the table values instead of picking a material?

Because the thermal-expansion tables are copyrighted standard content, and this site's licensing position is to implement public equations while leaving tabulated code data to the user. There is a practical benefit that falls out of it: the calculation is anchored to the edition your project actually invokes, rather than to whichever edition a tool happened to embed and may never update. Where this site does reproduce standard data — the ASME B16.5 flange ratings — it does so under an explicit authorization and says so on the page. There is no such authorization for the expansion tables, so they stay inputs.

Is linear interpolation accurate enough?

Between adjacent published rows, yes — that is what the tables are designed for, and the reason they carry many rows rather than a single coefficient is precisely to keep each interval short enough that a straight line is adequate. The coefficient of thermal expansion does drift with temperature, so the underlying curve is not linear; the error you introduce grows with the width of the interval you span. Interpolating between 100 °F and 200 °F rows is routine. Interpolating between a 100 °F and a 700 °F row by skipping everything in between is not, and if your table has closer rows there is no reason to.

The tables are referenced to 70 °F. What if my line is installed hot?

Then interpolate twice and take the difference. The tabulated value is cumulative expansion from the reference temperature, so it represents the movement from 70 °F to the temperature you looked up. A line tied in and anchored at, say, 120 °F is already partly expanded at the moment it is restrained, and the movement it goes on to make is e(Toperating) − e(120 °F). Using the operating value alone overstates it. The same logic applies to any differential — between two operating states, between operating and a regeneration cycle, or across a start-up transient. Run this card twice and subtract.

Can I use it for cryogenic or sub-ambient lines?

Yes, and the arithmetic needs no change — but watch the sign. Below the reference temperature the tabulated expansion is negative: the line contracts rather than grows, and the interpolation returns a negative e and a negative ΔL. That is correct and it is what you want, provided you carry the sign through. It reverses every movement direction downstream, which matters for guide clearances, for which way a spring travels, and for whether a branch is pulled toward or away from a nozzle. Cryogenic lines also have their own separate concerns — insulation contraction, material toughness at temperature, and cold-spring practice — that this calculation does not touch.

Does 1.2 inches of growth mean my line has a problem?

By itself it means nothing at all — it is a load input, not a result, and the card reports COMPUTED rather than a verdict for that reason. What matters is what the system does with it. Absorbed by an expansion loop or a change of direction with enough leg length, 1.2 in is unremarkable. Restrained between two anchors in a straight run, the same 1.2 in over 120 ft is a strain of about 0.083%, which in carbon steel is a longitudinal stress in the tens of thousands of psi — enough to matter a great deal. Take the growth into the expansion loop sizing calculator to absorb it, or into the displacement stress range check to qualify what happens when it is not absorbed.

How is this different from the free thermal growth calculator?

They are two halves of the same job, split at the table. The free thermal growth card takes a single coefficient in in/100 ft that you have already established and scales it to a length. This card is the step before it: you have two table rows and a design temperature that falls between them, and you need the coefficient itself. If your design temperature happens to land on a table row, you do not need this page — read the value and go straight to growth. If it does not, which is most of the time, interpolate here first. The interpolation and the scaling both happen on this card, so it can be used end-to-end.

Related calculators

Open this calculator → All calculators