Professional Documents
Culture Documents
IPC2022
September 26–30, 2022, Calgary, Alberta, Canada
IPC2022-87259
TC Energy Corporation
Calgary, Alberta, Canada
significantly. For example, an MFL ILI tally with 100 thousand where Pb_intact is the predicted burst pressure of defect free
reported corrosion clusters, or hundreds of corrosion anomalies intact pipe. RSF stands for remaining strength factor, which is a
measured by UT ILI or field laser scan with detailed 3- real number between zero and one, defined as Pb/Pb_intact, and
dimensional (3D) maps could usually be assessed within used to characterize the severity of corrosion anomalies. RSF
minutes. But when performing reliability-based (probabilistic)
di+1
di
xi xi+1
(c)
Ai
di
xi xi+1
A6 A7 A8 A9 A10
𝑞
𝐿𝑐𝑜𝑚𝑏_𝑗 = ∑𝑖=𝑝 𝐿𝑖 , (1 ≤ 𝑝 ≤ 𝑞 ≤ 𝑛) (3b)
EFFECTIVE AREA METHOD (RSTRENG) 𝑗 = [2𝑛 − (𝑞 − 𝑝 − 1)]/2 × (𝑞 − 𝑝) + 𝑝, (1 ≤ 𝑝 ≤ 𝑞 ≤ 𝑛) (3c)
Consider a 2D profile with n uniform depth segments,
denoted as S1, S2, …, Si, … Sn. The corresponding depth and 𝑑𝑎𝑣𝑒_𝑗 = 𝐴𝑐𝑜𝑚𝑏_𝑗 /𝐿𝑐𝑜𝑚𝑏_𝑗 , (1 ≤ 𝑗 ≤ 𝑛(𝑛 + 1)/2) (3d)
length of each segment are d1, d2, …, di, …, dn and L1, L2, …, 𝐴𝑜_𝑐𝑜𝑚𝑏_𝑗 = 𝑡𝐿𝑐𝑜𝑚𝑏_𝑗 , (1 ≤ 𝑗 ≤ 𝑛(𝑛 + 1)/2) (3e)
Li, … Ln. It is noted that some segments could have zero depth. where i, j, p, q, n are all integers. Equations (3a) to (3e) indicate
Given n uniform depth segments, a total of n (n + 1) / 2 that all n (n + 1) / 2 combinations could be derived by varying p
sub-sections (or called combinations hereafter) could be and q.
generated by combining the adjacent segments. For example, a The effective area method (RSTRENG) checks the
profile with 4 segments could generate a total of 10 calculated burst pressure for all the possible segment
combinations as shown in Figure 3. combinations one by one, and the minimum value is used as the
It is noted that the number of combinations here is n (n + predicted burst pressure for the 2D profile.
1) / 2 instead of n (n - 1) / 2 in ASME B31G [5], because the 2𝑡
notation is different. ASME B31G [5] uses n measurement 𝑃𝑏 = min {𝑃𝑏_𝑗 } = 𝜎𝑓 × 𝐷
× min {𝑅𝑆𝐹𝑗 } (4a)
1≤𝑗≤𝑛(𝑛+1)/2 1≤𝑗≤𝑛(𝑛+1)/2
points to form n - 1 trapezoid segments. As described in the 𝐴𝑐𝑜𝑚𝑏_𝑗
𝑑𝑎𝑣𝑒_𝑗
previous section, they are mathematically equivalent. 1−
𝐴0_𝑐𝑜𝑚𝑏_𝑗 1−
𝑅𝑆𝐹𝑗 = = 𝑡
(4b)
The metal-loss area, length, average depth and reference 1−
1
×
𝐴𝑐𝑜𝑚𝑏_𝑗
𝑀𝑗 𝐴0_𝑐𝑜𝑚𝑏_𝑗
1−
1 𝑑𝑎𝑣𝑒_𝑗
𝑀𝑗
×
𝑡
area of the jth combination are denoted as Acomb_j, Lcomb_j, dave_j
and A0_comb_j, respectively, where j = 1, 2, …, n (n + 1) / 2. They 2
√1 + 0.6275 𝐿𝑐𝑜𝑚𝑏_𝑗 − 0.003375 (𝐿𝑐𝑜𝑚𝑏_𝑗 )
2 2
𝐿𝑐𝑜𝑚𝑏_𝑗 2
≤ 50
could be calculated by: 𝑀𝑗 = { 𝐷𝑡 𝐷𝑡 𝐷𝑡 (4c)
𝐿𝑐𝑜𝑚𝑏_𝑗 2 𝐿𝑐𝑜𝑚𝑏_𝑗 2
𝑞 3.3 + 0.032 > 50
𝐴𝑐𝑜𝑚𝑏_𝑗 = ∑𝑖=𝑝 𝑑𝑖 𝐿𝑖 , (1 ≤ 𝑝 ≤ 𝑞 ≤ 𝑛) (3a) 𝐷𝑡 𝐷𝑡
1000
SUMMARY
800
When assessing corrosion threat, the effective area
600
400
(RSTRENG) model is commonly used to predict burst pressure
200
from known measured corrosion anomaly size. RSTRENG
0 model contains an iterative process to find the critical sub-
0 2000 4000 6000 8000 10000 section (combination) corresponding to the minimum burst
n segments = total length / segment length pressure. The commonly used RSTRENG algorithm has an
Figure 7: Case Study Showing Time Efficiency Benefit order of n-square time complexity (O(n2)). As n increases (e.g.,
It should be emphasized that Faster RSTRENG and longer corrosion or the same corrosion measured by higher
RSTRENG algorithms are rigorously mathematically resolution tools), the computation time increases nonlinearly.
equivalent. The calculated burst pressure results are always The traditional effective area algorithm is reviewed first in
identical. All the combinations (or called iterations) mentioned this paper. It is found that it is not necessary to always loop
in ASME B31G [5] and PRCI PR-3-805 [4] have been checked. through all the combinations and check the corresponding burst
The benefit of Faster RSTRENG comes from that some pressure one by one. A more effective algorithm (Faster
shallower and shorter combinations, certainly not the final RSTRENG) is proposed and described in detail. Faster
critical combination, are checked and excluded more efficiently RSTRENG is mathematically equivalent to the traditional
without actually calculating the corresponding burst pressure RSTRENG algorithm and always guarantees identical burst
one by one. pressure results as the traditional algorithm. All the
The key component of Faster RSTRENG is Eq. (10) combinations (or called iterations) mentioned in ASME B31G
derived from the inequality Eqs. (6) and (8), which could be [5] and PRCI PR-3-805 [4] are checked but in a more efficient
used to check and exclude combinations efficiently with way.
negligible computational cost. As the example shown in Figure A case study is conducted with input profiles formed by
6(d), a 2D profile with n = 179 is calculated using 66 steps, all various measurement points, n. It is proven that Faster
the other 113 normalized length k values are excluded using Eq. RSTRENG algorithm is much more efficient than the
(10). The 113 black cross markers in Figure 6(d) are traditional RSTRENG.
computational free, whereas the red line in Figure 5 is Faster RSTRENG algorithm reduces the computation cost
computationally very expensive and unnecessary. significantly and makes it possible to perform reliability-based
Faster RSTRENG algorithm presented in this paper is (probabilistic) assessment using Monte Carlo method. Millions
clearly not the “most” efficient algorithm. There is still room to of simulations could be performed using RSTRENG model, or
further improve this algorithm. For instance, the strategy to even the more accurate and precise Psqr model developed by
select the next k to calculate using Eq. (5) based on the existing TC Energy [19, 20]. Operators usually benefit from the
information, e.g., calculated d<k> values and current upper advanced data driven corrosion assessment when optimizing
bound distribution of d<k′> (see Annex A for details). But it is the mitigation works [2, 15].
proved to be good enough for general engineering purpose. As the effective area method is the fundamental of
Assume an MFL ILI reported corrosion cluster formed by corrosion assessment, the proposed algorithm in this study
m individual flat bottom rectangular boxes as shown in Figure potentially brings broad benefits to the pipeline industry.
2(a), and the generated “river bottom” has n segments with
uniform depth and various length, where n ≤ m. The current ACKNOWLEDGMENTS
common industry practice is to check the burst pressure for all Authors acknowledge the comments received from internal
n (n + 1) / 2 combinations and use the minimum as the final and external reviewers. Jason Yan would like to thank the
burst pressure for the corrosion cluster. However, if the n family support when working from home during the novel
segments are allowed to be split into shorter subsegments, as coronavirus (COVID-19) pandemic.
shown in Annex B, sometimes, burst pressure lower than the
minimum of the n (n + 1) / 2 combinations could be found. In
other words, if the n segments forming a 2D profile do not have
Algorithm 1: Bulging factor or Folias factor, Eq.(2b) or (4c), M (D, t, L) 8: current_max_d_ave ← current_d_ave
Input: D, t and L (corrosion length, segment or combination length) 9 loop
1: if L ^ 2 <= 50 × (D × t) then 10: return current_max_d_ave
2: M ← (1 + 0.6275 × L ^ 2 / (D × t) - 0.003375 × L ^ 4 / (D × t) ^ 2) ^
0.5 Algorithm 6: Faster RSTRENG, n segments
3: else Input: D, t, y, 2D corrosion profile formed by n segments with same length
4: M ← 3.3 + 0.032 × L ^ 2 / (D × t)
(x) and uniform depth, {d1, d2, …, dn}
5: return M
1: Let unchecked_possible_k_list be an array from 1 to n # initialize
2: d_max ← max {d1, d2, …, dn}
Algorithm 2: Remaining strength factor, Eq.(4b), RSF (D, t, L, d) 3: d_min ← min {d1, d2, …, dn}
Input: D, t, L and d (depth, segment depth or combination average depth) 3: current_upper_d_ave ← an array with n elements equal to d_max
1: if L = 0 or d = 0 then # perfect pipe 4: current_min_RSF ← 1 # initialize
2: return 1 5: while unchecked_possible_k_list.size > 0 do
3: else 6: if this is the first step then
4: M ← M (D, t, L) # Folias factor 7: current_k ←
5: return (1 – d / t) / (1 – d / t / M) unchecked_possible_k_list [unchecked_possible_k_list.size // 2]
# start from the middle point of the list
8: else
Algorithm 3: RSTRENG, n segments, O(n2) complexity
9: last_k ← current_k
Input: D, t, y, {L1, L2, …, Ln} and {d1, d2, …, dn}, (length and depth of each 10: # get the next k to check, it should be far away from the last k, and
segment, as arrays) not close to 1 or n
1: loop through all n segments to get the area of each segment current_k ← get_next_k (unchecked_possible_k_list, last_k)
2: current_min_RSF ← 1 # initialize 11: remove current_k from unchecked_possible_k_list
3: for p = 1 to n do 12: d_ave_max_k ← get_d_ave_max_k (current_k, {d1, d2, …, dn})
4: for q = p to n do # loop through all n(n+1) combinations # based on Eq.(5)
5: get the combination length, combination area and average depth 13: current_RSF ← RSF (D, t, k × x, d_ave_max_k)
from the pth segment to the qth segment inclusive # Eqs.(3a) to (3e) 14: if current_RSF < current_min_RSF then
# When using Eqs. (3a) and (3b), always remember the area and 15: current_min_RSF ← current_RSF # update the minimum
length from the last loop to avoid duplicate summation, otherwise 16: if unchecked_possible_k_list.size > 0 then
Algorithm 3 will become O(n3) complexity 17: current_upper_d_ave ←
6: current_RSF ← RSF (D, t, current combination length and average update_upper_bound (current_upper_d_ave, d_ave_max_k,
depth) current_k, d_max, d_min) # based on Eq. (10)
7: if current_RSF < current_min_RSF then 18: for all uncheck_k in unchecked_possible_k_list do
8: current_min_RSF ← current_RSF # update the minimum 19: current_RSF ← RSF (D, t, uncheck_k × x,
9: loop current_upper_d_ave [uncheck_k])
10: loop 21: if current_RSF >= current_min_RSF then
11: return 2 × t × (y + 10ksi) / D × current_min_RSF # convert RSF to 22: remove uncheck_k from unchecked_possible_k_list
Pb, unit conversion as needed 23: loop
24: loop
Algorithm 4: Get the next k to check, this algorithm has room to further 25: return 2 × t × (y + 10ksi) / D × current_min_RSF # convert RSF to
improve. get_next_k (unchecked_possible_k_list, last_k) Pb, unit conversion as needed
Input: unchecked_possible_k_list, last_k
1: split unchecked_possible_k into 2 arrays, left and right
left contains all elements in unchecked_possible_k less than last_k
right contains all elements in unchecked_possible_k greater than last_k
both left and right are in ascending order
2: if left.size > right.size then
return left[left.size // 2] # return the middle point from the left array
3: Else
4: return right[right.size // 2] # return the middle point from the right
array
Algorithm 5: get the maximum of all average depth for combinations with
length equal to kx, Eq.(5). get_d_ave_max_k (k, {d1, d2, …, dn})
Input: k, depth of n segments {d1, d2, …, dn}
1: current_max_d_ave ← min {d1, d2, …, dn} # initialize
2: for j = 1 to n – k + 1 do
3: current_d_ave ← 0 # initialize
4: for i = j to j + k - 1 do
5: current_d_ave ← current_d_ave + di / k
6: loop
7: if current_d_ave > current_max_d_ave then
Figure B1(a) shows a magnetic flux leakage (MFL) in-line remaining strength factor (RSF) equal to 0.8688 as shown in
inspection (ILI) reported corrosion cluster example, which is Figure B1(e).
formed by two flat bottom rectangular individual corrosion However, if it is allowed to split the 2 segments into
boxes. The two boxes are 150 mm × 100 mm × 10% wall shorter subsegments, e.g., Combination #4 shown in Figure
thickness (WT) and 50 mm × 50 mm × 40% WT, respectively. B1(c), a lower RSF value could be found. Figure B1(e) shows
The 2D “river bottom” profile has 2 segments (see Figure that the RSF value changes as a function of the length of
B1(b)). A total of 2 × (2 + 1) / 2 = 3 combinations could be Combination #4. The minimum RSF value of the cluster is
generated from the 2 segments profile as shown in Figure 0.8665 with effective length = 103 mm and effective depth =
B1(c). After checking all 3 combinations, Combination #3 with 24.56%WT.
length = 150 mm and average depth = 20%WT has the lowest
①
① ② ①
10%WT ① ② ④
50 mm × 40%WT 100 mm × 10%WT ④
103 mm × 24.6%WT
50 mm × 40%WT 100 mm × 10%WT ③
103 mm × 24.6%WT
40%WT ② ③
②
Combination Length
(a) ③ ④ (d)
③ ④ ①
①
150 mm × 20%WT 103 mm × 24.6%WT ③
150 mm × 20%WT 103 mm × 24.6%WT ③
④
④