Skip to main content

Code Compliance & Stress Evaluation

Once the global displacements have been solved and the local element forces extracted, the engine routes these forces through the selected Design Code module.

This section details how the engine applies Stress Intensification Factors (SIFs), evaluates each stress category against its correct allowable (sustained, expansion, and occasional), and performs the pressure-design wall check for standard plant piping and fully restrained pipelines.

3.1 Stress Intensification Factors (SIFs)

Piping components like elbows, tees, and reducers exhibit localized stress concentrations. The engine applies SIFs to the extracted bending and torsional moments. By default these are derived automatically from the component geometry per ASME B31.3 Appendix D (Table D300); the values can be overridden manually per component.

The engine resolves three primary SIFs:

  • iini_{in}: In-plane bending SIF
  • iouti_{out}: Out-of-plane bending SIF
  • itori_{tor}: Torsional SIF

Bends / Elbows. The flexibility characteristic h=TˉR1/r22h = \bar{T} R_1 / r_2^2 yields iin=0.9/h2/3i_{in} = 0.9/h^{2/3}, iout=0.75/h2/3i_{out} = 0.75/h^{2/3} (each 1\geq 1) and flexibility factor k=1.65/hk = 1.65/h. These are applied along the discretised bend arc, and the reported result envelopes the worst point on the arc.

Tees / Branch connections. The SIF is applied only at the branch intersection (centre) node — not along the adjacent run or branch pipe. The run/branch transition points revert to plain pipe (i=1.0i = 1.0), so the straight header is not artificially intensified. Separate run-side and branch-side SIFs are supported. For the default welding tee (ASME B16.9), h=4.4Tˉ/r2h = 4.4\,\bar{T}/r_2, giving iout=0.9/h2/3i_{out} = 0.9/h^{2/3} and iin=34iout+14i_{in} = \tfrac{3}{4} i_{out} + \tfrac{1}{4}; unreinforced (stub-in) and reinforced (pad) fabricated tees use their respective hh characteristics. The governing tee result is reported at the intersection.

Here Tˉ\bar{T} is the nominal wall, r2=(DoTˉ)/2r_2 = (D_o - \bar{T})/2 the mean pipe radius, and R1R_1 the bend radius. The axial SIF (iaxi_{ax}) is taken as 1.01.0.

Effective Properties

All stress calculations utilize the effective pipe thickness (tefft_{eff}), which removes the user-defined mill tolerance percentage and corrosion allowance from the nominal wall thickness.

A key distinction the engine enforces is that expansion (displacement) stresses and sustained (primary) stresses are different stress categories with different allowables. The sustained bending term uses the sustained index 0.75i0.75\,i (floored at 1.01.0); the expansion range uses the full SIF ii. Torsion is evaluated with an SIF of 1.01.0 for all three codes (standard practice).

3.2 Stress Equations by Code

Common terms (ZZ = section modulus on the effective wall, AeffA_{eff} = effective metal area, SpS_p = longitudinal pressure stress =PDo/4teff= PD_o/4t_{eff}):

St=Mtor2Z,Sa=FaxAeffS_t = \frac{|M_{tor}|}{2Z}, \qquad S_a = \frac{|F_{ax}|}{A_{eff}}

ASME B31.3 (Process Piping)

In-plane / out-of-plane bending are kept separate:

