Displacement Stress Range Check (ASME B31.3 ¶319.4.4)
Compares the displacement stress range SE = √(Sb² + 4St²) of ASME B31.3 ¶319.4.4 Eq. (17) with the allowable SA = f(1.25Sc + 0.25Sh) of ¶302.3.5(d) Eq. (1a), returning both plus the utilization ratio and a PASS/FAIL verdict. Moment ranges come from your flexibility analysis.
Method last updated (calculation changelog) · fixture-verified on every build — most recently 2026-09-03.
Built and fixture-verified by Matthew Norris, P.E. — active P.E. licensure in Arizona, California, Kansas, Missouri, North Carolina, Texas.
The thermal-expansion acceptance check of B31.3: the computed displacement stress range SE from an analysis' moment ranges must not exceed the allowable SA. This is the closing calculation of every flexibility problem — after the layout has been analyzed and the moment ranges extracted, ¶319.4.4 and ¶302.3.5(d) decide whether the system lives with its own thermal cycling. An engineer reaches for the card to finish a hand analysis, to verify a stress program's acceptance math at the governing node, or to document the check transparently in a calculation report. Enter the SIF-intensified moments at the point of interest, the section modulus, the cold and hot allowables, and the cyclic factor f; the card returns both stresses, the utilization, and the verdict.
.pcp project files and the batch runner —
$2.99 / month. Compare tiers →Method
Sb = √( (ii·Mi)² + (io·Mo)² ) / Z St = Mt / (2Z)
SE = √( Sb² + 4·St² ) (Eq. 17)
SA = f · (1.25·Sc + 0.25·Sh) (Eq. 1a)
PASS when SE ≤ SA. The card works the chain in order: the in-plane and out-of-plane moment ranges are intensified by their SIFs and combined into the resultant bending stress Sb over the section modulus; the torsional range produces St on 2Z; Eq. (17) combines bending and torsion into the displacement stress range; and Eq. (1a) builds the allowable from the cold and hot allowable stresses Sc and Sh, scaled by the cyclic factor f. The utilization SE/SA is reported alongside the verdict so the margin is visible, not just the outcome. The cyclic factor comes from the Fatigue Factor card (f = 1.0 up to 7,000 equivalent cycles, falling for higher cycle counts); every stress input — moments, SIFs, Z, allowables — is yours, so the same card checks any point of any system regardless of which tool produced the analysis.
| Inputs | ||
|---|---|---|
| ii, io | In-plane / out-of-plane SIFs (from the SIF card) | — |
| Mi, Mo, Mt | In-plane, out-of-plane, torsional moment ranges | in·lb |
| Z | Section modulus | in³ |
| Sc, Sh | Allowable stress cold / hot (user-supplied) | psi |
| f | Cyclic stress-range factor | — |
| Outputs | ||
| Sb, St | Resultant bending and torsional stress | psi |
| SE | Displacement stress range | psi |
| SA | Allowable stress range | psi |
| ratio | SE / SA utilization | — |
Limitations — what this calculator is not
- This is the acceptance check, not the flexibility analysis: moment ranges Mi/Mo/Mt must come from your own analysis (or a validated hand method). The tool deliberately does not solve piping systems — that remains CAESAR II / AutoPIPE territory.
- Eq. (1a) allowable; the liberal allowance of Eq. (1b) (adding unused sustained margin) is not applied. Where a marginal system needs that credit, the sustained stress has to be computed and the check redone on the Eq. (1b) basis outside this card.
- Single-point check with one Z — evaluate each candidate governing point separately, and rerun with a corroded-wall section modulus where the corroded condition is the study.
- Inputs are ranges, not operating values: Mi, Mo and Mt are the change in moment between the extreme displacement conditions of the cycle. Entering single-condition operating moments instead of ranges invalidates the comparison without any warning the card can raise.
- Sc and Sh are user-supplied at the cold and hot conditions from the governing edition — the card does not look them up, and it cannot detect a mismatched pairing, an allowable read at the wrong temperature, or values mixed across editions.
- SIFs are inputs here, not outputs: generate ii and io with the SIF card (or from B31J data) for the actual component at the point being checked. A tee checked with elbow factors, or intensified moments intensified a second time, corrupts the result silently.
- Passing SE ≤ SA says nothing about the sustained or occasional cases — the ¶302.3.5 sustained check and any occasional-load evaluation stand on their own.
Worked example — fixture-verified
NPS 6 Sch 40 point (Z = 8.49575 in³) with a pure in-plane moment range of 44,139 in·lb intensified by ii = 2.26557 (the Appendix D elbow above); A106-B allowables Sc = 20,000, Sh = 17,300 psi, f = 1.0.
| Given | ||
|---|---|---|
| ii / io | 2.26557 / 1.0 | — |
| Mi | 44,139 | in·lb |
| Mo, Mt | 0 | in·lb |
| Z | 8.49575 | in³ |
| Sc / Sh | 20,000 / 17,300 | psi |
| f | 1.0 | — |
Step by step
- Bending: Sb = 2.26557·44,139 / 8.49575 = 100,000 / 8.49575 = 11,770.6 psi; St = 0.
- Stress range: SE = √(11,770.6² + 0) = 11,770.6 psi.
- Allowable: SA = 1.0·(1.25·20,000 + 0.25·17,300) = 25,000 + 4,325 = 29,325 psi.
- Utilization: 11,770.6 / 29,325 = 0.40 → PASS.
| Result PASS | ||
|---|---|---|
| SE — displacement stress range | 11,770.6 | psi |
| SA — allowable range | 29,325 | psi |
| Utilization | 0.40 | — |
| Verdict | PASS | — |
SE and SA here reproduce the PVP Suite selftest values (11,770.588 / 29,325) — the fixture holds them to 0.01 psi.
displacement-stress.json — case “PVP: pure in-plane SE + SA” (tolerance 0.01) — in the
calc-core release gate. It re-runs on every commit; a red fixture blocks deployment.
See the validation methodology.Sources & citations
- ASME B31.3, Process Piping — ¶319.4.4 Eq. (17); ¶302.3.5(d) Eq. (1a) allowable stress range.
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 states the source table and conditions inline.
FAQ
Where do the moment ranges come from?
From a flexibility analysis of the operating-to-cold displacement cycle — a pipe stress program, or a validated simplified method for simple layouts. What matters is that Mi, Mo and Mt are the ranges swept over the cycle at the point being checked, resolved into the component's in-plane, out-of-plane and torsional directions. This card is then the transparent acceptance math you can put in a calculation report and check by hand. The one input error that survives review most often is direction bookkeeping: in-plane and out-of-plane are defined relative to the component — the plane of the elbow, the plane containing the tee's run and branch — not relative to the global axes of the stress model, and programs report component-local moments precisely so they can be paired with the matching i-factors. Pulling global MX/MY/MZ into ii/io slots produces a plausible-looking SE that is wrong in both directions at once. When hand-checking a program's node, take the local moment triplet from its component report, not the global one from the restraint summary.
What if my system cycles more than 7,000 times?
Compute f = 6·N^(−0.2) with the Fatigue Factor card (¶302.3.5(d)), including equivalent cycles from partial-range operation, and enter it here — SA scales down accordingly. The 7,000-cycle plateau corresponds to roughly one full thermal cycle a day for about twenty years, which is why steady process services rarely leave f = 1.0 and batch or cyclic units frequently do. Counting the cycles is the substantive work, and ¶302.3.5(d) is specific about the method: unequal ranges convert to equivalent full-range cycles by the fifth-power rule — N = NE + Σ(ri⁵·Ni) — so a swing at half range costs only 1/32 of a full cycle, which is why partial-range operation rarely dominates. What does dominate on cyclic units is the count itself: a line cycling hourly crosses 7,000 in under a year, drives f well below 1.0, and can even engage the f = 0.15 floor territory where fatigue, not strength, owns the design. Put the cycle basis on the calculation sheet; it is the least-documented input in most stress reports.
Why is the check on a stress range rather than a stress?
Because displacement stresses are self-limiting: they are driven by imposed strain, not sustained load, and local yielding relaxes the driving strain rather than escalating toward collapse. What damages the pipe is the repetition of the cycle between the extreme displacement conditions, so ¶319.4.4 limits the range of stress swept per cycle — which is also why the moment inputs must be ranges, not single-condition values. The range basis also explains two habits that otherwise look like superstition. Cold spring buys no credit in this check — pre-stressing the cold position shifts both ends of the cycle equally and leaves the range untouched, which is why the Code credits cold spring for nozzle loads and reactions but not for SE. And the governing cycle is not always ambient-to-operating: the largest range between any two operating conditions controls, so a line that swings between a hot case and a regeneration or steam-out case can be governed by a cycle that never passes through ambient at all. Enumerate the conditions before extracting ranges.
Why can the allowable SA exceed the basic allowable stress?
Eq. (1a) permits f·(1.25·Sc + 0.25·Sh) — more than either tabulated allowable alone — because a strain-driven stress range that stays within it shakes down to elastic cycling after the first few cycles. The limit is calibrated against fatigue and ratcheting of the cycle, not against the load-controlled failure modes that set the basic allowables, which is why the sustained case keeps its own separate check. The shakedown logic carries its own boundary conditions, and they are the fine print worth knowing: the 1.25Sc + 0.25Sh budget presumes a system that yields locally on the first cycles and then rides elastically — a presumption that erodes if the sustained stress has already spent the elastic reserve, which is exactly what the separate ¶302.3.5 sustained check protects. It is also why SE landing just under SA on a system with near-limit sustained stress deserves the Eq. (1b) arithmetic done properly rather than comfort taken from two independent passes: the two checks share one elastic budget, and Eq. (1b) is the Code's accounting for that sharing.
What is the Eq. (1b) liberal allowance this card leaves out?
Eq. (1b) lets the analyst add the unused portion of the sustained-stress margin — the gap between Sh and the computed sustained stress — into the displacement allowable. That credit requires the sustained stress to be calculated and defended, so this card deliberately stays on the Eq. (1a) basis. A system that fails here but is close may still pass legitimately under Eq. (1b); it simply has to be shown, not assumed. When reviewing a calculation that used Eq. (1b), audit three things: that the sustained stress it credits was computed at the same evaluation point and condition, that the credit was taken once (not re-used across load cases), and that the sustained calculation itself is current — a support removed or a weight added after the stress report was issued silently invalidates the credit while leaving the displacement math looking untouched. That coupling is exactly why this card holds the Eq. (1a) line: an allowable that depends on another calculation's result is only as durable as that other calculation's revision control.
Does pressure stress enter SE?
Not in this card: SE is built from the intensified bending and torsional moment ranges — the Sb and St terms of Eq. (17) as shown. Pressure containment is the wall-thickness design, and the longitudinal stresses from pressure and weight belong to the sustained case. Keeping the load classes separate is the structure of the Code checks, not an omission. The boundary has one subtlety worth naming: pressure is absent from the stress combination here, but it is not absent from the flexibility problem — Bourdon straightening of bends and pressure thrust at expansion joints are real displacement-driving effects that belong in the model generating the moment ranges, and stress programs carry switches for exactly that. So the clean statement is: pressure's containment lives in wall thickness, its longitudinal stress lives in the sustained case, and its kinematic effects live in the flexibility model — three homes, none of them this card's SE equation, and each one findable when an audit asks where pressure went.
Related calculators & tools
- Stress Intensification & Flexibility Factor Calculator (B31.3 Appendix D) — Source of the ii and io this check requires
- Expansion Loop / Leg Sizing Calculator (Guided Cantilever) — Add flexibility when SE exceeds the allowable SA
- Pipe Thermal Growth Calculator (in / 100 ft) — Growth driving the moment ranges entered here
- ASME B31.3 Pipe Wall Thickness Calculator — Pressure design precedes the displacement stress check
- ASME B31J vs Appendix D guide — The Appendix D vs B31J decision behind the factors entered here
- PiperSIF — SIF & flexibility factors (Pro) — B31J-2023 i factors for the SE this card computes