Main

Valve Design Exercise

The flow rate of cooling fluid through a system is regulated by a valve. The pressure generated by the pump is constant.

$$\Delta P_{pump}=100 \mathrm{bar}$$

The cooling fluid has a specific gravity of 1.1. As a first step, characterize the valve without the system pressure drop. In a second step, determine the best valve trim for a linear relationship between lift and flow for the installed valve.

Part I: Valve Characterization

Plot the relationship between flow `q` and valve lift `l` for the valve characterized by the design equation.

$$q = C_v f(l) \sqrt{\frac{\Delta P_v}{g_s}}$$

with `C_v = 2` and either a linear lift function `f(l)=l` or an equal percentage lift function `f(l)=R^{l-1}` with `R=20`.

Part II: Installed Valve

The pressure drop across the system (without the valve) follows the following correlation between pressure drop `\Delta P_{system}` and flow rate `q`.

$$\Delta P_{system} = 2 q^2$$

Plot the relationship between flow `q` and valve lift `l` for the system and valve with `C_v = 2` and either a linear lift function `f(l)=l` or an equal percentage lift function `f(l)=R^{l-1}` with `R=20`.

Solution, Part I

import numpy as np
import matplotlib.pyplot as plt

## Lift functions for two different valve trim types
def f_lin(x):
    return x             # linear valve trim
def f_ep(x):
    R = 20
    return R**(x-1)      # equal percentage valve trim (R = 20-50)

lift = np.linspace(0,1)  # equally spaced points between 0 and 1

plt.figure(1)            # create new figure
plt.title('Valve Performance - Not Installed')
plt.subplot(2,1,1)                # 2,1 subplot with 1st window
plt.plot(lift,f_lin(lift),'b-')   # linear valve
plt.plot(lift,f_ep(lift),'r--')   # equal percentage
plt.ylabel('f(l)')
plt.legend(['Linear Valve Trim','Equal Percentage Valve Trim'])

g_s = 1.1                # specific gravity of fluid
def q(x,f,Cv,DPv):
    return Cv * f(x) * np.sqrt(DPv/g_s)   # flow through a valve

## Intrinsic valve performance
# no process equipment - all pressure drop is across valve
DPt = 100 # Total pressure generated by pump (constant)
Cv = 2    # Valve Cv
flow_lin = q(lift,f_lin,Cv,DPt)  # flow with linear valve
flow_ep  = q(lift,f_ep,Cv,DPt)   # flow with equal percentage

plt.subplot(2,1,2)               # 2,1 subplot with 2nd window
plt.plot(lift,flow_lin,'b-')     # plot linear valve response
plt.plot(lift,flow_ep,'r--')     # plot equal percentage valve
plt.ylabel('Flow')
plt.legend(['Linear Valve Trim','Equal Percentage Valve Trim'])
plt.xlabel('Fractional Valve Lift')
plt.show()

Solution, Part II

The first step in this solution is to relate the pressure drop across the valve and the system to the pressure generated by the pump.

$$\Delta P_{pump} = \Delta P_v + \Delta P_{system}$$

with

$$\Delta P_{pump} = 100$$

$$\Delta P_v = g_s \left(\frac{q}{C_v f(l)}\right)^2$$

$$\Delta P_{system} = 2 q^2$$

This gives a combined equation in terms of lift `l` and flow `q`.

$$100 = g_s \left(\frac{q}{C_v f(l)}\right)^2 + 2 q^2$$

Algebraic manipulation is then used to obtain flow as a function of lift `q(l)` for the valve and system.

$$q(l) = \sqrt{\frac{100\left(C_v f(l)\right)^2}{(g_s + 2 \left(C_v f(l)\right)^2)}}$$

import numpy as np
import matplotlib.pyplot as plt

DPt = 100    # Total pressure generated by pump (constant)
Cv = 2       # Valve Cv
g_s = 1.1    # specific gravity of fluid
lift = np.linspace(0,1)  # equally spaced points between 0 and 1

## Lift functions for two different valve trim types
def f_lin(x):
    return x             # linear valve trim
def f_ep(x):
    R = 20
    return R**(x-1)      # equal percentage valve trim (R = 20-50)

## Installed valve performance
# pressure drop across the system (without valve)
c1 = 2
def DPe(q):
    return c1 * q**2

# valve and process equipment flow with 100 bar pressure drop
def qi(x,f,Cv):
    return np.sqrt((Cv*f(x))**2*DPt / (g_s + (Cv*f(x))**2 * c1))

# Process equipment + Valve performance
flow_lin = qi(lift,f_lin,Cv)  # flow through linear valve
flow_ep  = qi(lift,f_ep,Cv)   # flow through equal percentage valve

plt.figure(2)
plt.title('Valve Performance - Installed')
plt.subplot(3,1,1)
plt.plot(lift,flow_lin,'b-',label='Linear Valve')
plt.plot(lift,flow_ep,'r--',label='Equal Percentage Valve')
plt.plot([0,1],[0,6.5],'k-',linewidth=2,label='Desired Profile')
plt.legend(loc='best')
plt.ylabel('Flow')

plt.subplot(3,1,2)
plt.plot(lift,DPt-DPe(flow_lin),'k:',linewidth=3)
plt.plot(lift,DPe(flow_lin),'r--',linewidth=3)
plt.legend(['Linear Valve','Process Equipment'],loc='best')
plt.ylabel(r'$\Delta P$')

plt.subplot(3,1,3)
plt.plot(lift,DPt-DPe(flow_ep),'k:',linewidth=3)
plt.plot(lift,DPe(flow_ep),'r--',linewidth=3)
plt.legend(['Equal Percentage Valve','Process Equipment'],loc='best')
plt.ylabel(r'$\Delta P$')
plt.xlabel('Lift')

plt.show()