S_{b,\,sus} = \frac{\sqrt{(0.75 i_{in} M_{in})^2 + (0.75 i_{out} M_{out})^2}}{Z}$$ with each $0.75\,i \geq 1.0$. The displacement (expansion) and sustained longitudinal stresses follow B31.3 (2020) Eq (17) and §302.3.5: $$S_E = \sqrt{(S_a + S_{b,\,exp})^2 + 4 S_t^2} \qquad\text{(checked against } S_A)$$ $$S_L = S_p + S_{b,\,sus} + S_a \qquad\text{(checked against } S_h)$$ ### ASME B31.1 (Power Piping) B31.1 uses a **resultant-moment** formulation with a single SIF $i = \max(i_{in}, i_{out})$ and the torsion carried inside the resultant $M_{res} = \sqrt{M_{tor}^2 + M_{in}^2 + M_{out}^2}$ (Eqs 13/15): $$S_E = \frac{i\,M_{res}}{Z}, \qquad S_L = S_p + \frac{\max(0.75 i,\,1.0)\,M_{res}}{Z}$$ ### AS 4041 (Australian Pressure Piping) AS 4041 follows the B31.1-style resultant-moment combination (single SIF on $M_{res}$, sustained index $0.75\,i$), while its allowables are derived from the design stress $f$ entered as the hot/cold allowables (see §3.3). ## 3.3 Allowable Stresses & Load-Case Checks Each load case is checked against **its own** allowable — the engine never compares an expansion range to the sustained limit. | Load case | Stress | Allowable | |-----------|--------|-----------| | **SUS** (sustained: W + P) | $S_L$ | $S_h$ | | **EXP** (thermal range) | $S_E$ | $S_A$ | | **OCC** (W + P + wind/seismic) | $S_L$ | $k\,S_h$ | | **OPE** (operating snapshot) | worse of $S_L/S_h$ and $S_E/S_A$ | — | **Hot / cold allowables.** Each material carries $S_h$ (basic allowable at design/hot temperature, `allowable_stress`) and $S_c$ (at installation/cold temperature, `allowable_stress_cold`). **Expansion allowable $S_A$** — B31.3 Eq (1a), with the liberalised form Eq (1b) applied when enabled: $$S_A = f\,(1.25\,S_c + 0.25\,S_h) \qquad\xrightarrow{\text{liberal}}\qquad S_A = f\,\big[1.25(S_c + S_h) - S_L\big]$$ The liberal form credits unused sustained margin ($S_L$ from a dedicated sustained pass) and is the CAESAR II default; the engine never returns a liberal $S_A$ below the basic value. Liberalisation is toggled by **Use liberal expansion allowable** in Settings. **Cyclic stress-range factor $f$** — B31.3 Eq (1c) / Table 302.3.5: $$f = 6.0\,N^{-0.2} \leq 1.0 \quad (\,f = 1.0 \text{ for } N \leq 7000;\ \text{floored at } 0.15\,)$$ where $N$ is the number of equivalent full displacement cycles (Settings → *Equivalent Full Cycles, N*). **Occasional multiplier $k$** — applied to $S_h$ for short-duration events: $1.33$ for B31.3 / AS 4041, and a user-selectable $1.15$ / $1.20$ / $1.33$ for B31.1 (default $1.20$). :::tip[Per-line specifications] Design pressure, temperatures, corrosion/mill tolerance, fluid density — **and the design code and cycle count $N$** — can be overridden per line via **Specifications** (assigned to elements in the Assign tab). Each element is evaluated against its own resolved code and allowables, so a single model may contain, e.g., a B31.1 high-cycle hot line and a B31.3 low-cycle line. Any field left blank inherits the global Settings value. The liberal toggle, $E$, and $Y$ remain global. ::: :::info[Effective Properties] Stress calculations use the effective pipe thickness $t_{eff}$ (nominal wall less mill-tolerance % and corrosion allowance). SIF flexibility characteristics ($h$) use the **nominal** wall per code; section modulus uses the corroded wall — a conservative combination consistent with CAESAR II's "use corroded thickness in stress" option. ::: ## 3.4 Pressure (Hoop) Design Check Separately from the longitudinal flexibility check, the engine verifies the minimum pressure-design wall per **B31.3 §304.1.2 Eq (3a) / B31.1 §104.1.2**: $$t_m = \frac{P D_o}{2\,(S_h E W + P Y)} + c$$ where $E$ is the quality / weld-joint factor, $W$ the weld-strength-reduction factor, $Y$ the temperature coefficient (B31.3 Table 304.1.1, default $0.4$ for ferritic steels $\leq 482^\circ\text{C}$), and $c$ the corrosion/mechanical allowance. The reported **hoop utilisation** is $t_m / \big(t_{nom}(1 - \text{mill tol})\big)$. Values of $E$ and $Y$ are set in Settings → *Code Compliance Options*. ## 3.5 Pipeline Codes (AS 2885 / ASME B31.8) Standard plant piping codes evaluate flexibility. Buried pipelines, however, are essentially locked in place by soil. The engine contains an intelligent **Buried Pipe Router**. If the solver detects that an element has an assigned `soil_id` (meaning it is buried), it bypasses the standard B31.3/B31.1 unrestrained allowables and switches to the **Fully Restrained Pipe** logic dictated by codes like AS 2885 and ASME B31.8, evaluating against the material's **Specified Minimum Yield Strength (SMYS)**: * **Sustained Allowable:** $0.90 \times SMYS$ * **Occasional Allowable:** $k \times 0.90 \times SMYS$ This ensures that long cross-country pipelines are correctly evaluated for yielding under extreme soil confinement, rather than being falsely failed by plant piping fatigue rules. :::warning[Restrained-pipe expansion] For fully restrained (buried) lines the dedicated restrained-pipe combined-stress check (thermal + pressure + bending vs SMYS) governs; the unrestrained $S_A$ shown for buried elements is indicative only. :::