Calculate *probability of failure* (POF) of the corroded pipe taking into
account its actual level of defectiveness and exploiting
Monte-Carlo simulation
within Principle of maximum entropy.

Consistent estimate of POF for pipeline systems plays a critical role in optimizing their operation. To prevent pipeline failures due to actively growing defects it is necessary to be able to assess the pipeline system failure operation probability during a certain period, taking into account its actual level of defectiveness. The pipeline limit state comes when the burst pressure, considered as a random variable, reaches an unacceptable level, or when the defect depth, also a random variable, exceeds the predetermined limit value.

That is why in the method they consider two possible failures for a single
pipeline cross section with the on-surface and longitudinally oriented
defect of the *metal-loss* type:

*rupture*a decrease of the value of failure pressure down to the operating pressure.

*leak*increase of the corrosion depth (defect) up to the specified ultimate permissible fraction of pipe wall thickness.

Since up to now no methods existed which would give absolutely correct POF
assessments they suggest simple fiddling with random values of affecting
factors without deeping into intrinsic mechanisms of corrossion. For this
purpose they choose classical
Monte-Carlo simulation
within the Principle of maximum entropy.
The latter allows to avoid doubtful and excessive preferences and
detalization when choosing probability distribution models for failure
factors and for *inline inspection* measurements.

```
mepof(
depth = seq(0, 10, length.out = 100),
l = seq(40, 50, length.out = 100),
d = rep.int(762, 100),
wth = rep.int(10, 100),
strength = rep.int(358.5274, 100),
pressure = rep.int(0.588, 100),
temperature = rep.int(150, 100),
rar = function(n) stats::runif(n, 0.01, 0.3)/365,
ral = function(n) stats::runif(n, 0.01, 0.3)/365,
days = 0,
k = 0.8,
method = "b31g",
n = 1e+06
)
```

- depth
maximum depth of the corroded area measured during

*inline inspection*, [*mm*]. Type:`assert_double`

.- l
maximum longitudinal length of corroded area measured during

*inline inspection*, [*mm*]. Type:`assert_double`

.- d
nominal outside diameter of the pipe, [

*mm*]. Type:`assert_double`

.- wth
nominal wall thickness of the pipe, [

*mm*]. Type:`assert_double`

.- strength
one of the next characteristics of steel strength, [

*MPa*]:specified minimum yield of stress (

*SMYS*) for use with`b31gpf`

and`b31gmodpf`

.ultimate tensile strength (

*UTS*) or specified minimum tensile strength (*SMTS*) for use with other failure pressure codes (`dnvpf`

,`pcorrcpf`

,`shell92pf`

).

Type:

`assert_double`

.- pressure
absolute pressure of substance (i.e. heat carrier) inside the pipe measured near defect position, [

*MPa*]. In most cases this is a nominal operating pressure. Type:`assert_double`

.- temperature
temperature of substance (i.e. heat carrier) inside the pipe measured near defect position, [

*°C*]. In case of district heating network this is usually a calculated value according to actual or normative thermal-hydraulic regime. Type:`assert_double`

.- rar
random number generator for simulating of distribution of radial corrosion rate in pipe wall, [

*mm/day*]. The only argument`n`

of the function should be the number of observations to generate. Type:`assert_function`

.- ral
random number generator for simulating of distribution of longitudinal corrosion rate in pipe wall, [

*mm/day*]. The only argument`n`

of the function should be the number of observations to generate. Type:`assert_function`

.- days
number of days that have passed after or preceded the

*inline inspection*, []. Negative values are for retrospective assumptions whereas positives are for failure prognosis. Type:`assert_int`

.- k
alarm threshold for leakage failure. It usually

`0.6`

,`0.7`

, or`0.8`

, []. If set to`1`

no alarm before failure occurs. Type:`assert_number`

.- method
method for calculating failure pressure:

*b31g*- using`b31gpf`

.*b31gmod*- using`b31gmodpf`

.*dnv*- using`dnvpf`

.*pcorrc*- using`pcorrcpf`

.*shell92*- using`shell92pf`

.

Type:

`assert_choice`

.- n
number of observations to generate for Monte-Carlo simulations, Type:

`assert_count`

.

Probability of pipe failure for each corroded area measured during

*inline inspection*. Type: `assert_double`

.
If `NA`

s returned use another method
for calculating failure pressure.

Since for all influence factors they can more or less assume range limits,
the *uniform distribution* gets the maximum entropy in this context
(see JCGM 101:2008).
That is why parameters of corrosion defects measured during the
*inline inspection* as well as regime parameters and engineering
characteristics of pipe segment - all they are simulated by
`runif`

.

`runif`

-limits for depth of corrosion defect are associated
with precision of commonly applied measurement instruments. For traditionally
exploited ultrasonic control those limits are well-known and can reach up to
10 % of pipe wall thickness. Whereas uncertainty of defect longitudinal
length may be more than enough constrained with 5 %.

Recommendations for choosing stochastic characteristics of pipe
engineering factors (i.e. crossection diameter, wall thickness and material
strength) are taken from aggregated review of *Timashev et al.* but
gently transformed for compatibility with
Principle of maximum entropy,
i.e. `runif`

.

Uncertainties of regime parameters in stohastic models are set minimized by regarding only precision of metering devices which commonly applied in district heating networks. For temperature it is about 2 °C.

Since the rate of corrosion processes in the pipe wall is a consequence of physical and chemical processes occurring at the atomic scale, it depends on a large number of environmental factors differently and ambiguously. That is why various deterministic and stochastic models can be potentially involved in POF assessment. For that purpose radial and longitudinal corrosion rate can be independently formulated as random value generation functions. They only admit that change in depth and length of corrosion defects in time is close to linear for the generated value of corrosion rate.

S. Timashev and A. Bushinskaya,

*Diagnostics and Reliability of Pipeline Systems*, Topics in Safety, Risk, Reliability and Quality 30,**DOI 10.1007/978-3-319-25307-7**.BIPM. Guides in Metrology (GUM). JCGM 101:2008. Evaluation of measurement data –

**Supplement 1**to the*Guide to the expression of uncertainty in measurement*– Propagation of distributions using a*Monte Carlo*method.

```
# \donttest{
# Let's consider a pipe in district heating network with
diameter <- 762 # [mm]
wall_thickness <- 10 # [mm]
UTS <- 434.3697 # [MPa]
# which transfers heat-carrier (water) at
operating_pressure <- 0.588399 # [MPa].
temperature <- 95 # [°C]
# During inline inspection four corroded areas (defects) are detected with:
depth <- c(2.45, 7.86, 7.93, 8.15) # [mm]
# whereas the length of all defects is not greater 200 mm:
length <- rep(200, 4) # [mm]
# Corrosion rates in radial and in longitudinal directions are not well-known and
# may vary in range .01 - .30 mm/year:
rar = function(n) stats::runif(n, .01, .30) / 365
ral = function(n) stats::runif(n, .01, .30) / 365
# Then POFs related to each corroded area are near:
pof <- mepof(depth, length, rep(diameter, 4), rep(wall_thickness, 4),
rep(UTS, 4), rep(operating_pressure, 4), rep(temperature, 4),
rar, ral, method = "dnv")
#>
pipenostics::mepof: process case [1/4] - 25 % processed.
pipenostics::mepof: process case [2/4] - 50 % processed.
pipenostics::mepof: process case [3/4] - 75 % processed.
pipenostics::mepof: process case [4/4] - 100 % . All done, thanks!
print(pof)
#> [1] 0.000000 0.253109 0.368248 0.771403
# 0.000000 0.252510 0.368275 0.771595
# So, the POF of the pipe is near
print(max(pof))
#> [1] 0.771403
# 0.771595
# The value of POF changes in time. So, in a year after inline inspection of
# the pipe we can get something near
pof <- mepof(depth, length, rep(diameter, 4), rep(wall_thickness, 4),
rep(UTS, 4), rep(operating_pressure, 4), rep(temperature, 4),
rar, ral, method = "dnv", days = 365)
#>
pipenostics::mepof: process case [1/4] - 25 % processed.
pipenostics::mepof: process case [2/4] - 50 % processed.
pipenostics::mepof: process case [3/4] - 75 % processed.
pipenostics::mepof: process case [4/4] - 100 % . All done, thanks!
print(pof)
#> [1] 0.000000 0.526926 0.647812 0.929434
# 0.000000 0.525539 0.648359 0.929099
# for entire pipe we get something near:
print(max(pof))
#> [1] 0.929434
# 0.929099
# Two years ago before inline inspection the pipe state was rather good:
pof <- mepof(depth, length, rep(diameter, 4), rep(wall_thickness, 4),
rep(UTS, 4), rep(operating_pressure, 4), rep(temperature, 4),
rar, ral, method = "dnv", days = -2 * 365)
#>
pipenostics::mepof: process case [1/4] - 25 % processed.
pipenostics::mepof: process case [2/4] - 50 % processed.
pipenostics::mepof: process case [3/4] - 75 % processed.
pipenostics::mepof: process case [4/4] - 100 % . All done, thanks!
print(pof)
#> [1] 0.000000 0.040971 0.072262 0.272526
# 0.000000 0.040780 0.072923 0.271751
# for entire pipe we get something near:
print(max(pof))
#> [1] 0.272526
# 0.271751
# }
```