7.20 Steam at Sonic Velocity

Given: A header contains 170 psi saturated steam which feeds a pulp stock digester through 30 feet of 2” schedule 40 pipe. It includes 1 standard 90 degree elbow, a fully open conventional plug type disc global valve. The initial pressure in the digester is atmospheric.

Find the initial flow rate in pounds/hour.

[1]:
from fluids.units import *
from math import pi
from CoolProp.CoolProp import PropsSI
P1 = 170*u.psi
P2_spec = P2 = 1*u.atm
L = 30*u.foot
NPS, D_pipe, Do_pipe, t = nearest_pipe(NPS=2, schedule=40)
A = 0.25*pi*D_pipe**2

fd = 0.019 # assumed, initial guess
Re = 1e6 # also assumed
mu = 1.8e-8*u.Pa*u.s

rho = 5.988612037578836*u.kg/u.m**3 # Density at inlet from steam tables
roughness = 0.0018*u.inch

for i in range(5):
    K = K_from_f(fd=fd, L=L, D=D_pipe)
    K += entrance_sharp()
    K += exit_normal()
    K += K_globe_valve_Crane(D1=D_pipe, D2=D_pipe)
    K += bend_rounded(Di=D_pipe, angle=90*u.degrees, fd=fd,
                 Re=Re, roughness=roughness, method='Crane')

    # lump the losses together for the `isothermal_gas` function
    fd_tot = f_from_K(L=L, D=D_pipe, K=K)

    P2_choke = P_isothermal_critical_flow(P=P1, fd=fd_tot, D=D_pipe, L=L)
    if P2_choke.to_base_units().magnitude > P2_spec.to_base_units().magnitude:
        P2 = P2_choke
    else:
        P2 = P2_spec

    m = isothermal_gas(rho=rho, fd=fd_tot, P1=P1, P2=P2, L=L, D=D_pipe)
    Q = m/rho
    v = Q/A
    # update friction factor
    Re = Reynolds(D=D_pipe, rho=rho, mu=mu, V=v)
    fd = friction_factor(Re=Re, eD=roughness/D_pipe)

# choke pressure found to be 3 bar instead of 2.5 in Crane example
print('The mass flow rate is found to be %s' %(m.to(u.lb/u.hour)))
The mass flow rate is found to be 11626.328806003183 pound / hour

The values given in Crane are 11770 and 11160 lb/hour for the Darcy and the Sonic Velocity and Continuity equations.