Analysis Sets: Multi-Code Piping Stress Comparison Calculator
Runs one load case through up to four piping codes side by side — sustained and expansion stress against allowable for B31.1 and B31.3, hoop and longitudinal/combined against SMYS-based allowables for B31.4 and B31.8 — and reports every row's unity plus the single governing check in one table.
Method last updated (calculation changelog) · fixture-verified on every build — most recently 2026-07-30.
Takes one geometry (outside diameter, wall, section modulus) and one load case (pressure, moment ranges, SIFs) and runs it through the sustained and expansion screening checks of ASME B31.1 and B31.3, and the hoop and longitudinal/combined checks of the pipeline codes B31.4 and B31.8 — the per-code 'analysis set' concept, in one comparison table. Every allowable stress (Sc, Sh, SMYS) and every factor (stress-range factor f, design factor F, joint factor E, temperature derating T) is a user-supplied input; nothing is looked up from an internal code table. The output is a row per code check with stress, allowable and unity, the governing row across the whole set, and an overall ALL PASS / SOME EXCEED verdict.
Method
Same geometry and load case evaluated by each selected code's own screening check, with allowables entered by the user rather than embedded:
hoop = P·Do / (2·t)
Mc = √(Mi² + Mo² + Mt²), imax = max(ii, io)
B31.1 SE = imax·Mc / Z vs SA = f·(1.25·Sc + 0.25·Sh)
B31.3 Sb = √((ii·Mi)² + (io·Mo)²) / Z, St = Mt / (2·Z), SE = √(Sb² + 4·St²) vs SA (same form as B31.1)
B31.4 hoop vs F·SMYS; longitudinal SL vs 0.75·F·SMYS
B31.8 hoop vs F·E·T·SMYS; combined (SL + SEB31.1) vs 0.90·T·SMYS
B31.1 and B31.3 sustained rows both compare the same user-supplied sustained longitudinal stress SL against the hot allowable Sh — the two codes diverge only in how they combine the expansion-case moments into SE. Defaults when not entered: f = 1.0, F = 0.72, E = 1.0, T = 1.0.
| Inputs | ||
|---|---|---|
| codes | Codes to include in the comparison — any subset of B31.1, B31.3, B31.4, B31.8 | — |
| P | Internal design pressure | psi |
| Do | Pipe outside diameter | in |
| t | Wall thickness | in |
| Z | Section modulus | in³ |
| Mi, Mo, Mt | In-plane, out-plane and torsional moment ranges | in·lbf |
| ii, io | In-plane and out-plane stress intensification factors | — |
| Sc, Sh | Cold and hot allowable stress — required if B31.1 or B31.3 is selected | psi |
| SL | Sustained longitudinal stress from the weight + pressure case | psi |
| SMYS | Specified minimum yield strength — required if B31.4 or B31.8 is selected | psi |
| fRange, designFactor, eJoint, tempDerating | Stress-range factor f, pipeline design factor F, joint factor E, temperature derating T (defaults 1.0, 0.72, 1.0, 1.0) | — |
| Outputs | ||
| rows | One row per code check: quantity, stress, allowable, unity | — |
| governingUnity | Highest unity across the whole set | — |
| governing | Code + quantity label of the governing row | — |
| verdict | ALL PASS or SOME EXCEED | — |
Limitations — what this calculator is not
- Screening comparison only — each code's full analysis carries provisions (restraint condition, occasional loads, casing/riser rules, code-year differences) this table does not evaluate. Confirm the governing result with a complete analysis before using it to close out a design.
- No allowable stress table is embedded — Sc, Sh and SMYS are entered by you from the applicable material specification and code edition; an incorrect allowable produces an incorrect unity on every row that uses it.
- B31.4 and B31.8 unities apply SMYS directly with a user-entered design/location-class factor F. Establishing the correct location class or fluid-service factor from the governing edition is the engineer's responsibility — the code selector changes no arithmetic on its own.
- The B31.8 'combined' row pairs sustained SL with the B31.1-style resultant expansion stress as a screening proxy; it is not a substitute for B31.8's own combined-stress and design equations in full.
- Sustained-case moments are not separately entered for B31.1/B31.3 — SL is a single user-supplied sustained longitudinal stress, so the tool does not recompute sustained stress from Mi/Mo/Mt; only the expansion-case resultant uses those moments.
Worked example — fixture-verified
NPS 8 Sch 40 line (8.625 in OD × 0.322 in wall, Z = 16.81 in³) carrying 600 psi, evaluated against all four codes at once. Moment range resultants of 50,000 / 30,000 / 20,000 in·lbf (in-plane / out-plane / torsional) with SIFs ii = 2.27, io = 1.89; Sc = 20,000 psi, Sh = 17,300 psi; SL = 8,000 psi; SMYS = 35,000 psi with the default design factor F = 0.72.
| Given | ||
|---|---|---|
| Do × t × Z | 8.625 × 0.322 × 16.81 | in / in / in³ |
| Pressure P | 600 | psi |
| Mi / Mo / Mt | 50,000 / 30,000 / 20,000 | in·lbf |
| ii / io | 2.27 / 1.89 | — |
| Sc / Sh | 20,000 / 17,300 | psi |
| SL | 8,000 | psi |
| SMYS | 35,000 | psi |
Step by step
- Hoop stress: hoop = P·Do/(2·t) = 600·8.625/(2·0.322) = 5,175/0.644 = 8,035.71 psi — feeds both the B31.4 and B31.8 hoop checks.
- Resultant moment: Mc = √(50,000² + 30,000² + 20,000²) = √3,800,000,000 = 61,644.14 in·lbf.
- B31.1 expansion stress: imax = max(2.27, 1.89) = 2.27; SE = 2.27·61,644.14/16.81 = 8,324.34 psi.
- B31.1/B31.3 allowable: SA = f·(1.25·Sc + 0.25·Sh) = 1.0·(1.25·20,000 + 0.25·17,300) = 25,000 + 4,325 = 29,325 psi.
- B31.1: sustained unity = SL/Sh = 8,000/17,300 = 0.46243; expansion unity = SE/SA = 8,324.34/29,325 = 0.28387.
- B31.3 expansion stress: Sb = √((2.27·50,000)² + (1.89·30,000)²)/16.81 = √(113,500² + 56,700²)/16.81 = 7,547.56 psi; St = 20,000/(2·16.81) = 594.88 psi; SE = √(Sb² + 4·St²) = 7,640.76 psi.
- B31.3: sustained unity matches B31.1 at 0.46243 (same SL/Sh); expansion unity = 7,640.76/29,325 = 0.26055.
- B31.4: hoop unity = 8,035.71/(0.72·35,000) = 8,035.71/25,200 = 0.31888; longitudinal unity = SL/(0.75·0.72·35,000) = 8,000/18,900 = 0.42328.
- B31.8: hoop unity = 8,035.71/(0.72·1.0·1.0·35,000) = 0.31888 (E = T = 1.0 default); combined unity = (SL + SEB31.1)/(0.9·1.0·35,000) = (8,000 + 8,324.34)/31,500 = 16,324.34/31,500 = 0.51823.
- Governing row across all eight checks: B31.8 combined at 0.51823 — the highest unity in the set, still ≤ 1.0 → ALL PASS.
| Result PASS | ||
|---|---|---|
| B31.1 sustained / expansion | 0.46243 / 0.28387 | unity |
| B31.3 sustained / expansion | 0.46243 / 0.26055 | unity |
| B31.4 hoop / longitudinal | 0.31888 / 0.42328 | unity |
| B31.8 hoop / combined | 0.31888 / 0.51823 | unity |
| Governing check (code / quantity) | gas-pipeline combined row | — |
| Governing unity | 0.51823 | — |
| Verdict | ALL PASS | — |
B31.8's combined check governs here even though both pipeline hoop unities tie with B31.4's — the sustained-plus-expansion sum on the combined row is what pushes it above every other check in the set. The pipeline-only example below shows the same geometry at higher pressure, where B31.4 hoop alone flips the verdict.
analysis-set.json — case “NPS8 sch40 all four codes, moderate loads -> governing B31.8 combined 0.518, ALL PASS” (tolerance 0.001) — in the
calc-core release gate. It re-runs on every commit; a red fixture blocks deployment.
See the validation methodology.Worked example 2 — pipeline codes only, higher pressure fails hoop
Same NPS 8 Sch 40 geometry, moments and SIFs, screened as a pipeline (B31.4 and B31.8 only, Sc/Sh omitted since neither pipeline code needs them) at 2,200 psi instead of 600 psi.
| Given | ||
|---|---|---|
| Do × t × Z | 8.625 × 0.322 × 16.81 | in / in / in³ |
| Pressure P | 2,200 | psi |
| SMYS | 35,000 | psi |
| SL | 8,000 | psi |
Step by step
- Hoop stress: hoop = P·Do/(2·t) = 2,200·8.625/0.644 = 18,975/0.644 = 29,464.29 psi.
- B31.4 hoop allowable: F·SMYS = 0.72·35,000 = 25,200 psi. Unity = 29,464.29/25,200 = 1.16922.
- 1.16922 > 1.0 — this row alone drives the set to SOME EXCEED, regardless of how the remaining B31.8 rows land.
| Result FAIL | ||
|---|---|---|
| B31.4 hoop unity | 1.16922 | — |
| Verdict | SOME EXCEED | — |
Same wall and geometry as Example 1 — only the pressure and the code subset changed, and hoop stress alone (not the more elaborate expansion or combined checks) is what fails the line. That's a useful diagnostic: when a pipeline unity fails on hoop specifically, the fix is thicker wall or lower MAOP, not a restraint or SIF revisit.
Fixture case “pipeline codes only at P=2200 -> hoop 29464.29 vs 25200, unity 1.16922 SOME EXCEED” (tolerance 0.001) — locked in the same release gate as the example above.
Sources & citations
- ASME B31.1 — Power Piping, sustained and expansion stress design rules.
- ASME B31.3 — Process Piping, sustained and expansion stress design rules.
- ASME B31.4 — Pipeline Transportation Systems for Liquids and Slurries, Design chapter.
- ASME B31.8 — Gas Transmission and Distribution Piping Systems, Design chapter.
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 B31.1 and B31.3 report the same sustained unity?
Both codes compare the same user-supplied sustained longitudinal stress SL against the hot allowable Sh — SL/Sh only differs between the two once the analyst enters a different SL for each code. They diverge on the expansion-stress combination rule: B31.1 uses a single resultant-moment SIF term, B31.3 splits bending and torsion before combining.
Can I mix process-piping codes and pipeline codes in one comparison?
Yes — select any subset of the four; the tool only requires the inputs the selected codes need (Sc/Sh for B31.1/B31.3, SMYS for B31.4/B31.8). Running all four on the same geometry is useful for a line that transitions from plant piping into a pipeline tie-in and needs both allowable bases checked side by side.
Is the governing unity a combined interaction check?
No — governing unity is simply the maximum of the independent per-code unities in the table, not a combined interaction ratio. Each code's check stands alone against its own allowable; nothing here sums stresses across codes.
Related calculators
- Displacement Stress Range Check (ASME B31.3 ¶319.4.4) — The single-code B31.3 expansion check behind the comparison row
- ASME B31.4 / B31.8 / B31.11 Pipeline Wall Thickness Calculator — Wall thickness for the pipeline codes in the same set
- Piping Criticality Evaluation Calculator (API 580/581 Screening Rubric) — Roll the governing unity into a line criticality class