7.18 Gas

A natural gas pipeline (schedule 20 14””) is 100 miles long. Inlet pressure is 1300 psia, and outlet pressure is 300 psia.

The average temperature is 40 deg F. The gas composition is 75% methane, 21% ethane, and 4 % propane.

Find the flow rate in MMscfd.

[1]:
from fluids.units import *
from math import pi
P1 = 1300*u.psi
P2 = 300*u.psi
T = 40*u.degF
L = 100*u.miles

mu = 1.1e-5*u.Pa #
# mu = 1.915E-5*u.Pa # A more correct value, but hinders matching the problem
NPS, Di, Do, t = nearest_pipe(NPS=14, schedule='20')
A = 0.25*pi*Di**2
[2]:
from thermo import *
from thermo import PRMIX
Tcs = [190.564, 305.32, 369.83]
Pcs = [4599000.0, 4872000.0, 4248000.0]
omegas = [0.008, 0.098, 0.152]
MWs = [16.04246, 30.06904, 44.09562]
zs = [0.75, 0.21, .04]
MW = sum(zs[i]*MWs[i] for i in range(3))*u.g/u.mol
[3]:
eos_1 = PRMIX(T=T.to(u.K).magnitude, P=P1.to(u.Pa).magnitude, zs=zs, Tcs=Tcs, Pcs=Pcs, omegas=omegas)
eos_2 = PRMIX(T=T.to(u.K).magnitude, P=P2.to(u.Pa).magnitude, zs=zs, Tcs=Tcs, Pcs=Pcs, omegas=omegas)
eos_std = PRMIX(T=288.15, P=101325.0, zs=zs, Tcs=Tcs, Pcs=Pcs, omegas=omegas)

Vm1 = eos_1.V_g*u.m**3/u.mol
rho1 = (Vm1)**-1*MW

Vm2 = eos_2.V_g*u.m**3/u.mol
rho2 = (Vm2)**-1*MW

Vm_std = eos_std.V_g*u.m**3/u.mol
rho_std = (Vm_std)**-1*MW

roughness = 0.0018*u.inch

rho = 0.5*(rho1 + rho2)

v = 10.0 # Initial guess for velocity
Re = rho*v*Di/mu
fd = friction_factor(Re=Re, eD=roughness/Di)

for i in range(8):
    # Solve for velocity with sequential substitution
    m = isothermal_gas(rho, fd, P1=P1, P2=P2, L=L, D=Di)
    v = m/(A*rho)
    Re = rho*v*Di/mu
    fd = friction_factor(Re=Re, eD=roughness/Di)
Q = v*A
correction = rho_std/rho

# pint does not support mmscfd
mmscfd = Q.to(u.ft**3/u.day).magnitude/1e6/correction
print('According to the full isothermal equation, the flowrate is %g MMscfd' %(mmscfd))
# Q.to(u.m**3/u.s)
According to the full isothermal equation, the flowrate is 103.434 MMscfd
[4]:
# Note Z_avg should be used in the Panhandle and Weymouth equations
# However Crane omits them; they are not used here to match Crane.
Z_avg = 0.5*(eos_1.Z_g + eos_2.Z_g)
MW_air = 28.966*u.g/u.mol
SG = MW/MW_air
[5]:
# Crane does not use the efficiency term on Weymouth
Q_Weymouth = Weymouth(SG, Tavg=T, L=L, D=Di, P1=P1, P2=P2, Zavg=1, E=1)

mmscfd = Q_Weymouth.to(u.ft**3/u.day).magnitude/1e6
print('According to the Weymouth equation, the flowrate is %g MMscfd' %(mmscfd))
According to the Weymouth equation, the flowrate is 105.047 MMscfd
[6]:
Q_panhandle = Panhandle_A(SG, Tavg=T, L=L, D=Di, P1=P1, P2=P2, Zavg=1, E=0.92)

mmscfd = Q_panhandle.to(u.ft**3/u.day).magnitude/1e6
print('According to the Panhandle A equation, the flowrate is %g MMscfd' %(mmscfd))
According to the Panhandle A equation, the flowrate is 128.143 MMscfd

Besides the simplifications Crane makes, the methods are fair approximations. The values in Crane are 107.8, 105.1, and 128.2 mmscfd respectively. The isothermal calculation employed by Crane is a simplified one, explaining the difference - it does not account for expansion rigorously.