CV_NOISE_LIQ_2015
Overview
The CV_NOISE_LIQ_2015 function calculates the A-weighted sound pressure level generated by a liquid flowing through a control valve, implementing the international standard IEC 60534-8-4 (2015). This standard provides a prediction method for hydrodynamic noise generated by control valves in industrial process control systems.
Control valve noise in liquid service arises from two primary mechanisms: turbulent flow and cavitation. Turbulent noise occurs when the liquid experiences velocity fluctuations and pressure variations as it passes through the valve’s flow restriction. Cavitation noise, which is typically louder and more damaging, occurs when the local static pressure drops below the liquid’s vapor pressure, causing vapor bubbles to form and subsequently collapse violently as pressure recovers downstream.
This implementation uses the fluids library, an open-source Python package for fluid dynamics and chemical engineering calculations. The function wraps control_valve_noise_l_2015 from the fluids.control_valve module.
The calculation incorporates multiple physical parameters including the valve flow coefficient (K_v), liquid pressure recovery factor (F_L), valve style modifier (F_d), and the acoustic properties of both the pipe wall material and surrounding air. The model accounts for sound transmission through the pipe wall using acoustic impedance relationships and applies A-weighting to match human hearing sensitivity.
A key parameter is the pressure ratio factor x_{Fz}, which characterizes the onset of cavitation. For multihole trim valves, this can be estimated using:
x_{Fz} = \left( 4.5 + 1650 \cdot N_0 \cdot d_H^2 \cdot F_L \right)^{-1/2}
where N_0 is the number of open channels and d_H is the multihole trim hole diameter.
The valve correction factor An accounts for acoustic efficiency and varies by valve type: typically -4.6 for globe valves, -4.3 for butterfly valves, and -4.0 for expanders.
This example function is provided as-is without any representation of accuracy.
Excel Usage
=CV_NOISE_LIQ_2015(m, p_in, p_out, psat, rho, c, kv, d, di, fl, fd, t_pipe, rho_pipe, c_pipe, rho_air, c_air, xfz, an)
m(float, required): Mass flow rate of liquid through the control valve (kg/s)p_in(float, required): Inlet pressure of the fluid before valves and reducers (Pa)p_out(float, required): Outlet pressure of the fluid after valves and reducers (Pa)psat(float, required): Saturation pressure of the fluid at inlet temperature (Pa)rho(float, required): Density of the liquid at the inlet (kg/m^3)c(float, required): Speed of sound of the liquid at the inlet conditions (m/s)kv(float, required): Metric Kv valve flow coefficient (m^3/hr)d(float, required): Diameter of the valve (m)di(float, required): Internal diameter of the pipe before and after the valve (m)fl(float, required): Liquid pressure recovery factor (-)fd(float, required): Valve style modifier (-)t_pipe(float, required): Wall thickness of the pipe after the valve (m)rho_pipe(float, optional, default: 7800): Density of the pipe wall material at flowing conditions (kg/m^3)c_pipe(float, optional, default: 5000): Speed of sound of the pipe wall material at flowing conditions (m/s)rho_air(float, optional, default: 1.293): Density of the air surrounding the valve and pipe wall (kg/m^3)c_air(float, optional, default: 343): Speed of sound of the air surrounding the valve and pipe wall (m/s)xfz(float, optional, default: null): If specified, this value is used instead of estimated (-)an(float, optional, default: -4.6): Valve correction factor for acoustic efficiency (-)
Returns (float): A-weighted sound pressure level at 1 meter (dB), or an error message (str) if input is invalid.
Examples
Example 1: Basic noise calculation with default parameters
Inputs:
| m | p_in | p_out | psat | rho | c | kv | d | di | fl | fd | t_pipe | rho_pipe | c_pipe | rho_air | c_air | an |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 40 | 1000000 | 650000 | 2320 | 997 | 1400 | 77.848 | 0.1 | 0.1071 | 0.92 | 0.42 | 0.0036 | 7800 | 5000 | 1.293 | 343 | -4.6 |
Excel formula:
=CV_NOISE_LIQ_2015(40, 1000000, 650000, 2320, 997, 1400, 77.848, 0.1, 0.1071, 0.92, 0.42, 0.0036, 7800, 5000, 1.293, 343, -4.6)
Expected output:
81.58
Example 2: Noise calculation with specified xFz value
Inputs:
| m | p_in | p_out | psat | rho | c | kv | d | di | fl | fd | t_pipe | xfz |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 50 | 1500000 | 850000 | 3200 | 995 | 1350 | 90 | 0.12 | 0.127 | 0.88 | 0.38 | 0.004 | 0.05 |
Excel formula:
=CV_NOISE_LIQ_2015(50, 1500000, 850000, 3200, 995, 1350, 90, 0.12, 0.127, 0.88, 0.38, 0.004, 0.05)
Expected output:
117.24
Example 3: Noise calculation with different An correction factor
Inputs:
| m | p_in | p_out | psat | rho | c | kv | d | di | fl | fd | t_pipe | an |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 30 | 1200000 | 720000 | 2500 | 1000 | 1450 | 65 | 0.08 | 0.0889 | 0.9 | 0.4 | 0.003 | -4 |
Excel formula:
=CV_NOISE_LIQ_2015(30, 1200000, 720000, 2500, 1000, 1450, 65, 0.08, 0.0889, 0.9, 0.4, 0.003, -4)
Expected output:
92.14
Example 4: Noise calculation with only required parameters
Inputs:
| m | p_in | p_out | psat | rho | c | kv | d | di | fl | fd | t_pipe |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 25 | 1000000 | 700000 | 2000 | 998 | 1420 | 55 | 0.09 | 0.095 | 0.85 | 0.45 | 0.0035 |
Excel formula:
=CV_NOISE_LIQ_2015(25, 1000000, 700000, 2000, 998, 1420, 55, 0.09, 0.095, 0.85, 0.45, 0.0035)
Expected output:
72.7
Python Code
import micropip
await micropip.install(["fluids"])
from fluids.control_valve import control_valve_noise_l_2015 as fluids_control_valve_noise_l_2015
def cv_noise_liq_2015(m, p_in, p_out, psat, rho, c, kv, d, di, fl, fd, t_pipe, rho_pipe=7800, c_pipe=5000, rho_air=1.293, c_air=343, xfz=None, an=-4.6):
"""
Calculates the sound made by a liquid flowing through a control valve according to the standard IEC 60534-8-4 (2015) using fluids.control_valve.control_valve_noise_l_2015.
See: https://fluids.readthedocs.io/fluids.control_valve.html#fluids.control_valve.control_valve_noise_l_2015
This example function is provided as-is without any representation of accuracy.
Args:
m (float): Mass flow rate of liquid through the control valve (kg/s)
p_in (float): Inlet pressure of the fluid before valves and reducers (Pa)
p_out (float): Outlet pressure of the fluid after valves and reducers (Pa)
psat (float): Saturation pressure of the fluid at inlet temperature (Pa)
rho (float): Density of the liquid at the inlet (kg/m^3)
c (float): Speed of sound of the liquid at the inlet conditions (m/s)
kv (float): Metric Kv valve flow coefficient (m^3/hr)
d (float): Diameter of the valve (m)
di (float): Internal diameter of the pipe before and after the valve (m)
fl (float): Liquid pressure recovery factor (-)
fd (float): Valve style modifier (-)
t_pipe (float): Wall thickness of the pipe after the valve (m)
rho_pipe (float, optional): Density of the pipe wall material at flowing conditions (kg/m^3) Default is 7800.
c_pipe (float, optional): Speed of sound of the pipe wall material at flowing conditions (m/s) Default is 5000.
rho_air (float, optional): Density of the air surrounding the valve and pipe wall (kg/m^3) Default is 1.293.
c_air (float, optional): Speed of sound of the air surrounding the valve and pipe wall (m/s) Default is 343.
xfz (float, optional): If specified, this value is used instead of estimated (-) Default is None.
an (float, optional): Valve correction factor for acoustic efficiency (-) Default is -4.6.
Returns:
float: A-weighted sound pressure level at 1 meter (dB), or an error message (str) if input is invalid.
"""
import math
# Validate and convert input parameters to float
try:
m = float(m)
p_in = float(p_in)
p_out = float(p_out)
psat = float(psat)
rho = float(rho)
c = float(c)
kv = float(kv)
d = float(d)
di = float(di)
fl = float(fl)
fd = float(fd)
t_pipe = float(t_pipe)
rho_pipe = float(rho_pipe)
c_pipe = float(c_pipe)
rho_air = float(rho_air)
c_air = float(c_air)
if xfz is not None:
xfz = float(xfz)
an = float(an)
except (TypeError, ValueError):
return "Error: All parameters must be numeric values."
# Check for non-finite values
values = [m, p_in, p_out, psat, rho, c, kv, d, di, fl, fd, t_pipe, rho_pipe, c_pipe, rho_air, c_air, an]
if xfz is not None:
values.append(xfz)
if any(not math.isfinite(v) for v in values):
return "Error: All parameters must be finite numbers."
# Call the fluids package implementation
try:
result = fluids_control_valve_noise_l_2015(
m=m,
P1=p_in,
P2=p_out,
Psat=psat,
rho=rho,
c=c,
Kv=kv,
d=d,
Di=di,
FL=fl,
Fd=fd,
t_pipe=t_pipe,
rho_pipe=rho_pipe,
c_pipe=c_pipe,
rho_air=rho_air,
c_air=c_air,
xFz=xfz,
An=an
)
return result
except Exception as exc:
return f"Error: Failed to compute liquid noise: {exc}"