@neutrium/pipe
Version:
The pipe module of the Neutrium library
114 lines (100 loc) • 9.74 kB
text/typescript
//
// ASME/ANSI B36.10/19 Steel and Stainless Steel Pipe
//
import { Pipe } from './Pipe'
import { Quantity } from '@neutrium/quantity';
export class ASME_B36_10_Pipe extends Pipe
{
// Schedule pipe outer diameter [<DN size>, <NPS size>, <OD in m>]
static readonly OD_DATA = [[6, 1/8, 0.0103],[8, 1/4, 0.0137],[10, 3/8, 0.0171],[15, 1/2, 0.0213],[20, 3/4, 0.0267],[25, 1, 0.0334],[32, 1.25, 0.0422],[40, 1.5, 0.0483],[50, 2, 0.0603],[65, 2.5, 0.073],[80, 3, 0.0889],[90, 3.5, 0.1016],[100, 4, 0.1143],[115, 4.5, 0.127],[125, 5, 0.1413],[150, 6, 0.1683],[200, 8, 0.2191],[250, 10, 0.2731],[300, 12, 0.3239],[350, 14, 0.3556],[400, 16, 0.4064],[450, 18, 0.4572],[500, 20, 0.508],[550, 22, 0.5588],[600, 24, 0.6096],[650, 26, 0.6604],[700, 28, 0.7112],[750, 30, 0.762],[800, 32, 0.8128],[850, 34, 0.8636],[900, 36, 0.9144],[1050, 42, 1.0668]];
// Schedule pipe wall thickness data (in m) referenced by DN size
static readonly WT_DATA = {
"6" : {"5": 0.000889, "10": 0.001245, "30": 0.001448, "40": 0.001727, "80": 0.002413, "STD": 0.001727, "XS": 0.002413, "10S": 0.001245, "40S": 0.001727, "80S": 0.002413},
"8" : {"5": 0.001245, "10": 0.001651, "30": 0.001854, "40": 0.002235, "80": 0.003023, "STD": 0.002235, "XS": 0.003023, "10S": 0.001651, "40S": 0.002235, "80S": 0.003023},
"10": {"5": 0.001245, "10": 0.001651, "30": 0.001854, "40": 0.002311, "80": 0.003200, "STD": 0.002311, "XS": 0.003200, "10S": 0.001651, "40S": 0.002311, "80S": 0.003200},
"15": {"5": 0.001651, "10": 0.002108, "30": 0.002413, "40": 0.002769, "80": 0.003734, "120": 0.004318, "160": 0.004775, "STD": 0.002769, "XS": 0.003734, "XXS": 0.007468, "5S": 0.001651, "10S": 0.002108, "40S": 0.002769, "80S": 0.003734, "160S": 0.004780},
"20": {"5": 0.001651, "10": 0.0021082, "30": 0.002413, "40": 0.0028702, "80": 0.0039116, "160": 0.0055626, "STD": 0.0028702, "XS": 0.0039116, "XXS": 0.0078232, "5S": 0.001651, "10S": 0.0021082, "40S": 0.0028702, "80S": 0.0039116, "160S": 0.00557},
"25": {"5": 0.001651, "10": 0.0027686, "30": 0.0028956, "40": 0.0033782, "80": 0.0045466, "160": 0.00635, "STD": 0.0033782, "XS": 0.0045466, "XXS": 0.0090932, "5S": 0.001651, "10S": 0.0027686, "40S": 0.0033782, "80S": 0.0045466, "160S": 0.00635},
"32": {"5": 0.001651, "10": 0.0027686, "30": 0.0029718, "40": 0.003556, "80": 0.0048514, "160": 0.00635, "STD": 0.003556, "XS": 0.0048514, "XXS": 0.0097028, "5S": 0.001651, "10S": 0.0027686, "40S": 0.003556, "80S": 0.0048514, "160S": 0.00635},
"40": {"5": 0.001651, "10": 0.0027686, "30": 0.003175, "40": 0.003683, "80": 0.00508, "160": 0.0071374, "STD": 0.003683, "XS": 0.00508, "XXS": 0.01016, "5S": 0.001651, "10S": 0.0027686, "40S": 0.003683, "80S": 0.00508, "160S": 0.00714},
"50": {"5": 0.001651, "10": 0.0027686, "30": 0.003175, "40": 0.0039116, "80": 0.0055372, "120": 0.00635, "160": 0.0087376, "STD": 0.0039116, "XS": 0.0055372, "XXS": 0.0110744, "5S": 0.001651, "10S": 0.0027686, "40S": 0.0039116, "80S": 0.0055372, "160S": 0.00874},
"65": {"5": 0.0021082, "10": 0.003048, "30": 0.0047752, "40": 0.0051562, "80": 0.0070104, "120": 0.00762, "160": 0.009525, "STD": 0.0051562, "XS": 0.0070104, "XXS": 0.0140208, "5S": 0.0021082, "10S": 0.003048, "40S": 0.0051562, "80S": 0.0070104, "160S": 0.00953},
"80": {"5": 0.0021082, "10": 0.003048, "30": 0.0047752, "40": 0.0054864, "80": 0.00762, "120": 0.00889, "160": 0.0111252, "STD": 0.0054864, "XS": 0.00762, "XXS": 0.01524, "5S": 0.0021082, "10S": 0.003048, "40S": 0.0054864, "80S": 0.00762, "160S": 0.01113},
"90": {"5": 0.0021082, "10": 0.003048, "30": 0.0047752, "40": 0.0057404, "80": 0.0080772, "STD": 0.0057404, "XS": 0.0080772, "XXS": 0.0161544, "5S": 0.0021082, "10S": 0.003048, "40S": 0.0057404, "80S": 0.0080772},
"100": {"5": 0.0021082, "10": 0.003048, "30": 0.0047752, "40": 0.0060198, "60": 0.0071374, "80": 0.0085598, "120": 0.0110998, "160": 0.0134874, "STD": 0.0060198, "XS": 0.0085598, "XXS": 0.0171196, "5S": 0.0021082, "10S": 0.003048, "40S": 0.0060198, "80S": 0.0085598, "160S": 0.01349},
"115": {"40": 0.0062738, "80": 0.009017},
"125": {"5": 0.0027686, "10": 0.0034036, "40": 0.0065532, "80": 0.009525, "120": 0.0127, "160": 0.015875, "STD": 0.0065532, "XS": 0.009525, "XXS": 0.01905, "5S": 0.0027686, "10S": 0.0034036, "40S": 0.0065532, "80S": 0.009525, "160S": 0.01588},
"150": {"5": 0.0027686, "10": 0.0034036, "40": 0.007112, "80": 0.0109728, "120": 0.0142748, "160": 0.0182626, "STD": 0.007112, "XS": 0.0109728, "XXS": 0.0219456, "5S": 0.0027686, "10S": 0.0034036, "40S": 0.007112, "80S": 0.0109728, "160S": 0.01827},
"200": {"5": 0.0027686, "10": 0.0037592, "20": 0.00635, "30": 0.00635, "40": 0.0081788, "60": 0.0103124, "80": 0.0127, "100": 0.0150876, "120": 0.0182372, "140": 0.0206248, "160": 0.0230124, "STD": 0.0081788, "XS": 0.0127, "XXS": 0.022225, "5S": 0.0027686, "10S": 0.0037592, "40S": 0.0081788, "80S": 0.0127, "160S": 0.02302},
"250": {"5": 0.0034036, "10": 0.004191, "20": 0.00635, "30": 0.0077978, "40": 0.009271, "60": 0.0127, "80": 0.0150622, "100": 0.0182626, "120": 0.0214122, "140": 0.0254, "160": 0.028575, "STD": 0.009271, "XS": 0.0127, "XXS": 0.0254, "5S": 0.0034036, "10S": 0.004191, "40S": 0.009271, "80S": 0.0127, "160S": 0.02858},
"300": {"5": 0.0039624, "10": 0.004572, "20": 0.00635, "30": 0.008382, "40": 0.0103124, "60": 0.0127, "80": 0.0174498, "100": 0.0214376, "120": 0.0254, "140": 0.028575, "160": 0.0333248, "STD": 0.009525, "XS": 0.0127, "XXS": 0.0254, "5S": 0.0039624, "10S": 0.004572, "40S": 0.009525, "80S": 0.0127, "160S": 0.03333},
"350": {"5": 0.0039624, "10": 0.00635, "20": 0.0079248, "30": 0.009525, "40": 0.0110998, "60": 0.0150622, "80": 0.01905, "100": 0.0238252, "120": 0.0277622, "140": 0.03175, "160": 0.0357124, "STD": 0.009525, "XS": 0.0127, "5S": 0.0039624, "10S": 0.0047752, "40S": 0.009525, "80S": 0.0127},
"400": {"5": 0.004191, "10": 0.00635, "20": 0.0079248, "30": 0.009525, "40": 0.0127, "60": 0.0166624, "80": 0.0214122, "100": 0.0261874, "120": 0.0309372, "140": 0.0365252, "160": 0.0404622, "STD": 0.009525, "XS": 0.0127, "5S": 0.004191, "10S": 0.0047752, "40S": 0.009525, "80S": 0.0127},
"450": {"5": 0.004191, "10": 0.00635, "20": 0.0079248, "30": 0.0110998, "40": 0.0142748, "60": 0.01905, "80": 0.0237998, "100": 0.0293624, "120": 0.034925, "140": 0.0396748, "160": 0.0452374, "STD": 0.009525, "XS": 0.0127, "5S": 0.004191, "10S": 0.0047752, "40S": 0.009525, "80S": 0.0127},
"500": {"5": 0.0047752, "10": 0.00635, "20": 0.009525, "30": 0.0127, "40": 0.0150622, "60": 0.0206248, "80": 0.0261874, "100": 0.0325374, "120": 0.0381, "140": 0.04445, "160": 0.0499872, "STD": 0.009525, "XS": 0.0127, "5S": 0.0047752, "10S": 0.0055372, "40S": 0.009525, "80S": 0.0127},
"550": {"10": 0.00635, "20": 0.009525, "30": 0.0127, "60": 0.022225, "80": 0.028575, "100": 0.034925, "120": 0.041275, "140": 0.047625, "160": 0.053975, "STD": 0.009525, "XS": 0.0127, "5S": 0.0047752, "10S": 0.0055372},
"600": {"5": 0.0055372, "10": 0.00635, "20": 0.009525, "30": 0.0142748, "40": 0.0174498, "60": 0.0245872, "80": 0.0309372, "100": 0.0388874, "120": 0.0460248, "140": 0.0523748, "160": 0.0595122, "STD": 0.009525, "XS": 0.0127, "5S": 0.0055372, "10S": 0.00635, "40S": 0.009525, "80S": 0.0127},
"650": {"10": 0.0079248, "20": 0.0127, "STD": 0.009525, "XS": 0.0127},
"700": {"10": 0.0079248, "20": 0.0127, "30": 0.015875, "STD": 0.009525, "XS": 0.0127},
"750": {"10": 0.0079248, "20": 0.0127, "30": 0.015875, "STD": 0.009525, "XS": 0.0127, "40S": 0.009525, "80S": 0.0127},
"800": {"10": 0.0079248, "20": 0.0127, "30": 0.015875, "40": 0.0174752, "STD": 0.009525, "XS": 0.0127},
"850": {"10": 0.0087376, "20": 0.0127, "30": 0.015875, "40": 0.0174752, "STD": 0.009525, "XS": 0.0127},
"900": {"10": 0.0079248, "20": 0.0127, "30": 0.015875, "40": 0.01905, "STD": 0.009525, "XS": 0.0127, "40S": 0.009525, "80S": 0.0127}
}
public readonly schedule: string;
public readonly dn: number;
public readonly nps: number;
// @param {string} ns - The nominal size of the pipe (NPS vs DN ?)
// @param {string} schedule - The pipe schdule
constructor(size : string | Quantity, schedule : string)
{
let sizeQty = new Quantity(size),
units = sizeQty.units() || "m",
sizeData : any = null,
od = null,
wt = null;
let nomSize : number,
nomSizeIndex = 0;
if(units == "in")
{
nomSize = sizeQty.scalar.toNumber();
nomSizeIndex = 1
}
else
{
nomSize = sizeQty.to("mm").scalar.toNumber();
}
// Get the DN size and outer diameter
for (let i = 0, len = ASME_B36_10_Pipe.OD_DATA.length; i < len; i++)
{
let element = ASME_B36_10_Pipe.OD_DATA[i];
if(element[nomSizeIndex] == nomSize)
{
sizeData = element;
od = new Quantity(element[2], "m").to(units);
break;
}
}
// Check a valid size was provided
if(od === null)
{
throw Error("Invalid pipe size provided");
}
// Get the wall thickness
let pipeData = ASME_B36_10_Pipe.WT_DATA["" + sizeData[0]];
if(pipeData.hasOwnProperty(schedule))
{
wt = new Quantity(pipeData[schedule], "m").to(units);
}
else
{
throw Error("Invalid combination of pipe size and schedule provided");
}
// od and wt are in metres at this point
super(od, wt);
// Set additional Schedule pipe info
this.schedule = schedule;
this.dn = sizeData[0];
this.nps = sizeData[1];
}
}