Skip to content

Instantly share code, notes, and snippets.

@flare9x
Last active April 22, 2020 22:04
Show Gist options
  • Save flare9x/900ee78faa7f3ed2f2298082c180a284 to your computer and use it in GitHub Desktop.
Save flare9x/900ee78faa7f3ed2f2298082c180a284 to your computer and use it in GitHub Desktop.
POF analysis :: API 581 for external corrosion
using Distributions
using CSV
using DataFrames
using Statistics
using Cairo
using Gadfly
# read data
colnames = ["P&ID","Size","Service","Line_No","Sch","Spec","Exp Code","Design Temp"]
AI = CSV.read("C:/Users/Andrew.Bannerman/Desktop/MARS/risk studies/AI.csv",header=true)
names!(AI, Symbol.(colnames))
AR = CSV.read("C:/Users/Andrew.Bannerman/Desktop/MARS/risk studies/AR.csv",header=true)
AR = AR[1:8]
names!(AR, Symbol.(colnames))
AS = CSV.read("C:/Users/Andrew.Bannerman/Desktop/MARS/risk studies/AS.csv",header=true)
AS = AS[1:8]
names!(AS, Symbol.(colnames))
BC = CSV.read("C:/Users/Andrew.Bannerman/Desktop/MARS/risk studies/BC.csv",header=true)
names!(BC, Symbol.(colnames))
BM = CSV.read("C:/Users/Andrew.Bannerman/Desktop/MARS/risk studies/BM.csv",header=true)
names!(BM, Symbol.(colnames))
CH = CSV.read("C:/Users/Andrew.Bannerman/Desktop/MARS/risk studies/CH.csv",header=true)
names!(CH, Symbol.(colnames))
DC = CSV.read("C:/Users/Andrew.Bannerman/Desktop/MARS/risk studies/DC.csv",header=true)
names!(DC, Symbol.(colnames))
DCS = CSV.read("C:/Users/Andrew.Bannerman/Desktop/MARS/risk studies/DCS.csv",header=true)
names!(DCS, Symbol.(colnames))
DCW = CSV.read("C:/Users/Andrew.Bannerman/Desktop/MARS/risk studies/DCW.csv",header=true)
names!(DCW, Symbol.(colnames))
DF = CSV.read("C:/Users/Andrew.Bannerman/Desktop/MARS/risk studies/DF.csv",header=true)
names!(DF, Symbol.(colnames))
DM = CSV.read("C:/Users/Andrew.Bannerman/Desktop/MARS/risk studies/DM.csv",header=true)
names!(DM, Symbol.(colnames))
DO = CSV.read("C:/Users/Andrew.Bannerman/Desktop/MARS/risk studies/DO.csv",header=true)
names!(DO, Symbol.(colnames))
DSB = CSV.read("C:/Users/Andrew.Bannerman/Desktop/MARS/risk studies/DSB.csv",header=true)
names!(DSB, Symbol.(colnames))
DSG = CSV.read("C:/Users/Andrew.Bannerman/Desktop/MARS/risk studies/DSG.csv",header=true)
DSG = DSG[1:8]
names!(DSG, Symbol.(colnames))
EX = CSV.read("C:/Users/Andrew.Bannerman/Desktop/MARS/risk studies/EX.csv",header=true)
names!(EX, Symbol.(colnames))
EXH = CSV.read("C:/Users/Andrew.Bannerman/Desktop/MARS/risk studies/EXH.csv",header=true)
names!(EXH, Symbol.(colnames))
GAY = CSV.read("C:/Users/Andrew.Bannerman/Desktop/MARS/risk studies/GAY.csv",header=true)
names!(GAY, Symbol.(colnames))
GD = CSV.read("C:/Users/Andrew.Bannerman/Desktop/MARS/risk studies/GD.csv",header=true)
names!(GD, Symbol.(colnames))
GF = CSV.read("C:/Users/Andrew.Bannerman/Desktop/MARS/risk studies/GF.csv",header=true)
names!(GF, Symbol.(colnames))
GP = CSV.read("C:/Users/Andrew.Bannerman/Desktop/MARS/risk studies/GP.csv",header=true)
names!(GP, Symbol.(colnames))
GW = CSV.read("C:/Users/Andrew.Bannerman/Desktop/MARS/risk studies/GW.csv",header=true)
names!(GW, Symbol.(colnames))
JF = CSV.read("C:/Users/Andrew.Bannerman/Desktop/MARS/risk studies/JF.csv",header=true)
names!(JF, Symbol.(colnames))
LCF = CSV.read("C:/Users/Andrew.Bannerman/Desktop/MARS/risk studies/LCF.csv",header=true)
names!(LCF, Symbol.(colnames))
LO = CSV.read("C:/Users/Andrew.Bannerman/Desktop/MARS/risk studies/LO.csv",header=true)
names!(LO, Symbol.(colnames))
LPM = CSV.read("C:/Users/Andrew.Bannerman/Desktop/MARS/risk studies/LPM.csv",header=true)
names!(LPM, Symbol.(colnames))
ME = CSV.read("C:/Users/Andrew.Bannerman/Desktop/MARS/risk studies/ME.csv",header=true)
names!(ME, Symbol.(colnames))
N2 = CSV.read("C:/Users/Andrew.Bannerman/Desktop/MARS/risk studies/N2.csv",header=true)
names!(N2, Symbol.(colnames))
NF = CSV.read("C:/Users/Andrew.Bannerman/Desktop/MARS/risk studies/NF.csv",header=true)
names!(NF, Symbol.(colnames))
PF = CSV.read("C:/Users/Andrew.Bannerman/Desktop/MARS/risk studies/PF.csv",header=true)
names!(PF, Symbol.(colnames))
PL = CSV.read("C:/Users/Andrew.Bannerman/Desktop/MARS/risk studies/PL.csv",header=true)
names!(PL, Symbol.(colnames))
PV = CSV.read("C:/Users/Andrew.Bannerman/Desktop/MARS/risk studies/PV.csv",header=true)
names!(PV, Symbol.(colnames))
PW = CSV.read("C:/Users/Andrew.Bannerman/Desktop/MARS/risk studies/PW.csv",header=true)
names!(PW, Symbol.(colnames))
SC = CSV.read("C:/Users/Andrew.Bannerman/Desktop/MARS/risk studies/SC.csv",header=true)
names!(SC, Symbol.(colnames))
SV = CSV.read("C:/Users/Andrew.Bannerman/Desktop/MARS/risk studies/SV.csv",header=true)
names!(SV, Symbol.(colnames))
VA = CSV.read("C:/Users/Andrew.Bannerman/Desktop/MARS/risk studies/VA.csv",header=true)
names!(VA, Symbol.(colnames))
VB = CSV.read("C:/Users/Andrew.Bannerman/Desktop/MARS/risk studies/VB.csv",header=true)
names!(VB, Symbol.(colnames))
VC = CSV.read("C:/Users/Andrew.Bannerman/Desktop/MARS/risk studies/VC.csv",header=true)
names!(VC, Symbol.(colnames))
VF = CSV.read("C:/Users/Andrew.Bannerman/Desktop/MARS/risk studies/VF.csv",header=true)
names!(VF, Symbol.(colnames))
VN = CSV.read("C:/Users/Andrew.Bannerman/Desktop/MARS/risk studies/VN.csv",header=true)
names!(VN, Symbol.(colnames))
WB = CSV.read("C:/Users/Andrew.Bannerman/Desktop/MARS/risk studies/WB.csv",header=true)
names!(WB, Symbol.(colnames))
WBC = CSV.read("C:/Users/Andrew.Bannerman/Desktop/MARS/risk studies/WBC.csv",header=true)
names!(WBC, Symbol.(colnames))
WC = CSV.read("C:/Users/Andrew.Bannerman/Desktop/MARS/risk studies/WC.csv",header=true)
names!(WC, Symbol.(colnames))
WCH = CSV.read("C:/Users/Andrew.Bannerman/Desktop/MARS/risk studies/WCH.csv",header=true)
names!(WCH, Symbol.(colnames))
WD = CSV.read("C:/Users/Andrew.Bannerman/Desktop/MARS/risk studies/WD.csv",header=true)
names!(WD, Symbol.(colnames))
WF = CSV.read("C:/Users/Andrew.Bannerman/Desktop/MARS/risk studies/WF.csv",header=true)
names!(WF, Symbol.(colnames))
WH = CSV.read("C:/Users/Andrew.Bannerman/Desktop/MARS/risk studies/WH.csv",header=true)
names!(WH, Symbol.(colnames))
WI = CSV.read("C:/Users/Andrew.Bannerman/Desktop/MARS/risk studies/WI.csv",header=true)
names!(WI, Symbol.(colnames))
WP = CSV.read("C:/Users/Andrew.Bannerman/Desktop/MARS/risk studies/WP.csv",header=true)
names!(WP, Symbol.(colnames))
WPD = CSV.read("C:/Users/Andrew.Bannerman/Desktop/MARS/risk studies/WPD.csv",header=true)
names!(WPD, Symbol.(colnames))
WS = CSV.read("C:/Users/Andrew.Bannerman/Desktop/MARS/risk studies/WS.csv",header=true)
names!(WS, Symbol.(colnames))
WW = CSV.read("C:/Users/Andrew.Bannerman/Desktop/MARS/risk studies/WW.csv",header=true)
names!(WW, Symbol.(colnames))
# Build 1x df
out = vcat(AI,AR,AS,BC,BM,CH,DC,DCS,DCW,DF,DM,DO,DSB,DSG,EX,EXH,GAY,GD,GF,GP,GW,JF,LCF,LO,LPM,ME,N2,NF,PF,PL,PV,PW,SC,SV,VA,VB,VC,VF,VN,
WB,WBC,WC,WCH,WD,WF,WH,WI,WP,WPD,WS,WW)
df = dropmissing(out, :Size) # remove missings
df[:Size] = chop.(df[:Size]) # chop not needed strings
df = df[df.Size .!= "X", :] # subset to remove erronous X values
# data clean pipe diameter
dia = df.Size # pull array from df
# cnvert fractions to decimals
for i=1:length(dia)
if dia[i] == "1 1/2"
dia[i] = "1.5"
elseif dia[i] == "1/2"
dia[i] = ".5"
elseif dia[i] == "3/4"
dia[i] = ".75"
elseif dia[i] == "6\" & 8"
dia[i] ="8"
elseif dia[i] == "{4"
dia[i] ="4"
elseif dia[i] == "{2"
dia[i] ="2"
end
end
df[:Size] = parse.(Float64, dia) # place data wrangled array back to the df
# data clean pipe schedule
df = dropmissing(df, :Sch) # remove missings
pipe_sch = df.Sch
spec = df.Spec
for i = 1:length(pipe_sch)
if pipe_sch[i] == "SS" && spec[i] == "MGA"
print("this occured1")
pipe_sch[i] = "80"
end
if pipe_sch[i] == "SS-MGA"
print("this occured2")
pipe_sch[i] = "80"
end
if pipe_sch[i] == "SS" && spec[i] == "G"
print("this occured3")
pipe_sch[i] = "80"
end
if pipe_sch[i] == "SS" && spec[i] == "CC"
print("this occured3")
pipe_sch[i] = "160"
end
if pipe_sch[i] == "SS-C"
print("this occured3")
pipe_sch[i] = "80"
end
if pipe_sch[i] == "20D"
print("this occured3")
pipe_sch[i] = "20"
end
end
df[:Sch] = pipe_sch
print(unique(pipe_sch))
df = df[df.Sch .!= "SS", :] # subset to remove erronous X values
df = df[df.Sch .!= "316SS", :] # subset to remove erronous X values
df = df[df.Sch .!= "0.188", :] # subset to remove erronous X values
df = df[df.Sch .!= "1.5625", :] # subset to remove erronous X values
df = df[df.Sch .!= "1.51\"", :] # subset to remove erronous X values
pipe_spec = df.Spec
pressure_class = Int64.(zeros(length(pipe_spec)))
A = 150
ALT = 150
AV = 150
AW = 150
B = 300
BB = 300
BLT = 300
C = 600
CC = 600
CPVC = 150
D = 900
DD = 900
DDHT = 900
DHT = 900
DLT = 900
E = 1500
EE = 1500
F = 2500
FF = 2500
FHP = 2500
FRAC = 15000
G = 150
I = 300
J = 5000
JJ = 5000
N = 150
P = 150
PVC = 150
SSA = 150
SSB = 300
SSC = 600
SSD = 900
T = 10000
THP = 10000
TTHP = 10000
UF = 150
UWP = 150
V = 150
IFF = 2500
IFJ = 5000
IFT = 10000
GPLD = 900
OPLD = 900
OPLE = 10000
# USCG
MB = 300
MDA = 150
MGA = 150
MQ = 150
MR = 150
MSS = 150
MV = 150
MVB = 300
MVEN = 125
# SP** = 150
# remove white space
for i = 1:nrow(df)
missings_id = ismissing(df.Spec[i])
if missings_id == false
df.Spec[i] = strip(chop(df.Spec[i]))
end
end
pressure_class = zeros(nrow(df))
upper_pressure_limit_pipe_spec = pressure_class
Do = zeros(nrow(df))
S = zeros(nrow(df))
YS = zeros(nrow(df))
TS = zeros(nrow(df))
i=1
for i = 1:nrow(df)
missings_id = ismissing(df.Spec[i])
if missings_id == false && df.Spec[i] == "A"
pressure_class[i] = A
upper_pressure_limit_pipe_spec[i] = 285.0
elseif missings_id == false && df.Spec[i] == "A/WE"
pressure_class[i] = A
upper_pressure_limit_pipe_spec[i] = 285.0
elseif missings_id == false && df.Spec[i] == "A/IC"
pressure_class[i] = A
upper_pressure_limit_pipe_spec[i] = 285.0
elseif missings_id == false && df.Spec[i] == "A/PV"
pressure_class[i] = A
upper_pressure_limit_pipe_spec[i] = 285.0
elseif missings_id == false && df.Spec[i] == "ALT"
pressure_class[i] = ALT
upper_pressure_limit_pipe_spec[i] = 285.0
elseif missings_id == false && df.Spec[i] == "AV"
pressure_class[i] = AV
upper_pressure_limit_pipe_spec[i] = 100.0
elseif missings_id == false && df.Spec[i] == "AV/PVM"
pressure_class[i] = AV
upper_pressure_limit_pipe_spec[i] = 100.0
elseif missings_id == false && df.Spec[i] == "AV/IC"
pressure_class[i] = AV
upper_pressure_limit_pipe_spec[i] = 100.0
elseif missings_id == false && df.Spec[i] == "AW"
pressure_class[i] = AV
upper_pressure_limit_pipe_spec[i] = 285.0
elseif missings_id == false && df.Spec[i] == "B"
pressure_class[i] = B
upper_pressure_limit_pipe_spec[i] = 740.0
elseif missings_id == false && df.Spec[i] == "B/WE"
pressure_class[i] = B
upper_pressure_limit_pipe_spec[i] = 740.0
elseif missings_id == false && df.Spec[i] == "BLT"
pressure_class[i] = BLT
upper_pressure_limit_pipe_spec[i] = 740.0
elseif missings_id == false && df.Spec[i] == "C"
pressure_class[i] = C
upper_pressure_limit_pipe_spec[i] = 1480.0
elseif missings_id == false && df.Spec[i] == "CC"
pressure_class[i] = CC
upper_pressure_limit_pipe_spec[i] = 1480.0
elseif missings_id == false && df.Spec[i] == "CC/WEL"
pressure_class[i] = CC
upper_pressure_limit_pipe_spec[i] = 1480.0
elseif missings_id == false && df.Spec[i] == "CC/WE"
pressure_class[i] = CC
upper_pressure_limit_pipe_spec[i] = 1480.0
elseif missings_id == false && df.Spec[i] == "CC/PV"
pressure_class[i] = CC
upper_pressure_limit_pipe_spec[i] = 1480.0
elseif missings_id == false && df.Spec[i] == "CC/ICP"
pressure_class[i] = CC
upper_pressure_limit_pipe_spec[i] = 1480.0
elseif missings_id == false && df.Spec[i] == "CPVC"
pressure_class[i] = CPVC
upper_pressure_limit_pipe_spec[i] = 0.0
elseif missings_id == false && df.Spec[i] == "CPV"
pressure_class[i] = CPVC
upper_pressure_limit_pipe_spec[i] = 0.0
elseif missings_id == false && df.Spec[i] == "D"
pressure_class[i] = D
upper_pressure_limit_pipe_spec[i] = 2220.0
elseif missings_id == false && df.Spec[i] == "D /WE"
pressure_class[i] = D
upper_pressure_limit_pipe_spec[i] = 2220.0
elseif missings_id == false && df.Spec[i] == "DD"
pressure_class[i] = DD
upper_pressure_limit_pipe_spec[i] = 2220.0
elseif missings_id == false && df.Spec[i] == "DD/DVM"
pressure_class[i] = DD
upper_pressure_limit_pipe_spec[i] = 2220.0
elseif missings_id == false && df.Spec[i] == "DD/WE"
pressure_class[i] = DD
upper_pressure_limit_pipe_spec[i] = 2220.0
elseif missings_id == false && df.Spec[i] == "DD/WEL"
pressure_class[i] = DD
upper_pressure_limit_pipe_spec[i] = 2220.0
elseif missings_id == false && df.Spec[i] == "DD/ICP"
pressure_class[i] = DD
upper_pressure_limit_pipe_spec[i] = 2220.0
elseif missings_id == false && df.Spec[i] == "DD/PV"
pressure_class[i] = DD
upper_pressure_limit_pipe_spec[i] = 2220.0
elseif missings_id == false && df.Spec[i] == "DDHT"
pressure_class[i] = DDHT
upper_pressure_limit_pipe_spec[i] = 2220.0
elseif missings_id == false && df.Spec[i] == "DHT"
pressure_class[i] = DHT
upper_pressure_limit_pipe_spec[i] = 2220.0
elseif missings_id == false && df.Spec[i] == "DLT"
pressure_class[i] = DLT
upper_pressure_limit_pipe_spec[i] = 2220.0
elseif missings_id == false && df.Spec[i] == "E"
pressure_class[i] = E
upper_pressure_limit_pipe_spec[i] = 3700.0
elseif missings_id == false && df.Spec[i] == "EE"
pressure_class[i] = EE
upper_pressure_limit_pipe_spec[i] = 3705.0
elseif missings_id == false && df.Spec[i] == "EE/WE"
pressure_class[i] = EE
upper_pressure_limit_pipe_spec[i] = 3705.0
elseif missings_id == false && df.Spec[i] == "F"
pressure_class[i] = F
upper_pressure_limit_pipe_spec[i] = 6000.0
elseif missings_id == false && df.Spec[i] == "FF"
pressure_class[i] = FF
upper_pressure_limit_pipe_spec[i] = 6000.0
elseif missings_id == false && df.Spec[i] == "FHP"
pressure_class[i] = FHP
upper_pressure_limit_pipe_spec[i] = 6000.0
elseif missings_id == false && df.Spec[i] == "FRAC"
pressure_class[i] = FRAC
upper_pressure_limit_pipe_spec[i] = 15000.0
elseif missings_id == false && df.Spec[i] == "G"
pressure_class[i] = G
upper_pressure_limit_pipe_spec[i] = 285.0
elseif missings_id == false && df.Spec[i] == "I"
pressure_class[i] = I
upper_pressure_limit_pipe_spec[i] = 740.0
elseif missings_id == false && df.Spec[i] == "I /FS"
pressure_class[i] = I
upper_pressure_limit_pipe_spec[i] = 740.0
elseif missings_id == false && df.Spec[i] == "I/FS"
pressure_class[i] = I
upper_pressure_limit_pipe_spec[i] = 740.0
elseif missings_id == false && df.Spec[i] == "J"
pressure_class[i] = J
upper_pressure_limit_pipe_spec[i] = 5000.0
elseif missings_id == false && df.Spec[i] == "JJ"
pressure_class[i] = JJ
upper_pressure_limit_pipe_spec[i] = 5000.0
elseif missings_id == false && df.Spec[i] == "JJ/WEL"
pressure_class[i] = JJ
upper_pressure_limit_pipe_spec[i] = 5000.0
elseif missings_id == false && df.Spec[i] == "JJ/WE"
pressure_class[i] = JJ
upper_pressure_limit_pipe_spec[i] = 5000.0
elseif missings_id == false && df.Spec[i] == "N"
pressure_class[i] = N
upper_pressure_limit_pipe_spec[i] = 285.0
elseif missings_id == false && df.Spec[i] == "P"
pressure_class[i] = P
upper_pressure_limit_pipe_spec[i] = 285.0
elseif missings_id == false && df.Spec[i] == "PVC/US"
pressure_class[i] = PVC
upper_pressure_limit_pipe_spec[i] = 150.0
elseif missings_id == false && df.Spec[i] == "PVC"
pressure_class[i] = PVC
upper_pressure_limit_pipe_spec[i] = 150.0
elseif missings_id == false && df.Spec[i] == "PVC/TW"
pressure_class[i] = PVC
upper_pressure_limit_pipe_spec[i] = 150.0
elseif missings_id == false && df.Spec[i] == "SSA"
pressure_class[i] = SSA
upper_pressure_limit_pipe_spec[i] = 275.0
elseif missings_id == false && df.Spec[i] == "SSA/TW"
pressure_class[i] = SSA
upper_pressure_limit_pipe_spec[i] = 275.0
elseif missings_id == false && df.Spec[i] == "SSA/US"
pressure_class[i] = SSA
upper_pressure_limit_pipe_spec[i] = 275.0
elseif missings_id == false && df.Spec[i] == "SSB"
pressure_class[i] = SSB
upper_pressure_limit_pipe_spec[i] = 720.0
elseif missings_id == false && df.Spec[i] == "SSC"
pressure_class[i] = SSC
upper_pressure_limit_pipe_spec[i] = 1440.0
elseif missings_id == false && df.Spec[i] == "SSC/TW"
pressure_class[i] = SSC
upper_pressure_limit_pipe_spec[i] = 1440.0
elseif missings_id == false && df.Spec[i] == "SSC/US"
pressure_class[i] = SSC
upper_pressure_limit_pipe_spec[i] = 1440.0
elseif missings_id == false && df.Spec[i] == "SSD"
pressure_class[i] = SSD
upper_pressure_limit_pipe_spec[i] = 2160.0
elseif missings_id == false && df.Spec[i] == "SSD/WE"
pressure_class[i] = SSD
upper_pressure_limit_pipe_spec[i] = 2160.0
elseif missings_id == false && df.Spec[i] == "T"
pressure_class[i] = T
upper_pressure_limit_pipe_spec[i] = 10000.0
elseif missings_id == false && df.Spec[i] == "THP"
pressure_class[i] = THP
upper_pressure_limit_pipe_spec[i] = 10000.0
elseif missings_id == false && df.Spec[i] == "TTHP"
pressure_class[i] = TTHP
upper_pressure_limit_pipe_spec[i] = 10000.0
elseif missings_id == false && df.Spec[i] == "UF/PO"
pressure_class[i] = UF
upper_pressure_limit_pipe_spec[i] = 225.0
elseif missings_id == false && df.Spec[i] == "UF"
pressure_class[i] = UF
upper_pressure_limit_pipe_spec[i] = 225.0
elseif missings_id == false && df.Spec[i] == "UWP"
pressure_class[i] = UWP
upper_pressure_limit_pipe_spec[i] = 200.0
elseif missings_id == false && df.Spec[i] == "V"
pressure_class[i] = V
upper_pressure_limit_pipe_spec[i] = 200.0
elseif missings_id == false && df.Spec[i] == "IFF"
pressure_class[i] = IFF
upper_pressure_limit_pipe_spec[i] = 6000.0
elseif missings_id == false && df.Spec[i] == "IFJ"
pressure_class[i] = IFJ
upper_pressure_limit_pipe_spec[i] = 5000.0
elseif missings_id == false && df.Spec[i] == "IFT"
pressure_class[i] = IFT
upper_pressure_limit_pipe_spec[i] = 10000.0
elseif missings_id == false && df.Spec[i] == "GPLD"
pressure_class[i] = GPLD
upper_pressure_limit_pipe_spec[i] = 2220.0
elseif missings_id == false && df.Spec[i] == "OPLD"
pressure_class[i] = OPLD
upper_pressure_limit_pipe_spec[i] = 2220.0
elseif missings_id == false && df.Spec[i] == "OPLE"
pressure_class[i] = OPLE
upper_pressure_limit_pipe_spec[i] = 3700.0
elseif missings_id == false && df.Spec[i] == "MB"
pressure_class[i] = MB
upper_pressure_limit_pipe_spec[i] = 350.0
elseif missings_id == false && df.Spec[i] == "MDA"
pressure_class[i] = MDA
upper_pressure_limit_pipe_spec[i] = 150.0
elseif missings_id == false && df.Spec[i] == "MGA"
pressure_class[i] = MGA
upper_pressure_limit_pipe_spec[i] = 150.0
elseif missings_id == false && df.Spec[i] == "MQ"
pressure_class[i] = MQ
upper_pressure_limit_pipe_spec[i] = 200.0
elseif missings_id == false && df.Spec[i] == "MR"
pressure_class[i] = MR
upper_pressure_limit_pipe_spec[i] = 200.0
elseif missings_id == false && df.Spec[i] == "MSS"
pressure_class[i] = MSS
upper_pressure_limit_pipe_spec[i] = 150.0
elseif missings_id == false && df.Spec[i] == "MV"
pressure_class[i] = MV
upper_pressure_limit_pipe_spec[i] = 200.0
elseif missings_id == false && df.Spec[i] == "MV/PPA"
pressure_class[i] = MV
upper_pressure_limit_pipe_spec[i] = 200.0
elseif missings_id == false && df.Spec[i] == "MVB"
pressure_class[i] = MVB
upper_pressure_limit_pipe_spec[i] = 300.0
elseif missings_id == false && df.Spec[i] == "MVEN"
pressure_class[i] = MVEN
upper_pressure_limit_pipe_spec[i] = 125.0
end
end
# material S value @ temperature combination
df.P = upper_pressure_limit_pipe_spec
Do = zeros(nrow(df))
names(df)
print(unique(df.Size))
for i = 1:nrow(df)
if df.Size[i] == 0.5
Do[i] = 0.840
elseif df.Size[i] == 0.75
Do[i] = 1.050
elseif df.Size[i] == 1.0
Do[i] = 1.315
elseif df.Size[i] == 1.5
Do[i] = 1.900
elseif df.Size[i] == 2.0
Do[i] = 2.375
elseif df.Size[i] == 3.0
Do[i] = 3.500
elseif df.Size[i] == 4.0
Do[i] = 4.5
elseif df.Size[i] == 5.0
Do[i] = 5.563
elseif df.Size[i] == 6.0
Do[i] = 6.625
elseif df.Size[i] == 8.0
Do[i] = 8.625
elseif df.Size[i] == 10.0
Do[i] = 10.75
elseif df.Size[i] == 12.0
Do[i] = 12.750
elseif df.Size[i] == 14.0
Do[i] = 14.0
elseif df.Size[i] == 16.0
Do[i] = 16.0
elseif df.Size[i] == 18.0
Do[i] = 18.0
elseif df.Size[i] == 20.0
Do[i] = 20.0
elseif df.Size[i] == 22.0
Do[i] = 22.0
elseif df.Size[i] == 24.0
Do[i] = 24.0
end
end
# append to df
df.Do = Do
S = zeros(nrow(df))
YS = zeros(nrow(df))
TS = zeros(nrow(df))
design_code = fill("",nrow(df))
i=1
for i = 1:nrow(df)
missings_id = ismissing(df.Spec[i])
if missings_id == false && df.Spec[i] == "A"
# df pipe D
S[i] = 20000
YS[i] = 35000
TS[i] = 60000
design_code[i] = "ASME B31.3"
elseif missings_id == false && df.Spec[i] == "A/WE"
S[i] = 20000
YS[i] = 35000
TS[i] = 60000
design_code[i] = "ASME B31.3"
elseif missings_id == false && df.Spec[i] == "A/IC"
S[i] = 20000
YS[i] = 35000
TS[i] = 60000
design_code[i] = "ASME B31.3"
elseif missings_id == false && df.Spec[i] == "A/PV"
S[i] = 20000
YS[i] = 35000
TS[i] = 60000
design_code[i] = "ASME B31.3"
elseif missings_id == false && df.Spec[i] == "ALT"
S[i] = 20000
YS[i] = 35000
TS[i] = 60000
design_code[i] = "ASME B31.3"
elseif missings_id == false && df.Spec[i] == "AV"
S[i] = 20000
YS[i] = 35000
TS[i] = 60000
design_code[i] = "ASME B31.3"
elseif missings_id == false && df.Spec[i] == "AV/PVM"
S[i] = 20000
YS[i] = 35000
TS[i] = 60000
design_code[i] = "ASME B31.3"
elseif missings_id == false && df.Spec[i] == "AV/IC"
S[i] = 20000
YS[i] = 35000
TS[i] = 60000
design_code[i] = "ASME B31.3"
elseif missings_id == false && df.Spec[i] == "AW"
S[i] = 20000
YS[i] = 35000
TS[i] = 60000
design_code[i] = "ASME B31.3"
elseif missings_id == false && df.Spec[i] == "B"
S[i] = 20000
YS[i] = 35000
TS[i] = 60000
design_code[i] = "ASME B31.3"
elseif missings_id == false && df.Spec[i] == "B/WE"
S[i] = 20000
YS[i] = 35000
TS[i] = 60000
design_code[i] = "ASME B31.3"
elseif missings_id == false && df.Spec[i] == "BLT"
S[i] = 20000
YS[i] = 35000
TS[i] = 60000
design_code[i] = "ASME B31.3"
elseif missings_id == false && df.Spec[i] == "C"
S[i] = 20000
YS[i] = 35000
TS[i] = 60000
design_code[i] = "ASME B31.3"
elseif missings_id == false && df.Spec[i] == "CC"
S[i] = 20000
YS[i] = 35000
TS[i] = 60000
design_code[i] = "ASME B31.3"
elseif missings_id == false && df.Spec[i] == "CC/WEL"
S[i] = 20000
YS[i] = 35000
TS[i] = 60000
design_code[i] = "ASME B31.3"
elseif missings_id == false && df.Spec[i] == "CC/WE"
S[i] = 20000
YS[i] = 35000
TS[i] = 60000
design_code[i] = "ASME B31.3"
elseif missings_id == false && df.Spec[i] == "CC/PV"
S[i] = 20000
YS[i] = 35000
TS[i] = 60000
design_code[i] = "ASME B31.3"
elseif missings_id == false && df.Spec[i] == "CC/ICP"
S[i] = 20000
YS[i] = 35000
TS[i] = 60000
design_code[i] = "ASME B31.3"
elseif missings_id == false && df.Spec[i] == "CPVC"
S[i] = 0
YS[i] = 0
TS[i] = 0
design_code[i] = ""
elseif missings_id == false && df.Spec[i] == "CPV"
S[i] = 0
YS[i] = 0
TS[i] = 0
design_code[i] = ""
elseif missings_id == false && df.Spec[i] == "D"
S[i] = 20000
YS[i] = 35000
TS[i] = 60000
design_code[i] = "ASME B31.3"
elseif missings_id == false && df.Spec[i] == "D /WE"
S[i] = 20000
YS[i] = 35000
TS[i] = 60000
design_code[i] = "ASME B31.3"
elseif missings_id == false && df.Spec[i] == "DD"
S[i] = 20000
YS[i] = 35000
TS[i] = 60000
design_code[i] = "ASME B31.3"
elseif missings_id == false && df.Spec[i] == "DD/DVM"
S[i] = 20000
YS[i] = 35000
TS[i] = 60000
design_code[i] = "ASME B31.3"
elseif missings_id == false && df.Spec[i] == "DD/WE"
S[i] = 20000
YS[i] = 35000
TS[i] = 60000
design_code[i] = "ASME B31.3"
elseif missings_id == false && df.Spec[i] == "DD/WEL"
S[i] = 20000
YS[i] = 35000
TS[i] = 60000
design_code[i] = "ASME B31.3"
elseif missings_id == false && df.Spec[i] == "DD/ICP"
S[i] = 20000
YS[i] = 35000
TS[i] = 60000
design_code[i] = "ASME B31.3"
elseif missings_id == false && df.Spec[i] == "DD/PV"
S[i] = 20000
YS[i] = 35000
TS[i] = 60000
design_code[i] = "ASME B31.3"
elseif missings_id == false && df.Spec[i] == "DDHT"
S[i] = 20000
YS[i] = 35000
TS[i] = 60000
design_code[i] = "ASME B31.3"
elseif missings_id == false && df.Spec[i] == "DHT"
S[i] = 20000
YS[i] = 35000
TS[i] = 60000
design_code[i] = "ASME B31.3"
elseif missings_id == false && df.Spec[i] == "DLT"
S[i] = 20000
YS[i] = 35000
TS[i] = 60000
design_code[i] = "ASME B31.3"
elseif missings_id == false && df.Spec[i] == "E"
if df.Size[i] <= 12.0
S[i] = 20000
YS[i] = 35000
TS[i] = 60000
design_code[i] = "ASME B31.3"
elseif df.Size[i] > 12.0
S[i] = 23300
YS[i] = 40000
TS[i] = 70000
design_code[i] = "ASME B31.3"
end
elseif missings_id == false && df.Spec[i] == "EE"
if df.Size[i] <= 4.0
S[i] = 20000
YS[i] = 35000
TS[i] = 60000
design_code[i] = "ASME B31.3"
elseif df.Size[i] > 4.0
S[i] = 23300
YS[i] = 40000
TS[i] = 70000
design_code[i] = "ASME B31.3"
end
elseif missings_id == false && df.Spec[i] == "EE/WE"
if df.Size[i] <= 4.0
S[i] = 20000
YS[i] = 35000
TS[i] = 60000
design_code[i] = "ASME B31.3"
elseif df.Size[i] > 4.0
S[i] = 23300
YS[i] = 40000
TS[i] = 70000
design_code[i] = "ASME B31.3"
end
elseif missings_id == false && df.Spec[i] == "F"
if df.Size[i] <= 3.0
S[i] = 20000
YS[i] = 35000
TS[i] = 60000
design_code[i] = "ASME B31.3"
elseif df.Size[i] > 3.0
S[i] = 23300
YS[i] = 40000
TS[i] = 70000
design_code[i] = "ASME B31.3"
end
elseif missings_id == false && df.Spec[i] == "FF"
if df.Size[i] <= 3.0
S[i] = 20000
YS[i] = 35000
TS[i] = 60000
design_code[i] = "ASME B31.3"
elseif df.Size[i] > 3.0
S[i] = 23300
YS[i] = 40000
TS[i] = 70000
design_code[i] = "ASME B31.3"
end
elseif missings_id == false && df.Spec[i] == "FHP"
if df.Size[i] <= 3.0
S[i] = 20000
YS[i] = 35000
TS[i] = 60000
design_code[i] = "ASME B31.3"
elseif df.Size[i] > 3.0
S[i] = 23300
YS[i] = 40000
TS[i] = 70000
design_code[i] = "ASME B31.3"
end
elseif missings_id == false && df.Spec[i] == "FRAC"
if df.Size[i] <= 3.0
S[i] = 20000
YS[i] = 35000
TS[i] = 60000
design_code[i] = "ASME B31.3"
elseif df.Size[i] > 3.0
S[i] = 2/3 * 110000
YS[i] = 110*1000
TS[i] = 115*1000
design_code[i] = "ASME B31.3"
end
elseif missings_id == false && df.Spec[i] == "G"
S[i] = 20000
YS[i] = 35000
TS[i] = 60000
design_code[i] = "ASME B31.3"
elseif missings_id == false && df.Spec[i] == "I"
S[i] = 20000
YS[i] = 35000
TS[i] = 60000
design_code[i] = "ASME B31.3"
elseif missings_id == false && df.Spec[i] == "I /FS"
S[i] = 20000
YS[i] = 35000
TS[i] = 60000
design_code[i] = "ASME B31.3"
elseif missings_id == false && df.Spec[i] == "I/FS"
S[i] = 20000
YS[i] = 35000
TS[i] = 60000
design_code[i] = "ASME B31.3"
elseif missings_id == false && df.Spec[i] == "J"
if df.Size[i] <= 4.0
S[i] = 20000
YS[i] = 35000
TS[i] = 60000
design_code[i] = "ASME B31.3"
elseif df.Size[i] > 4.0 && df.Size[i] <= 6.0
S[i] = 23300
YS[i] = 40000
TS[i] = 70000
design_code[i] = "ASME B31.3"
elseif df.Size[i] > 6.0
S[i] = 23300
YS[i] = 40000
TS[i] = 70000
design_code[i] = "ASME B31.3"
end
elseif missings_id == false && df.Spec[i] == "JJ"
if df.Size[i] <= 3.0
S[i] = 20000
YS[i] = 35000
TS[i] = 60000
design_code[i] = "ASME B31.3"
elseif df.Size[i] > 3.0 && df.Size[i] <= 6.0
S[i] = 23300
YS[i] = 40000
TS[i] = 70000
design_code[i] = "ASME B31.3"
elseif df.Size[i] > 6.0
S[i] = 23300
YS[i] = 40000
TS[i] = 70000
design_code[i] = "ASME B31.3"
end
elseif missings_id == false && df.Spec[i] == "JJ/WEL"
if df.Size[i] <= 3.0
S[i] = 20000
YS[i] = 35000
TS[i] = 60000
design_code[i] = "ASME B31.3"
elseif df.Size[i] > 3.0 && df.Size[i] <= 6.0
S[i] = 23300
YS[i] = 40000
TS[i] = 70000
design_code[i] = "ASME B31.3"
elseif df.Size[i] > 6.0
S[i] = 23300
YS[i] = 40000
TS[i] = 70000
design_code[i] = "ASME B31.3"
end
elseif missings_id == false && df.Spec[i] == "JJ/WE"
if df.Size[i] <= 3.0
S[i] = 20000
YS[i] = 35000
TS[i] = 60000
design_code[i] = "ASME B31.3"
elseif (df.Size[i] > 3.0) && (df.Size[i] <= 6.0)
S[i] = 23300
YS[i] = 40000
TS[i] = 70000
design_code[i] = "ASME B31.3"
elseif df.Size[i] > 6.0
S[i] = 23300
YS[i] = 40000
TS[i] = 70000
design_code[i] = "ASME B31.3"
end
elseif missings_id == false && df.Spec[i] == "N"
S[i] = 20000
YS[i] = 35000
TS[i] = 60000
design_code[i] = "ASME B31.3"
elseif missings_id == false && df.Spec[i] == "P"
S[i] = 23300
YS[i] = 40000
TS[i] = 70000
design_code[i] = "ASME B31.3"
elseif missings_id == false && df.Spec[i] == "PVC/US"
S[i] = 0
YS[i] = 0
TS[i] = 0
design_code[i] = "ASME B31.3"
elseif missings_id == false && df.Spec[i] == "PVC"
S[i] = 0
YS[i] = 0
TS[i] = 0
design_code[i] = "ASME B31.3"
elseif missings_id == false && df.Spec[i] == "PVC/TW"
S[i] = 0
YS[i] = 0
TS[i] = 0
design_code[i] = "ASME B31.3"
elseif missings_id == false && df.Spec[i] == "SSA"
S[i] = 16700
YS[i] = 25000
TS[i] = 70000
design_code[i] = "ASME B31.3"
elseif missings_id == false && df.Spec[i] == "SSA/TW"
S[i] = 16700
YS[i] = 25000
TS[i] = 70000
design_code[i] = "ASME B31.3"
elseif missings_id == false && df.Spec[i] == "SSA/US"
S[i] = 16700
YS[i] = 25000
TS[i] = 70000
design_code[i] = "ASME B31.3"
elseif missings_id == false && df.Spec[i] == "SSB"
S[i] = 16700
YS[i] = 25000
TS[i] = 70000
design_code[i] = "ASME B31.3"
elseif missings_id == false && df.Spec[i] == "SSC"
S[i] = 16700
YS[i] = 25000
TS[i] = 70000
design_code[i] = "ASME B31.3"
elseif missings_id == false && df.Spec[i] == "SSC/TW"
S[i] = 16700
YS[i] = 25000
TS[i] = 70000
design_code[i] = "ASME B31.3"
elseif missings_id == false && df.Spec[i] == "SSC/US"
S[i] = 16700
YS[i] = 25000
TS[i] = 70000
design_code[i] = "ASME B31.3"
elseif missings_id == false && df.Spec[i] == "SSD"
S[i] = 16700
YS[i] = 25000
TS[i] = 70000
design_code[i] = "ASME B31.3"
elseif missings_id == false && df.Spec[i] == "SSD/WE"
S[i] = 16700
YS[i] = 25000
TS[i] = 70000
design_code[i] = "ASME B31.3"
elseif missings_id == false && df.Spec[i] == "T"
S[i] = 2/3*65300.0
YS[i] = 65.3*1000
TS[i] = 77.6*1000
design_code[i] = "ASME B31.3"
elseif missings_id == false && df.Spec[i] == "THP"
S[i] = 2/3*65300.0
YS[i] = 65.3*1000
TS[i] = 77.6*1000
design_code[i] = "ASME B31.3"
elseif missings_id == false && df.Spec[i] == "TTHP"
S[i] = 2/3*65300.0
YS[i] = 65.3*1000
TS[i] = 77.6*1000
design_code[i] = "ASME B31.3"
elseif missings_id == false && df.Spec[i] == "UF/PO"
S[i] = 0
YS[i] = 0
TS[i] = 0
design_code[i] = "ASME B31.3"
elseif missings_id == false && df.Spec[i] == "UF"
S[i] = 0
YS[i] = 0
TS[i] = 0
design_code[i] = "ASME B31.3"
elseif missings_id == false && df.Spec[i] == "UWP"
S[i] = 0
YS[i] = 0
TS[i] = 0
design_code[i] = "ASME B31.3"
elseif missings_id == false && df.Spec[i] == "V"
S[i] = 0
YS[i] = 0
TS[i] = 0
design_code[i] = "ASME B31.3"
elseif missings_id == false && df.Spec[i] == "IFF"
S[i] = 0
YS[i] = 0
TS[i] = 0
design_code[i] = "ASME B31.3"
elseif missings_id == false && df.Spec[i] == "IFJ"
S[i] = 0
YS[i] = 0
TS[i] = 0
design_code[i] = "ASME B31.3"
elseif missings_id == false && df.Spec[i] == "IFT"
S[i] = 0
YS[i] = 0
TS[i] = 0
design_code[i] = "ASME B31.3"
elseif missings_id == false && df.Spec[i] == "GPLD"
S[i] = 0
YS[i] = 0
TS[i] = 0
design_code[i] = "ASME B31.3"
elseif missings_id == false && df.Spec[i] == "OPLD"
S[i] = 0
YS[i] = 0
TS[i] = 0
design_code[i] = "ASME B31.3"
elseif missings_id == false && df.Spec[i] == "OPLE"
S[i] = 0
YS[i] = 0
TS[i] = 0
design_code[i] = "ASME B31.3"
elseif missings_id == false && df.Spec[i] == "MB"
S[i] = 20000
YS[i] = 35000
TS[i] = 60000
design_code[i] = "ASME B31.1"
elseif missings_id == false && df.Spec[i] == "MDA"
S[i] = 20000
YS[i] = 35000
TS[i] = 60000
design_code[i] = "ASME B31.1"
elseif missings_id == false && df.Spec[i] == "MGA"
S[i] = 20000
YS[i] = 35000
TS[i] = 60000
design_code[i] = "ASME B31.1"
elseif missings_id == false && df.Spec[i] == "MQ"
S[i] = 0
YS[i] = 0
TS[i] = 0
design_code[i] = "ASME B31.1"
elseif missings_id == false && df.Spec[i] == "MR"
S[i] = 0
YS[i] = 0
TS[i] = 0
design_code[i] = "ASME B31.1"
elseif missings_id == false && df.Spec[i] == "MSS"
S[i] = 16700
YS[i] = 25000
TS[i] = 70000
design_code[i] = "ASME B31.1"
elseif missings_id == false && df.Spec[i] == "MV"
S[i] = 0
YS[i] = 0
TS[i] = 0
design_code[i] = "ASME B31.1"
elseif missings_id == false && df.Spec[i] == "MV/PPA"
S[i] = 0
YS[i] = 0
TS[i] = 0
design_code[i] = "ASME B31.1"
elseif missings_id == false && df.Spec[i] == "MVB"
S[i] = 0
YS[i] = 0
TS[i] = 0
design_code[i] = "ASME B31.1"
elseif missings_id == false && df.Spec[i] == "MVEN"
S[i] = 20000
YS[i] = 35000
TS[i] = 60000
design_code[i] = "ASME B31.1"
end
end
df.S = S
df.YS = YS
df.TS = TS
df.design_code = design_code
unique(df.Sch)
for i in 1:nrow(df)
if df.Sch[i] == 80
df.Sch[i] = "080"
elseif df.Sch[i] == 40
df.Sch[i] = "040"
elseif df.Sch[i] == 20
df.Sch[i] = "020"
elseif df.Sch[i] == "040S"
df.Sch[i] = "040"
elseif df.Sch[i] == 200
df.Sch[i] = "200"
elseif df.Sch[i] == 160
df.Sch[i] = "0160"
elseif df.Sch[i] == "40"
df.Sch[i] = "040"
elseif df.Sch[i] == "80"
df.Sch[i] = "080"
elseif df.Sch[i] == "20"
df.Sch[i] = "020"
end
end
print(unique(df.Sch))
df[:unique_line_no] = join.(df[:Sch],df[:Line_No],df[:Spec])
df = unique(df, :unique_line_no)
# assoicate wdf thickness
# do nominal WT for each
d_050_40 = .109
d_050_80 = .147
d_050_160 = .188
d_050_xxs = .294
d_075_40 = 0.113
d_075_80 = 0.154
d_075_160 = 0.219
d_075_xxs = 0.308
d_1_40 = 0.133
d_1_80 = 0.179
d_1_160 = 0.250
d_1_xxs = 0.358
d_1_5_40 = 0.145
d_1_5_80 = 0.200
d_1_5_160 = 0.281
d_1_5_xxs = 0.400
d_2_40 = .154
d_2_std = .154
d_2_80 = .218
d_2_xs = .218
d_2_160 = .344
d_2_xxs = .436
d_2_5_40 = 0.203
d_2_5_std = 0.203
d_2_5_80 = 0.276
d_2_5_xs = 0.276
d_2_5_160 = 0.375
d_2_5_xxs = 0.552
d_3_40 = 0.216
d_3_std = 0.216
d_3_80 = 0.300
d_3_xs = 0.300
d_3_160 = 0.438
d_3_xxs = 0.600
d_3_5_40 = 0.226
d_3_5_std = 0.226
d_3_5_80 = 0.318
d_3_5_xs = 0.318
d_4_40 = 0.237
d_4_std = 0.237
d_4_80 = 0.337
d_4_xs = 0.337
d_4_120 = 0.438
d_4_160 = 0.531
d_4_xxs = 0.674
d_5_40 = 0.258
d_5_std = 0.258
d_5_80 = 0.375
d_5_xs = 0.375
d_5_120 = 0.500
d_5_160 = 0.625
d_5_xxs = 0.750
d_6_40 = 0.280
d_6_std = 0.280
d_6_80 = 0.432
d_6_xs = 0.432
d_6_120 = 0.562
d_6_160 = 0.719
d_6_xxs = 0.864
d_8_20 = 0.250
d_8_30 = 0.277
d_8_40 = 0.322
d_8_std = 0.322
d_8_60 = 0.406
d_8_80 = 0.500
d_8_xs = 0.500
d_8_100 = 0.594
d_8_120 = 0.719
d_8_140 = 0.812
d_8_xxs = 0.875
d_8_160 = 0.906
d_10_20 = 0.250
d_10_30 = 0.307
d_10_40 = 0.365
d_10_std = 0.365
d_10_60 = 0.500
d_10_xs = 0.500
d_10_80 = 0.594
d_10_100 = 0.719
d_10_120 = 0.844
d_10_140 = 1.000
d_10_160 = 1.125
d_12_20 = 0.250
d_12_30 = 0.330
d_12_std = 0.375
d_12_40 = 0.406
d_12_xs = 0.500
d_12_60 = 0.562
d_12_80 = 0.688
d_12_100 = 0.844
d_12_120 = 1.000
d_12_140 = 1.125
d_12_160 = 1.312
d_14_10 = 0.250
d_14_20 = 0.312
d_14_30 = 0.375
d_14_40 = 0.438
d_14_xs = 0.500
d_14_60 = 0.594
d_14_80 = 0.750
d_14_100 = 0.938
d_14_120 = 1.094
d_14_140 = 1.125
d_14_160 = 1.406
d_16_10 = 0.250
d_16_20 = 0.312
d_16_30 = 0.375
d_16_40 = 0.500
d_16_60 = 0.656
d_16_80 = 0.844
d_16_100 = 1.0311
d_16_120 = 1.219
d_16_140 = 1.438
d_16_160 = 1.594
d_18_10 = 0.250
d_18_20 = 0.312
d_18_std = 0.375
d_18_30 = 0.438
d_18_xs = 0.500
d_18_40 = 0.562
d_18_60 = 0.750
d_18_80 = 0.938
d_18_100 = 1.156
d_18_120 = 1.375
d_18_140 = 1.562
d_18_160 = 1.781
d_20_10 = 0.250
d_20_20 = 0.375
d_20_30 = 0.500
d_20_40 = 0.594
d_20_60 = 0.812
d_20_80 = 1.031
d_20_100 = 1.281
d_20_120 = 1.500
d_20_140 = 1.750
d_20_160 = 1.969
d_22_10 = 0.250
d_22_20 = 0.375
d_22_30 = 0.500
d_22_60 = 0.875
d_22_80 = 1.125
d_22_100 = 1.375
d_22_120 = 1.625
d_22_140 = 1.875
d_22_160 = 2.125
d_24_10 = 0.250
d_24_20 = 0.375
d_24_xs = 0.500
d_24_30 = 0.562
d_24_40 = 0.688
d_24_60 = 0.969
d_24_80 = 1.219
d_24_100 = 1.531
d_24_120 = 1.812
d_24_140 = 2.062
d_24_160 = 2.344
unique(df[:Sch])
print(sort(unique(df.Size)))
# [0.75, 1.0, 1.5, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 10.0, 12.0, 14.0, 16.0, 18.0, 20.0]
# Any["XXS", "160", "080", "120", "XS", "100", "060", "STD", "040", "X65", "200", "150", "010", "0160", "020", "225"]
nominal_wt = zeros(nrow(df))
for i = 1:length(nominal_wt)
# .75
if df[:Size][i] == .75 && df[:Sch][i] == "040"
nominal_wt[i] = d_075_40
elseif df[:Size][i] == .75 && df[:Sch][i] == "080"
nominal_wt[i] = d_075_80
elseif df[:Size][i] == .75 && df[:Sch][i] == "160"
nominal_wt[i] = d_075_160
elseif df[:Size][i] == .75 && df[:Sch][i] == "XXS"
nominal_wt[i] = d_075_xxs
# 1.0
elseif df[:Size][i] == 1.0 && df[:Sch][i] == "040"
nominal_wt[i] = d_1_40
elseif df[:Size][i] == 1.0 && df[:Sch][i] == "080"
nominal_wt[i] = d_1_80
elseif df[:Size][i] == 1.0 && df[:Sch][i] == "160"
nominal_wt[i] = d_1_160
elseif df[:Size][i] == 1.0 && df[:Sch][i] == "XXS"
nominal_wt[i] = d_1_xxs
# 1.5
elseif df[:Size][i] == 1.5 && df[:Sch][i] == "040"
nominal_wt[i] = d_1_5_40
elseif df[:Size][i] == 1.5 && df[:Sch][i] == "080"
nominal_wt[i] = d_1_5_80
elseif df[:Size][i] == 1.5 && df[:Sch][i] == "160"
nominal_wt[i] = d_1_5_160
elseif df[:Size][i] == 1.5 && df[:Sch][i] == "XXS"
nominal_wt[i] = d_1_5_xxs
# 2.0
elseif df[:Size][i] == 2.0 && df[:Sch][i] == "040"
nominal_wt[i] = d_2_40
elseif df[:Size][i] == 2.0 && df[:Sch][i] == "080"
nominal_wt[i] = d_2_80
elseif df[:Size][i] == 2.0 && df[:Sch][i] == "160"
nominal_wt[i] = d_2_160
elseif df[:Size][i] == 2.0 && df[:Sch][i] == "XXS"
nominal_wt[i] = d_2_xxs
elseif df[:Size][i] == 2.0 && df[:Sch][i] == "STD"
nominal_wt[i] = d_2_40
# 3.0
elseif df[:Size][i] == 3.0 && df[:Sch][i] == "040"
nominal_wt[i] = d_3_40
elseif df[:Size][i] == 3.0 && df[:Sch][i] == "080"
nominal_wt[i] = d_3_80
elseif df[:Size][i] == 3.0 && df[:Sch][i] == "160"
nominal_wt[i] = d_3_160
elseif df[:Size][i] == 3.0 && df[:Sch][i] == "XXS"
nominal_wt[i] = d_3_xxs
# 4.0
elseif df[:Size][i] == 4.0 && df[:Sch][i] == "040"
nominal_wt[i] = d_4_40
elseif df[:Size][i] == 4.0 && df[:Sch][i] == "080"
nominal_wt[i] = d_4_80
elseif df[:Size][i] == 4.0 && df[:Sch][i] == "120"
nominal_wt[i] = d_4_120
elseif df[:Size][i] == 4.0 && df[:Sch][i] == "160"
nominal_wt[i] = d_4_160
elseif df[:Size][i] == 4.0 && df[:Sch][i] == "XXS"
nominal_wt[i] = d_4_xxs
# 5.0
elseif df[:Size][i] == 5.0 && df[:Sch][i] == "040"
nominal_wt[i] = d_5_40
elseif df[:Size][i] == 5.0 && df[:Sch][i] == "080"
nominal_wt[i] = d_5_80
elseif df[:Size][i] == 5.0 && df[:Sch][i] == "120"
nominal_wt[i] = d_5_120
elseif df[:Size][i] == 5.0 && df[:Sch][i] == "160"
nominal_wt[i] = d_5_160
elseif df[:Size][i] == 5.0 && df[:Sch][i] == "XXS"
nominal_wt[i] = d_5_xxs
# 6.0
elseif df[:Size][i] == 6.0 && df[:Sch][i] == "040"
nominal_wt[i] = d_6_40
elseif df[:Size][i] == 6.0 && df[:Sch][i] == "080"
nominal_wt[i] = d_6_80
elseif df[:Size][i] == 6.0 && df[:Sch][i] == "120"
nominal_wt[i] = d_6_120
elseif df[:Size][i] == 6.0 && df[:Sch][i] == "160"
nominal_wt[i] = d_6_160
elseif df[:Size][i] == 6.0 && df[:Sch][i] == "XXS"
nominal_wt[i] = d_6_xxs
# 8.0
elseif df[:Size][i] == 8.0 && df[:Sch][i] == "020"
nominal_wt[i] = d_8_20
elseif df[:Size][i] == 8.0 && df[:Sch][i] == "030"
nominal_wt[i] = d_8_30
elseif df[:Size][i] == 8.0 && df[:Sch][i] == "040"
nominal_wt[i] = d_8_40
elseif df[:Size][i] == 8.0 && df[:Sch][i] == "060"
nominal_wt[i] = d_8_60
elseif df[:Size][i] == 8.0 && df[:Sch][i] == "080"
nominal_wt[i] = d_8_80
elseif df[:Size][i] == 8.0 && df[:Sch][i] == "100"
nominal_wt[i] = d_8_100
elseif df[:Size][i] == 8.0 && df[:Sch][i] == "120"
nominal_wt[i] = d_8_120
elseif df[:Size][i] == 8.0 && df[:Sch][i] == "140"
nominal_wt[i] = d_8_140
elseif df[:Size][i] == 8.0 && df[:Sch][i] == "XXS"
nominal_wt[i] = d_8_xxs
elseif df[:Size][i] == 8.0 && df[:Sch][i] == "160"
nominal_wt[i] = d_8_160
# 10.0
elseif df[:Size][i] == 10.0 && df[:Sch][i] == "020"
nominal_wt[i] = d_10_20
elseif df[:Size][i] == 10.0 && df[:Sch][i] == "030"
nominal_wt[i] = d_10_30
elseif df[:Size][i] == 10.0 && df[:Sch][i] == "040"
nominal_wt[i] = d_10_40
elseif df[:Size][i] == 10.0 && df[:Sch][i] == "060"
nominal_wt[i] = d_10_60
elseif df[:Size][i] == 10.0 && df[:Sch][i] == "080"
nominal_wt[i] = d_10_80
elseif df[:Size][i] == 10.0 && df[:Sch][i] == "100"
nominal_wt[i] = d_10_100
elseif df[:Size][i] == 10.0 && df[:Sch][i] == "120"
nominal_wt[i] = d_10_120
elseif df[:Size][i] == 10.0 && df[:Sch][i] == "140"
nominal_wt[i] = d_10_140
elseif df[:Size][i] == 10.0 && df[:Sch][i] == "160"
nominal_wt[i] = d_10_160
# 12.0
elseif df[:Size][i] == 12.0 && df[:Sch][i] == "020"
nominal_wt[i] = d_12_20
elseif df[:Size][i] == 12.0 && df[:Sch][i] == "030"
nominal_wt[i] = d_12_30
elseif df[:Size][i] == 12.0 && df[:Sch][i] == "STD"
nominal_wt[i] = d_12_std
elseif df[:Size][i] == 12.0 && df[:Sch][i] == "040"
nominal_wt[i] = d_12_40
elseif df[:Size][i] == 12.0 && df[:Sch][i] == "XS"
nominal_wt[i] = d_12_xs
elseif df[:Size][i] == 12.0 && df[:Sch][i] == "060"
nominal_wt[i] = d_12_60
elseif df[:Size][i] == 12.0 && df[:Sch][i] == "080"
nominal_wt[i] = d_12_80
elseif df[:Size][i] == 12.0 && df[:Sch][i] == "100"
nominal_wt[i] = d_12_100
elseif df[:Size][i] == 12.0 && df[:Sch][i] == "120"
nominal_wt[i] = d_12_120
elseif df[:Size][i] == 12.0 && df[:Sch][i] == "140"
nominal_wt[i] = d_12_140
elseif df[:Size][i] == 12.0 && df[:Sch][i] == "160"
nominal_wt[i] = d_12_160
# 14.0
elseif df[:Size][i] == 14.0 && df[:Sch][i] == "010"
nominal_wt[i] = d_14_10
elseif df[:Size][i] == 14.0 && df[:Sch][i] == "020"
nominal_wt[i] = d_14_20
elseif df[:Size][i] == 14.0 && df[:Sch][i] == "030"
nominal_wt[i] = d_14_30
elseif df[:Size][i] == 14.0 && df[:Sch][i] == "040"
nominal_wt[i] = d_14_40
elseif df[:Size][i] == 14.0 && df[:Sch][i] == "XS"
nominal_wt[i] = d_14_xs
elseif df[:Size][i] == 14.0 && df[:Sch][i] == "060"
nominal_wt[i] = d_14_60
elseif df[:Size][i] == 14.0 && df[:Sch][i] == "080"
nominal_wt[i] = d_14_80
elseif df[:Size][i] == 14.0 && df[:Sch][i] == "100"
nominal_wt[i] = d_14_100
elseif df[:Size][i] == 14.0 && df[:Sch][i] == "120"
nominal_wt[i] = d_14_120
elseif df[:Size][i] == 14.0 && df[:Sch][i] == "140"
nominal_wt[i] = d_14_140
elseif df[:Size][i] == 14.0 && df[:Sch][i] == "160"
nominal_wt[i] = d_14_160
elseif df[:Size][i] == 14.0 && df[:Sch][i] == "STD"
nominal_wt[i] = .375
# 16.0
elseif df[:Size][i] == 16.0 && df[:Sch][i] == "010"
nominal_wt[i] = d_16_10
elseif df[:Size][i] == 16.0 && df[:Sch][i] == "020"
nominal_wt[i] = d_16_20
elseif df[:Size][i] == 16.0 && df[:Sch][i] == "030"
nominal_wt[i] = d_16_30
elseif df[:Size][i] == 16.0 && df[:Sch][i] == "040"
nominal_wt[i] = d_16_40
elseif df[:Size][i] == 16.0 && df[:Sch][i] == "060"
nominal_wt[i] = d_16_60
elseif df[:Size][i] == 16.0 && df[:Sch][i] == "080"
nominal_wt[i] = d_16_80
elseif df[:Size][i] == 16.0 && df[:Sch][i] == "100"
nominal_wt[i] = d_16_100
elseif df[:Size][i] == 16.0 && df[:Sch][i] == "120"
nominal_wt[i] = d_16_120
elseif df[:Size][i] == 16.0 && df[:Sch][i] == "140"
nominal_wt[i] = d_16_140
elseif df[:Size][i] == 16.0 && df[:Sch][i] == "160"
nominal_wt[i] = d_16_160
elseif df[:Size][i] == 16.0 && df[:Sch][i] == "STD"
nominal_wt[i] = .375
# 18.0
elseif df[:Size][i] == 18.0 && df[:Sch][i] == "010"
nominal_wt[i] = d_18_10
elseif df[:Size][i] == 18.0 && df[:Sch][i] == "020"
nominal_wt[i] = d_18_20
elseif df[:Size][i] == 18.0 && df[:Sch][i] == "STD"
nominal_wt[i] = d_18_30
elseif df[:Size][i] == 18.0 && df[:Sch][i] == "XS"
nominal_wt[i] = d_18_xs
elseif df[:Size][i] == 18.0 && df[:Sch][i] == "040"
nominal_wt[i] = d_18_40
elseif df[:Size][i] == 18.0 && df[:Sch][i] == "060"
nominal_wt[i] = d_18_60
elseif df[:Size][i] == 18.0 && df[:Sch][i] == "080"
nominal_wt[i] = d_18_80
elseif df[:Size][i] == 18.0 && df[:Sch][i] == "100"
nominal_wt[i] = d_18_100
elseif df[:Size][i] == 18.0 && df[:Sch][i] == "120"
nominal_wt[i] = d_18_120
elseif df[:Size][i] == 18.0 && df[:Sch][i] == "140"
nominal_wt[i] = d_18_140
elseif df[:Size][i] == 18.0 && df[:Sch][i] == "160"
nominal_wt[i] = d_18_140
# 20.0
elseif df[:Size][i] == 20.0 && df[:Sch][i] == "010"
nominal_wt[i] = d_20_10
elseif df[:Size][i] == 20.0 && df[:Sch][i] == "020"
nominal_wt[i] = d_20_20
elseif df[:Size][i] == 20.0 && df[:Sch][i] == "030"
nominal_wt[i] = d_20_30
elseif df[:Size][i] == 20.0 && df[:Sch][i] == "040"
nominal_wt[i] = d_20_40
elseif df[:Size][i] == 20.0 && df[:Sch][i] == "060"
nominal_wt[i] = d_20_60
elseif df[:Size][i] == 20.0 && df[:Sch][i] == "080"
nominal_wt[i] = d_20_80
elseif df[:Size][i] == 20.0 && df[:Sch][i] == "100"
nominal_wt[i] = d_20_100
elseif df[:Size][i] == 20.0 && df[:Sch][i] == "120"
nominal_wt[i] = d_20_120
elseif df[:Size][i] == 20.0 && df[:Sch][i] == "140"
nominal_wt[i] = d_20_140
elseif df[:Size][i] == 20.0 && df[:Sch][i] == "160"
nominal_wt[i] = d_20_160
####################################
end
end
df[:nominal_wt] = nominal_wt
#=
# subset per pipe schedule
df_1_inch = df[df.Size .== 1.0, :]
df_0_50_inch = df[df.Size .== .5, :]
df_0_75_inch = df[df.Size .== .75, :]
df_1_5_inch = df[df.Size .== 1.5, :]
df_2_inch = df[df.Size .== 2.0, :]
df_3_inch = df[df.Size .== 3.0, :]
df_4_inch = df[df.Size .== 4.0, :]
df_5_inch = df[df.Size .== 5.0, :]
df_6_inch = df[df.Size .== 6.0, :]
df_7_inch = df[df.Size .== 7.0, :]
df_8_inch = df[df.Size .== 8.0, :]
df_10_inch = df[df.Size .== 10.0, :]
df_12_inch = df[df.Size .== 12.0, :]
df_14_inch = df[df.Size .== 14.0, :]
df_16_inch = df[df.Size .== 16.0, :]
df_20_inch = df[df.Size .== 20.0, :]
# remove fiberglass spec
df_2_inch = df_2_inch[df_2_inch.Sch .!= "200", :] # remove UF fiberglass specification
groups = groupby(df_2_inch, :Sch)
for i = 1:nrow(df_2_inch)
if df_2_inch[:Sch] == 160
print(unique(df.Size))
=#
###################+ Begin API 581 +###################+
# External Corrosion
# Step 1
# Furnished thickness
i = 31
tmin = zeros(nrow(df))
Art = zeros(nrow(df))
FSextcorr = zeros(nrow(df))
SRPextcorr_one = zeros(nrow(df))
SRPextcorr_two = zeros(nrow(df))
SRPextcorr_final = zeros(nrow(df))
I1extcorr = zeros(nrow(df))
I2extcorr = zeros(nrow(df))
I3extcorr = zeros(nrow(df))
Pop1extcorr = zeros(nrow(df))
Pop2extcorr = zeros(nrow(df))
Pop3extcorr = zeros(nrow(df))
βextcorr1 = zeros(nrow(df))
βextcorr2 = zeros(nrow(df))
βextcorr3 = zeros(nrow(df))
Df = zeros(nrow(df))
Pf_t = zeros(nrow(df))
for i = 1:nrow(df)
age = 23.7
# Step 2
Crb = .005 # can iterate later for sensitivty
FEQ = 2.0
FIF = 1.0
# Step 3
Cr = Crb*(maximum([FEQ,FIF]))
agetk = age # Time in service
# Step 4
Trde = df.nominal_wt[i] # last known inspection thickness
# Step 5
agecoat = agetk
# Step 6
Coatadj = minimum([5.0,agecoat])
# Step 7
age_final = agetk - Coatadj
# Step 8
if df.design_code[i] == "ASME B31.3"
tmin[i] = (df.P[i] * df.Do[i]) / (2*((df.S[i] * 1.0 * 1.0) + (df.P[i] * 0.4)))
elseif df.design_code[i] == "ASME B31.1"
tmin[i] = (df.P[i] * df.Do[i]) / (2*((df.S[i] * 1.0 * 1.0) + (df.P[i] * 0.4))) + 0.0 # mech allow == 0.0
end
# Step 9
Art[i] = ((Cr*age_final)/df.nominal_wt[i])
# Step 10
FSextcorr[i] = (df.YS[i]+df.TS[i])/2*1*1.1
# Step 11
df.Sch[i]
SRPextcorr_one[i] = ((df.S[i]*1)/FSextcorr[i]) * (tmin[i]/Trde)
SRPextcorr_two[i] = (df.P[i]*df.Do[i])/(2*FSextcorr[i]*Trde)
SRPextcorr_final[i] = maximum([SRPextcorr_one[i],SRPextcorr_two[i]])
# Step 12
NAextcorr = 1
NBextcorr = 1
NCextcorr = 1
NDextcorr = 1
# Step 13 inspection effectivness factors = fixed from API 581
Prp1extcorr = 0.5
Prp2extcorr = 0.3
Prp3extcorr = 0.2
Cop1extcorr = 0.33
Cop2extcorr = 0.33
Cop3extcorr = 0.33
I1extcorr[i] = Prp1extcorr*(Cop1extcorr^NAextcorr)*(Cop1extcorr^NBextcorr)*(Cop1extcorr^NCextcorr)*(Cop1extcorr^NDextcorr)
I2extcorr[i] = Prp2extcorr*(Cop2extcorr^NAextcorr)*(Cop2extcorr^NBextcorr)*(Cop2extcorr^NCextcorr)*(Cop2extcorr^NDextcorr)
I3extcorr[i] = Prp3extcorr*(Cop3extcorr^NAextcorr)*(Cop3extcorr^NBextcorr)*(Cop3extcorr^NCextcorr)*(Cop3extcorr^NDextcorr)
# Step 14 Posterior probabilities
Pop1extcorr[i] = (I1extcorr[i]/(I1extcorr[i]+I2extcorr[i]+I3extcorr[i]))
Pop2extcorr[i] = (I2extcorr[i]/(I1extcorr[i]+I2extcorr[i]+I3extcorr[i]))
Pop3extcorr[i] = (I3extcorr[i]/(I1extcorr[i]+I2extcorr[i]+I3extcorr[i]))
# Step 15
βextcorr1[i] = ((1-1*Art[i])-SRPextcorr_final[i])/sqrt(1^2*Art[i]^2*0.2^2+(1-1*Art[i])^2*0.2^2+(SRPextcorr_final[i])^2*0.05^2)
βextcorr2[i] = ((1-2*Art[i])-SRPextcorr_final[i])/sqrt(2^2*Art[i]^2*0.2^2+(1-2*Art[i])^2*0.2^2+(SRPextcorr_final[i]^2)*0.05^2)
βextcorr3[i] = ((1-4*Art[i])-SRPextcorr_final[i])/sqrt(4^2*Art[i]^2*0.2^2+(1-4*Art[i])^2*0.2^2+(SRPextcorr_final[i]^2)*0.05^2)
# Step 16 - Damage factor
# using Distributions
# cdf(Normal(0, 1), -βextcorr1[i])
Df[i] = ((Pop1extcorr[i] *cdf(Normal(0, 1),-(βextcorr1[i])))+(Pop2extcorr[i]*cdf(Normal(0, 1),-(βextcorr2[i])))+(Pop3extcorr[i]*cdf(Normal(0, 1), -(βextcorr3[i])))) / 0.000156
# POF
Pf_t[i] = Df[i] * 0.0000306
print(Pf_t[i],"_____-")
end
df.Df = Df
df.Pf_t = Pf_t
df.RCA = df.nominal_wt .- tmin
# Consequence Category
# Relative rank
sorted_df = sort!(df, (:Pf_t), rev=(false))
sorted_df = sorted_df[sorted_df.Pf_t .> 0.0, :]
index = fill("",nrow(sorted_df))
for i = 1:nrow(sorted_df)
index[i] = join([sorted_df.Size[i],sorted_df.Sch[i]],"_")
end
index = collect(1:1:nrow(sorted_df))
names(sorted_df)
#=
p = plot(layer(sorted_df, x=index, y=sorted_df.Pf_t, Geom.line),
layer(sorted_df, x=index, y=sorted_df.nominal_wt, Geom.line))
=#
wt = cor(sorted_df.nominal_wt,sorted_df.Pf_t)
round(wt,digits=2)
rca = cor(sorted_df.Pf_t,sorted_df.RCA)
p = cor(sorted_df.Pf_t,sorted_df.P)
s = cor(sorted_df.Pf_t,sorted_df.S)
array_out = hcat(wt,rca,p,s)
stats_out = DataFrame(array_out)
names_names = ["Nominal WT","RCA","Pressure","Code Allowable S"]
rename!(stats_out,names_names)
print(stats_out)
fig1a= plot(sorted_df, x=index, y="Pf_t", color="Pf_t",Guide.YTicks(ticks=collect(0:.025:.2)),
Guide.title("API 581 Probability of Failure Assessment - Piping"), Guide.xlabel("Index Number"),Guide.ylabel("POF - Times Per Year"))
fig1b = plot(sorted_df, x=index, y="nominal_wt", color="nominal_wt", Guide.title("Pearsons Correlation Coefficient = -0.872"),
Guide.xlabel("Index Number"),Guide.ylabel("Nominal Wall Thickness"))
fig1c = plot(sorted_df, x=index, y=sorted_df.RCA, color="RCA", Guide.title("RCA"),
Guide.xlabel("Index Number"),Guide.ylabel("Remaining Corrosion Allowance"))
print(unique(sorted_df.P))
p = vstack(fig1a,fig1b,fig1c)
draw(PNG("C:/Users/Andrew.Bannerman/Desktop/MARS/risk studies/POF.png",30cm, 20cm, dpi=300),p)
CSV.write("C:/Users/Andrew.Bannerman/Desktop/MARS/risk studies/relative_rank.csv", df;delim=',')
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment