0% found this document useful (0 votes)
423 views680 pages

Fluids Readthedocs Io en Release

This document provides release notes and documentation for the fluids Python package version 1.0.21. It includes sections on importing and using the package, fluid mechanics concepts covered, API documentation for each module, and examples of solved fluid mechanics problems. The package contains modules and functions for topics like atmospheric properties, compressible flow, control valves, dimensionless numbers, drag, pipe flow, and more.

Uploaded by

M. Fardi
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
423 views680 pages

Fluids Readthedocs Io en Release

This document provides release notes and documentation for the fluids Python package version 1.0.21. It includes sections on importing and using the package, fluid mechanics concepts covered, API documentation for each module, and examples of solved fluid mechanics problems. The package contains modules and functions for topics like atmospheric properties, compressible flow, control valves, dimensionless numbers, drag, pipe flow, and more.

Uploaded by

M. Fardi
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 680

Fluids Documentation

Release 1.0.21

Caleb Bell

Apr 17, 2022


CONTENTS

1 fluids tutorial 3
1.1 Importing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.2 Design philosophy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.3 Dimensionless numbers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.4 Miscellaneous utilities . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.5 Friction factors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.6 Pipe schedules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
1.7 Wire gauges . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
1.8 Tank geometry . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
1.9 Miscellaneous geometry . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
1.10 Atmospheric properties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
1.11 Compressor sizing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
1.12 Gas pipeline sizing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
1.13 Gas pipeline sizing: Empirical equations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
1.14 Drag and terminal velocity . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
1.15 Pressure drop through packed beds . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
1.16 Pressure drop through piping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
1.17 Control valve sizing: Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
1.18 Control valve sizing: Liquid flow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
1.19 Control valve sizing: Gas flow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
1.20 Electric motor sizing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
1.21 Particle Size Distributions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
1.22 Required Resources . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29

2 API Reference 31
2.1 Atmospheric properties (fluids.atmosphere) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
2.2 Compressible flow and compressor sizing (fluids.compressible) . . . . . . . . . . . . . . . . . . . . 45
2.3 Control valve sizing and rating (fluids.control_valve) . . . . . . . . . . . . . . . . . . . . . . . . . . 69
2.4 Dimensionless numbers (fluids.core) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
2.5 Drag and terminal velocity (fluids.drag) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123
2.6 Filter pressure drop (fluids.filters) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140
2.7 Fittings pressure drop (fluids.fittings) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144
2.8 Orifice plates, flow nozzles, Venturi tubes, cone and wedge meters (fluids.flow_meter) . . . . . . . . 200
2.9 Friction factor and pipe roughness (fluids.friction) . . . . . . . . . . . . . . . . . . . . . . . . . . . 228
2.10 Tank and Heat Exchanger Design (fluids.geometry) . . . . . . . . . . . . . . . . . . . . . . . . . . . 279
2.11 Jet Pump (ejector/eductor) Sizing and Rating (fluids.jet_pump) . . . . . . . . . . . . . . . . . . . . 328
2.12 Mixing (fluids.mixing) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 335
2.13 Support for Numba (fluids.numba) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 339
2.14 Hydrology, weirs and open flow (fluids.open_flow) . . . . . . . . . . . . . . . . . . . . . . . . . . . 342
2.15 Packed bed pressure drop (fluids.packed_bed) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 353

i
2.16 Packing & demister pressure drop (fluids.packed_tower) . . . . . . . . . . . . . . . . . . . . . . . . 369
2.17 Particle Size Distributions (fluids.particle_size_distribution) . . . . . . . . . . . . . . . . . . . . . . 378
2.18 Pipe schedules (fluids.piping) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 410
2.19 Pump and motor sizing (fluids.pump) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 415
2.20 Safety/relief valve sizing (fluids.safety_valve) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 427
2.21 Liquid-Vapor Separators (fluids.separator) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 435
2.22 Pneumatic conveying (fluids.saltation) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 439
2.23 Two phase flow (fluids.two_phase) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 445
2.24 Two-phase flow voidage (fluids.two_phase_voidage) . . . . . . . . . . . . . . . . . . . . . . . . . . 475
2.25 Support for pint Quantities (fluids.units) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 506
2.26 Support for NumPy arrays (fluids.vectorized) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 507

3 Solved Fluids Mechanics Problems 509


3.1 7.1 Smooth Pipe (Plastic) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 509
3.2 7.2 L, L over D and K from Kv for Conventional Type Valves . . . . . . . . . . . . . . . . . . . . . 510
3.3 7.3 L, L over D, K, and Kv for Conventional Type Valves . . . . . . . . . . . . . . . . . . . . . . . . 510
3.4 7.4 Venturi Type Valves . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 511
3.5 7.5 Lift Check Valves . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 511
3.6 7.6 Reduced Port Ball Valve . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 512
3.7 7.7 Laminar flow in Valves, Fittings, and Pipe - System from Example 7.6 . . . . . . . . . . . . . . . 514
3.8 7.8 Laminar flow in Valves, Fittings, and Pipe - SAE oil through a pipe and globe valve . . . . . . . . 515
3.9 7.9 Laminar Flow in Valves, Fittings, and Pipe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 516
3.10 7.10 Piping Systems - Steam . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 517
3.11 7.11 Flat heating Coils - Water . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 519
3.12 7.12 Orifice Size for Given Pressure Drop and Velocity . . . . . . . . . . . . . . . . . . . . . . . . . 520
3.13 7.13 Flow given in English Units - Oil . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 522
3.14 7.14 Bernoulli’s Theorem-Water . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 523
3.15 7.15 Power Required for Pumping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 524
3.16 7.16 Air Lines . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 525
3.17 7.17 Sizing of Pump for Oil Pipelines . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 526
3.18 7.18 Gas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 527
3.19 7.19 Water . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 529
3.20 7.20 Steam at Sonic Velocity . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 530
3.21 7.21 Gases at Sonic Velocity . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 531
3.22 7.22 Compressible Fluids at Subsonic Velocity . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 532
3.23 7.23 Flow Through Orifice Meters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 534
3.24 7.24 Laminar Flow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 534
3.25 7.25 Rectangular Duct - Application of Hydraulic Radius to Flow Problems . . . . . . . . . . . . . . 536
3.26 7.26 Pipe Partially Filled with Flowing Water . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 537
3.27 7.27 Sizing Control Valves for Liquid Service . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 538
3.28 7.28 Checking for Choked Flow Conditions in a Control Valve . . . . . . . . . . . . . . . . . . . . . 539
3.29 7.29 Orifice Flow Rate Calculation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 539
3.30 7.30 Nozzle Sizing Calculations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 540
3.31 7.31 NPRD Calculations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 541
3.32 7.32 NPSH Available Calculation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 541
3.33 7.33 Pump Affinity Rules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 542
3.34 7.34 Pump Power and Operating Cost . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 542
3.35 7.35 Hydraulic Resistance of a Converging Tee . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 543
3.36 7.36 Hydraulic Resistance of a Diverging Wye . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 544

4 Data included in Fluids 547


4.1 Friction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 547
4.2 Sieve Sizes for Particle Size Distributions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 554
4.3 Pipe Schedules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 563

ii
5 Developer’s Guide and Roadmap 597
5.1 Scope and Future Features . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 597
5.2 Contributing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 598
5.3 Running Tests . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 598
5.4 Docstrings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 598
5.5 Doctest . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 599
5.6 Type Hints . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 599
5.7 Supported Python Versions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 599
5.8 Packaging . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 600
5.9 Code Formatting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 600
5.10 Documentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 600
5.11 Sample Notebooks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 600
5.12 Continuous Integration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 600
5.13 Load Speed . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 601
5.14 RAM Usage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 601
5.15 Notes on Pint Integration Implementation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 601
5.16 Notes on PyPy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 601
5.17 Notes on Numba . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 602
5.18 Things to Keep In Mind While Coding . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 603

6 Installation 605

7 Latest source code 607

8 Bug reports 609

9 License information 611

10 Compliance information 613

11 Citation 615

12 Indices and tables 617

Bibliography 619

Python Module Index 663

Index 665

iii
iv
Fluids Documentation, Release 1.0.21

Fluids is open-source software for engineers and technicians working in the fields of chemical, mechanical, or civil
engineering. It includes modules for piping, fittings, pumps, tanks, compressible flow, open-channel flow, atmospheric
properties, solar properties, particle size distributions, two phase flow, friction factors, control valves, orifice plates and
other flow meters, ejectors, relief valves, and more.
Module Contents:

CONTENTS 1
Fluids Documentation, Release 1.0.21

2 CONTENTS
CHAPTER

ONE

FLUIDS TUTORIAL

1.1 Importing

Fluids can be imported as a standalone library, or all of its functions and classes may be imported with star imports:

>>> import fluids # Good practice


>>> from fluids import * # Bad practice but convenient

All functions are available from either the main fluids module or the submodule; i.e. both fluids.friction_factor and
fluids.friction.friction_factor are valid ways of accessing a function.

1.2 Design philosophy

Like all libraries, this was developed to scratch my own itches. Since its public release it has been found useful by
many others, from students across the world to practicing engineers at some of the world’s largest companies.
The bulk of this library’s API is considered stable; enhancements to functions and classes will still happen, and default
methods when using a generic correlation interface may change to newer and more accurate correlations as they are
published and reviewed.
To the extent possible, correlations are implemented depending on the highest level parameters. The friction_factor
correlation does not accept pipe diameter, velocity, viscosity, density, and roughness - it accepts Reynolds number and
relative roughness. This makes the API cleaner and encourages modular design.
All functions are designed to accept inputs in base SI units. However, any set of consistent units given to a function will
return a consistent result; for instance, a function calculating volume doesn’t care if given an input in inches or meters;
the output units will be the cube of those given to it. The user is directed to unit conversion libraries such as pint to
perform unit conversions if they prefer not to work in SI units. The tutorial for using it with fluids is at fluids.units.
There are two ways to use numpy arrays with fluids. Easiest to use is a vectorized module, which wraps all of the fluids
functions with np.vectorize. Instead of importing from fluids, the user can import from fluids.vectorized:

>>> from fluids.vectorized import *


>>> friction_factor(Re=[100, 1000, 10000], eD=0)
array([0.64 , 0.064 , 0.03088295])

It is possible to switch back and forth between the namespaces with a subsequent import:

>>> from fluids import *

3
Fluids Documentation, Release 1.0.21

The second way is Numba. This optional dependency provides the speed you expect from NumPy arrays - or better.
In some cases, much better. The tutorial for using it is at fluids.numba, but in general use it the same way but with a
different import.

>>> from fluids.numba_vectorized import *

1.3 Dimensionless numbers

More than 30 Dimensionless numbers are available in fluids.core :


Calculation of Reynolds and Prandtl number for water flowing in a 0.01 m diameter pipe at 1.5 m/s:

>>> fluids.core.Reynolds(D=0.01, rho=1000, V=1.5, mu=1E-3)


15000.0
>>> fluids.core.Prandtl(rho=1000, mu=1E-3, Cp=4200, k=0.6)
7.000000000000001

Where different parameters may be used with a dimensionless number, either a separate function is created for each or
both sets of parameters are can be specified. For example, instead of specifying viscosity and density for the Reynolds
number calculation, kinematic viscosity could have been used instead:

>>> Reynolds(D=0.01, V=1.5, nu=1E-6)


15000.0

In the case of groups like the Fourier number, used in both heat and mass transfer, two separate functions are available,
Fourier_heat and Fourier_mass. The heat transfer version supports specifying either the density, heat capacity,
and thermal conductivity - or just the thermal diffusivity. There is no equivalent set of three parameters for the mass
transfer version; it always requires mass diffusivity.

>>> Fourier_heat(t=1.5, L=2, rho=1000., Cp=4000., k=0.6)


5.625e-08
>>> Fourier_heat(1.5, 2, alpha=1E-7)
3.75e-08
>>> Fourier_mass(t=1.5, L=2, D=1E-9)
3.7500000000000005e-10

Among the coded dimensionless numbers are Archimedes, Bejan_L, Bejan_p, Biot, Boiling, Bond,
Capillary, Cavitation, Confinement, Dean, Drag, Eckert, Euler, Fourier_heat, Fourier_mass,
Froude_densimetric, Froude, Graetz_heat, Grashof , Hagen, Jakob, Knudsen, Lewis, Mach , Nusselt,
Ohnesorge, Peclet_heat, Peclet_mass, Power_number, Prandtl, Rayleigh , Reynolds, Schmidt, Sherwood,
Stanton, Stokes_number, Strouhal, Suratman, Weber, Morton.

1.4 Miscellaneous utilities

More than just dimensionless groups are implemented in fluids.core.


Converters between loss coefficient, L/D equivalent, length of pipe, and pressure drop are available. It is recommended
to convert length/diameter equivalents and lengths of pipe at specified friction factors to loss coefficients using the
K_from_L_equiv and K_from_f functions respectively. They can all be summed easily afterwards.

4 Chapter 1. fluids tutorial


Fluids Documentation, Release 1.0.21

>>> K_from_f(fd=0.018, L=100., D=.3)


6.0
>>> K_from_L_equiv(L_D=240, fd=0.02)
4.8

Either head loss or pressure drop can be calculated once the total loss coefficient K is known using head_from_K or
dP_from_K respectively. Head loss does not require knowledge of the fluid’s density, but pressure drop does.

>>> head_from_K(K=(6+4.8), V=3)


4.955820795072732

>>> dP_from_K(K=(6+4.8), rho=1000, V=3)


48600.0

If a K value is known and desired to be converted to a L/D ratio or to an equivalent length of pipe, that calculation is
available as well with L_from_K or L_equiv_from_K respectively:

>>> L_from_K(K=6, fd=0.018, D=.3)


100.0
>>> L_equiv_from_K(3.6, fd=0.02)
180.0

Pressure and head are also convertible with the head_from_P and P_from_head functions:

>>> head_from_P(P=98066.5, rho=1000)


10.000000000000002
>>> P_from_head(head=5., rho=800.)
39226.6

Also implemented in fluids.core. are the following:


thermal_diffusivity:

>>> thermal_diffusivity(k=0.02, rho=1., Cp=1000.)


2e-05

Speed of sound in an ideal gas c_ideal_gas: (requires temperature, isentropic exponent Cp/Cv):

>>> c_ideal_gas(T=303, k=1.4, MW=28.96)


348.9820953185441

A converter between dynamic and kinematic viscosity nu_mu_converter:

>>> nu_mu_converter(rho=998., nu=1.0E-6)


0.000998
>>> nu_mu_converter(998., mu=0.000998)
1e-06

Calculation of gravity on earth as a function of height and latitude (input in degrees and height in meters):

>>> gravity(latitude=55, H=1E6)


6.729011976863571

1.4. Miscellaneous utilities 5


Fluids Documentation, Release 1.0.21

1.5 Friction factors

Friction factor is easily calculable with friction_factor.

>>> epsilon = 1.5E-6 # m, clean steel


>>> fluids.friction.friction_factor(Re=15000, eD=epsilon/0.01)
0.028087909385731864

The transition to laminar flow is implemented abruptly at Re=2040, one of the latest experimental results which is
accurate to +/- 10. If the Reynolds number is in the laminar regime, the transition to a different correlation happens
automatically and the well-known solution fd = 64/Re is given.

>>> fluids.friction.friction_factor(Re=150)
0.4266666666666667

Friction factor in curved pipes in available as friction_factor_curved. The curved friction factor is applicable for
helices and coils, and to a lesser extent curved bends.

>>> friction_factor_curved(Re=15000, Di=.01, Dc=2.5, roughness=1.5E-6)


0.029846229072776263

The critical Reynolds number for curved pipes is increased compared to straight pipe flow, and is a function of the
curvature of the pipe. The preferred method to calculate the transition (used by default for the automatic regime
transition) is the method of Schmidt (1967) helical_transition_Re_Schmidt.

>>> helical_transition_Re_Schmidt(Di=.01, Dc=2.5)


3948.7442097768603

Although roughness is a hard value to know without measuring it for a pipe, several hundred pipe conditions have
had their roughness values measured in the literature, and they can be searched through using fuzzy matching and the
functions nearest_material_roughness and material_roughness.

>>> nearest_material_roughness('Used water piping', clean=False)


'Seamless steel tubes, Used water piping'
>>> material_roughness('Seamless steel tubes, Used water piping')
0.0015

The material_roughness function can also be used directly, but in that case there is no feedback about the material
which was found.

>>> material_roughness('glass')
1e-05

As fuzzy string matching is a pretty terrible solution, it is encouraged to find the desired string in the actual source code
of fluids.
There is one more way of obtaining the roughness of a clean pipe, developed by Farshad and Rieke (2006)
roughness_Farshad. It has been established that in commercial pipe, the larger the diameter, the larger the roughness.

>>> roughness_Farshad('Carbon steel, bare', D=0.05)


3.529128126365038e-05

Only the following types of clean, new pipe have data available:
• ‘Plastic coated’

6 Chapter 1. fluids tutorial


Fluids Documentation, Release 1.0.21

• ‘Carbon steel, honed bare’


• ‘Cr13, electropolished bare’
• ‘Cement lining’
• ‘Carbon steel, bare’
• ‘Fiberglass lining’
• ‘Cr13, bare’
There is also a term called Transmission factor, used in many pipeline applications. It is effectively a variant on friction
factor. They can be inter-converted with the transmission_factor function.

>>> transmission_factor(fd=0.0185) # calculate transmission factor


14.704292441876154
>>> transmission_factor(F=20) # calculate Darcy friction factor
0.01

1.6 Pipe schedules

ASME/ANSI pipe tables from B36.10M-2004 and B36-19M-2004 are implemented in fluids.piping.
Piping can be looked up based on nominal pipe size, outer diameter, or inner diameter with the nearest_pipe function.

>>> nearest_pipe(NPS=2) # returns NPS, inside diameter, outer diameter, wall thickness
(2, 0.05248, 0.0603, 0.00391)

When looking up by actual diameter, the nearest pipe as large or larger then requested is returned:

>>> NPS, Di, Do, t = nearest_pipe(Di=0.5)


>>> Di
0.57504
>>> nearest_pipe(Do=0.5)
(20, 0.47781999999999997, 0.508, 0.01509)

By default, the pipe schedule used for the lookup is schedule 40. Other schedules that are available are: ‘5’, ‘10’, ‘20’,
‘30’, ‘40’, ‘60’, ‘80’, ‘100’, ‘120’, ‘140’, ‘160’, ‘STD’, ‘XS’, ‘XXS’, ‘5S’, ‘10S’, ‘40S’, ‘80S’.

>>> nearest_pipe(Do=0.5, schedule='40S')


(20, 0.48894, 0.508, 0.009529999999999999)
>>> nearest_pipe(Do=0.5, schedule='80')
(20, 0.45562, 0.508, 0.02619)

If a diameter which is larger than any pipe in the schedule is input, an exception is raised:

>>> nearest_pipe(Do=1)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "fluids/piping.py", line 276, in nearest_pipe
raise ValueError('Pipe input is larger than max of selected schedule')
ValueError: Pipe input is larger than max of selected schedule

1.6. Pipe schedules 7


Fluids Documentation, Release 1.0.21

1.7 Wire gauges

The construction of mechanical systems often uses the “gauge” systems, a variety of old imperial conversions be-
tween plate or wire thickness and a dimensionless number. Conversion from and to the gauge system is done by the
gauge_from_t and t_from_gauge functions.
Looking up the gauge from a wire of known diameter approximately 1.2 mm:

>>> gauge_from_t(.0012)
18

The reverse conversion:

>>> t_from_gauge(18)
0.001245

Other schedules are also supported:


• Birmingham Wire Gauge (BWG) ranges from 0.2 (0.5 inch) to 36 (0.004 inch).
• American Wire Gauge (AWG) ranges from 0.167 (0.58 inch) to 51 (0.00099 inch). These are used for electrical
wires.
• Steel Wire Gauge (SWG) ranges from 0.143 (0.49 inch) to 51 (0.0044 inch). Also called Washburn & Moen wire
gauge, American Steel gauge, Wire Co. gauge, and Roebling wire gauge.
• Music Wire Gauge (MWG) ranges from 0.167 (0.004 inch) to 46 (0.18 inch). Also called Piano Wire Gauge.
• British Standard Wire Gage (BSWG) ranges from 0.143 (0.5 inch) to 51 (0.001 inch). Also called Imperial Wire
Gage (IWG).
• Stub’s Steel Wire Gage (SSWG) ranges from 1 (0.227 inch) to 80 (0.013 inch)

>>> t_from_gauge(18, schedule='AWG')


0.00102362

1.8 Tank geometry

Sizing of vessels and storage tanks is implemented in an object-oriented way as TANK in fluids.geometry. All
results use the exact equations; all are documented in the many functions in fluids.geometry.

>>> T1 = TANK(D=1.2, L=4, horizontal=False)


>>> T1.V_total, T1.A # Total volume of the tank and its surface area
(4.523893421169302, 17.34159144781566)

By default, tanks are cylinders without heads. Tank heads can be specified to be conical, ellipsoidal, torispherical,
guppy, or spherical. The heads can be specified independently. The diameter and length are not required; the total
volume desired can be specified along with the length to diameter ratio.

>>> T1 = TANK(V=10, L_over_D=0.7, sideB='conical', horizontal=False)


>>> T1.L, T1.D
(1.7731788548899077, 2.5331126498427254)

Conical, ellipsoidal, guppy and spherical heads are all governed only by one parameter, a, the distance the head extends
out from the main tank body. Torispherical heads are governed by two parameters k and f. If these parameters are not

8 Chapter 1. fluids tutorial


Fluids Documentation, Release 1.0.21

provided, the distance the head extends out will be 25% of the size of the tank’s diameter. For torispherical heads, the
distance is similar but more complicated.

>>> TANK(D=10., V=500, horizontal=False, sideA='ellipsoidal', sideB='ellipsoidal', sideA_


˓→a=1, sideB_a=1)

<Vertical tank, V=500.000000 m^3, D=10.000000 m, L=5.032864 m, ellipsoidal heads, a=1.


˓→000000 m.>

Each TANK has __repr__ implemented, to describe the tank when printed.
Torispherical tanks default to the ratios specified as ASME F&D. Other standard ratios can also be used; the documen-
tation for TANK lists their values. Here we implement DIN 28011’s ratios.

>>> TANK(D=0.01, V=0.25, horizontal=False, sideA='torispherical', sideB='torispherical')


<Vertical tank, V=0.250000 m^3, D=0.010000 m, L=3183.096799 m, torispherical heads, a=0.
˓→001693 m.>

>>> DIN = TANK(L=3, D=5, horizontal=False, sideA='torispherical', sideB='torispherical',␣


˓→sideA_f=1, sideA_k=0.1, sideB_f=1, sideB_k=0.1)

>>> print(DIN)
<Vertical tank, V=83.646361 m^3, D=5.000000 m, L=3.000000 m, torispherical heads, a=0.
˓→968871 m.>

Partial volume lookups are also useful. This is useful when the height of fluid in the tank is known, but not the volume.
The reverse calculation is also implemented, and useful when doing dynamic simulation and to calculate the new height
after a specified volume of liquid is removed.

>>> DIN.h_max
4.937742
>>> DIN.h_from_V(40)
2.376017
>>> DIN.V_from_h(4.1)
73.83841
>>> DIN.SA_from_h(2.1)
42.51740

Surface areas of the heads and the main body are available as well as the total surface area of the tank.

>>> DIN.A_sideA, DIN.A_sideB, DIN.A_lateral, DIN.A


(24.749677, 24.749677, 47.123889, 96.623244)

1.9 Miscellaneous geometry

In addition to sizing all sorts of tanks, helical coils are supported and so are a number of other simple calculations.
Sphericity is implemented as sphericity, requiring a calculated surface area and volume. For a cube of side length
3, the surface area is 6*a^2=54 and volume a^3=27. Its sphericity is then:

>>> sphericity(A=54, V=27)


0.80599597

Aspect ratio of is implemented as aspect_ratio; for example, a rectangle 0.2 m by 2 m:

>>> aspect_ratio(.2, 2)
0.1

1.9. Miscellaneous geometry 9


Fluids Documentation, Release 1.0.21

Circularity, a parameter used to characterize 2d images of particles, is implemented as circularity. For a rectangle,
one side length = 1, second side length = 100:

>>> D1 = 1
>>> D2 = 100
>>> A = D1*D2
>>> P = 2*D1 + 2*D2
>>> circularity(A, P)
0.03079690

1.10 Atmospheric properties

Various main classes are available to model the atmosphere, of varying accuracy. They are the US Standard Atmosphere
1976 (ATMOSPHERE_1976), a basic but very quick model; the NRLMSISE 00 model, substantially more powerful
and accurate and still the standard to this day (ATMOSPHERE_NRLMSISE00); and two models for wind speed only,
Horizontal Wind Model 1993 (hwm93) and Horizontal Wind Model 2014 (hwm14). The two horizontal wind models
are actually fortran codes, and are not compiled automatically on installation. Solar models are earthsun_distance,
solar_position, sunrise_sunset and solar_irradiation.
ATMOSPHERE_1976 is the simplest model, and very suitable for basic engineering purposes. It supports atmospheric
temperature, density, and pressure as a function of elevation. Optionally, a local temperature difference from earth’s
average can be specified to correct the model to local conditions but this is only a crude approximation.
Conditions 5 km into the air:

>>> atm = ATMOSPHERE_1976(Z=5000)


>>> atm.T, atm.P, atm.rho
(255.6755432218, 54048.2861457, 0.736428420779)

The standard also specifies simplistic formulas for calculating the thermal conductivity, viscosity, speed of sound, and
gravity at a given elevation:

>>> atm.g, atm.mu, atm.k, atm.v_sonic


(9.79124107698, 1.62824813536e-05, 0.0227319029514, 320.545519670)

Those property routines are static methods, and can be used without instantiating an atmosphere object:

>>> ATMOSPHERE_1976.gravity(Z=1E5)
9.5052387
>>> ATMOSPHERE_1976.sonic_velocity(T=300)
347.220809
>>> ATMOSPHERE_1976.viscosity(T=400)
2.285266e-05
>>> ATMOSPHERE_1976.thermal_conductivity(T=400)
0.03365714

ATMOSPHERE_NRLMSISE00 is the recommended model, and calculates atmospheric density, temperature, and pressure
as a function of height, latitude/longitude, day of year, and seconds since start of day. The model can also take into
account solar and geomagnetic disturbances which effect the atmosphere at very high elevations if more parameters are
provided. It is valid up to 1000 km. This model is somewhat slow; it is a Python port of the Fortran version, created
by Joshua Milas. It does not support gravity profiles or transport properties, but does calculate the composition of the
atmosphere (He, O, N2, O2, Ar, H2, N2 as constituents).
1000 m elevation, 45 degrees latitude and longitude, 150th day of year, 0 seconds in:

10 Chapter 1. fluids tutorial


Fluids Documentation, Release 1.0.21

>>> atm = ATMOSPHERE_NRLMSISE00(Z=1E3, latitude=45, longitude=45, day=150)


>>> atm.T, atm.P, atm.rho
(285.544, 90394.44, 1.10190)

The composition of the atmosphere is specified in terms of individual molecules/m^3:

>>> atm.N2_density, atm.O2_density


(1.7909954e+25, 4.8047035e+24)

This model uses the ideal gas law to convert particle counts to mass density. Mole fractions of each species are available
as well.

>>> atm.components
['N2', 'O2', 'Ar', 'He', 'O', 'H', 'N']
>>> atm.zs
[0.7811046, 0.2095469, 0.009343, 5.2417e-06, 0.0, 0.0, 0.0]

The horizontal wind models have almost the same API, and calculate wind speed and direction as a function of elevation,
latitude, longitude, day of year and time of day. hwm93 can also take as an argument local geomagnetic conditions and
solar activity, but this effect was found to be so negligible it was removed from future versions of the model such as
hwm14.
Calculation of wind velocity, meridional (m/sec Northward) and zonal (m/sec Eastward) for 1000 m elevation, 45
degrees latitude and longitude, 150th day of year, 0 seconds in, with both models:

>>> hwm93(Z=1000, latitude=45, longitude=45, day=150)


(-0.0038965975400060415, 3.8324742317199707)
>>> hwm14(Z=1000, latitude=45, longitude=45, day=150)
(-0.9920163154602051, 0.4105832874774933)

These wind velocities are only historical normals; conditions may vary year to year.
The solar radiation model is based around the Sun Position Algorithm (SPA) developed by NREL; it can calculate
the position of the sun in the sky at any time for any place on Earth, and can calculate how far away the sun is from
Earth. The python implementation used is a slightly modified version of the Python implementation written by Tony
Lorenzo and released under the BSD 3-clause license. The algorithm is published with the excellent pvlib library for
solar energy modelling applications.
The functions included are earthsun_distance, sunrise_sunset, solar_position and solar_irradiation.
All take and/or receive datetime instances, which introduces the nightmare of time zones.
All the functions have no internal way of knowing about what time zone the latitude/longitude inputs are in. They only
calculate the position of earth, and they need to know what “real” time it is, so it can deal with leap seconds, etc. There
are now two options for how to provide time inputs. The first is to provide the time in the UTC time zone, which has
replaced Greenwich Mean Time (GMT) as the standard reference time. The inputs and outputs of this function will
look strange, because unless you happen to be working somewhere with that time zone, you have to convert the time
inputs to that time zone initially.
So to find the solar position at 6 AM in Perth, Australia (offset -8 hours), we would manually convert the time zone.

>>> from datetime import datetime, timedelta


>>> solar_position(datetime(2020, 6, 6, 14, 30, 0) - timedelta(hours=8), -31.95265, 115.
˓→85742)

[63.4080568623, 63.4400018158, 26.59194313766, 26.5599981841, 325.121376246, 75.


˓→7467475485]

This painful, so timezone support has been added to the functions using the library pytz.

1.10. Atmospheric properties 11


Fluids Documentation, Release 1.0.21

>>> import pytz


>>> when = pytz.timezone('Australia/Perth').localize(datetime(2020, 6, 6, 14, 30, 0))
>>> solar_position(when, -31.95265, 115.85742)
[63.4080568623, 63.4400018158, 26.59194313766, 26.55999818417, 325.121376246, 75.
˓→7467475485]

To determine the distance of earth and the sun, use the earthsun_distance function which accepts a single datetime
object and returns the distance in meters. This is still impacted by timezones.

>>> earthsun_distance(pytz.timezone('America/Edmonton').localize(datetime(2003, 10, 17,␣


˓→13, 30, 30)))

149080606927.6

To determine when the sun rises, sets, and is at solar noon, use the sunrise_sunset function, which accepts a datetime
instance, a latitude, and a longitude in degrees.

>>> import pytz


>>> sunrise, sunset, transit = sunrise_sunset(pytz.timezone('America/Edmonton').
˓→localize(datetime(2018, 4, 17)), 51.0486, -114.07)

>>> sunrise
datetime.datetime(2018, 4, 16, 6, 39, 1, 570479, tzinfo=<DstTzInfo 'America/Edmonton'␣
˓→MDT-1 day, 18:00:00 DST>)

>>> sunset
datetime.datetime(2018, 4, 16, 20, 32, 25, 778162, tzinfo=<DstTzInfo 'America/Edmonton'␣
˓→MDT-1 day, 18:00:00 DST>)

>>> transit
datetime.datetime(2018, 4, 16, 13, 36, 0, 386341, tzinfo=<DstTzInfo 'America/Edmonton'␣
˓→MDT-1 day, 18:00:00 DST>)

To determine where in the sky the sun appears at any location and time, use the solar_position function, which
requires a datetime instance, a latitude, and a longitude.

>>> apparent_zenith, _, _, _, azimuth, _ = solar_position(pytz.timezone('America/Edmonton


˓→').localize(datetime(2003, 10, 17, 13, 30, 30)), 51.0486, -114.07)

>>> apparent_zenith, azimuth


(60.3674252872, 182.513677566)

The function returns several other properties which may be of interest. Its first return value, apparent_zenith, is the
zenith which an observer on the ground would see the sun at after accounting for atmospheric refraction. To more
accurately calculate the solar position, the temperature and pressure at ground level are required as well - as they
impact the refraction as well; these arguments are accepted as well by solar_position for more accuracy. When
specifying pressure, be sure to use the real pressure of the site - not an adjusted to standard conditions one as reported
by weather stations!

>>> solar_position(pytz.timezone('America/Edmonton').localize(datetime(2003, 10, 17, 13,␣


˓→30, 30)), 51.0486, -114.07, T=290, P=8.9E4)[0]

60.370155603

The primary application of sun position is for calculating the amount of sunlight received by an object, via the
solar_irradiation function. Unlike the previous functions, it requires an installation of pvlib to work.
In addition to the arguments previously discussed, the surface_tilt and surface_azimuth of the object are required. The
object is assumed to be a plane only - other objects need to be discretized into planes through finite-element calculations.
The elevation is required, as well as the average albedo of the ground surrounding the object (not immediately; within
several kilometers). The calculation is then straightforward:

12 Chapter 1. fluids tutorial


Fluids Documentation, Release 1.0.21

>>> solar_irradiation(Z=1100.0, latitude=51.0486, longitude=-114.07, linke_turbidity=3,


... moment=pytz.timezone('America/Edmonton').localize(datetime(2018, 4, 15, 13, 43, 5)),␣
˓→surface_tilt=41.0,

... surface_azimuth=180.0, albedo=0.25)


(1065.762189628, 945.265656450, 120.4965331774, 95.3153534421, 25.18117973531)

The first return value is the solar radiation which hits the object, in W/m^2. The next two are the components of the
radiation that comes 1) directly from the sun and 2) diffusely, after being reflected from some other object. The final
two return values break up the diffuse light into 3) a component reflected only in the sky and clouds and 4) a component
caused by earth’s albedo, bounding off the surface, then the sky, before hitting the object.
Note that if not provided, the temperature and pressure of the ground are obtained via the ATMOSPHERE_NRLMSISE00
class, but this quadruples the time required for the calculation.

1.11 Compressor sizing

Both isothermal and isentropic/polytropic compression models are implemented in fluids.compressible. Isother-
mal compression calculates the work required to compress a gas from one pressure to another at a specified temperature.
This is the best possible case for compression; all actual compressors require more work to do the compression. By
making the compression take a large number of stages and cooling the gas between stages, this can be approached
reasonable closely. Integrally geared compressors are often used for this purpose
The function isothermal_work_compression provides this calculation.

>>> isothermal_work_compression(P1=1E5, P2=1E6, T=300)


5743.4273042447

Work is calculated on a J/mol basis. If the second pressure is lower than the first, a negative work will result and you
are modeling an expander instead of a compressor. Gas compressibility factor can also be specified. The lower the
gas’s compressibility factor, the less power required to compress it.

>>> isothermal_work_compression(P1=1E6, P2=1E5, T=300)


-5743.42730
>>> isothermal_work_compression(P1=1E5, P2=1E6, T=300, Z=0.95)
5456.2559390

There is only one function implemented to model both isentropic and polytropic compressors, as the only difference
is that a polytropic exponent n is used instead of the gas’s isentropic exponent Cp/Cv k and the type of efficiency is
changed. The model requires initial temperature, inlet and outlet pressure, isentropic exponent or polytropic exponent,
and optionally an efficiency.
Compressing air from 1 bar to 10 bar, with inlet temperature of 300 K and efficiency of 78% with the
isentropic_work_compression function:

>>> isentropic_work_compression(P1=1E5, P2=1E6, T1=300, k=1.4, eta=0.78) # work, J/mol


10416.87698

The model allows for the inlet or outlet pressure or efficiency to be calculated instead of the work:

>>> isentropic_work_compression(T1=300, P1=1E5, P2=1E6, k=1.4, W=10416) # Calculate␣


˓→efficiency

0.78006567294
>>> isentropic_work_compression(T1=300, P1=1E5, k=1.4, W=10416, eta=0.78) # Calculate P2
(continues on next page)

1.11. Compressor sizing 13


Fluids Documentation, Release 1.0.21

(continued from previous page)


999857.9648
>>> isentropic_work_compression(T1=300, P2=1E6, k=1.4, W=10416, eta=0.78) # Calculate P1
100014.20552

The approximate temperature rise can also be calculated with the function isentropic_T_rise_compression.

>>> T2 = isentropic_T_rise_compression(P1=1E5, P2=1E6, T1=300, k=1.4, eta=0.78)


>>> T2, T2-300 # outlet temperature and temperature rise, K
(657.960664955, 357.9606649550)

It is more accurate to use an enthalpy-based model which incorporates departure functions.


Polytropic exponents and efficiencies are convertible to isentropic exponents and efficiencies with
isentropic_efficiency and polytropic_exponent . For the above example, with k = 1.4 and eta_s =
0.78:

>>> eta_p = isentropic_efficiency(P1=1E5, P2=1E6, k=1.4, eta_s=0.78) # with eta_s␣


˓→specified, returns polytropic efficiency

>>> n = polytropic_exponent(k=1.4, eta_p=eta_p)


>>> eta_p, n
(0.837678534, 1.51763186)

With those results, we can prove the calculation worked by calculating the work required using these polytropic inputs:

>>> isentropic_work_compression(P1=1E5, P2=1E6, T1=300, k=n, eta=eta_p)


10416.8769

The work is the same as calculated with the original inputs. Note that the conversion is specific to three inputs: Inlet
pressure; outlet pressure; and isentropic exponent k. If any of those change, then the calculated polytropic exponent
and efficiency will be different as well.
To go in the reverse direction, we take the case of isentropic exponent k =Cp/Cv=1.4, eta_p=0.83 The power is calculated
to be:
We first need to calculate the polytropic exponent from the polytropic efficiency:

>>> n = polytropic_exponent(k=1.4, eta_p=0.83)


>>> print(n)
1.524934383

>>> isentropic_work_compression(P1=1E5, P2=1E6, T1=300, k=n, eta=0.83)


10556.4981

Converting polytropic efficiency to isentropic efficiency:

>>> eta_s = isentropic_efficiency(P1=1E5, P2=1E6, k=1.4, eta_p=0.83)


>>> print(eta_s)
0.769683649

Checking the calculated power is the same:

>>> isentropic_work_compression(P1=1E5, P2=1E6, T1=300, k=1.4, eta=eta_s)


10556.4981

14 Chapter 1. fluids tutorial


Fluids Documentation, Release 1.0.21

1.12 Gas pipeline sizing

The standard isothermal compressible gas flow is fully implemented as isothermal_gas, and through a variety of
numerical and analytical expressions, can solve for any of the following parameters:
• Mass flow rate
• Upstream pressure (numerical)
• Downstream pressure (analytical or numerical if an overflow occurs)
• Diameter of pipe (numerical)
• Length of pipe
Solve for the mass flow rate of gas (kg/s) flowing through a 1 km long 0.5 m inner diameter pipeline, initially at 10 bar
with a density of 11.3 kg/m^3 going downstream to a pressure of 9 bar.

>>> isothermal_gas(rho=11.3, fd=0.00185, P1=1E6, P2=9E5, L=1000, D=0.5)


145.4847

The same case, but sizing the pipe to take 100 kg/s of gas:

>>> isothermal_gas(rho=11.3, fd=0.00185, P1=1E6, P2=9E5, L=1000, m=100)


0.4297170

The same case, but determining what the outlet pressure will be if 200 kg/s flow in the 0.5 m diameter pipe:

>>> isothermal_gas(rho=11.3, fd=0.00185, P1=1E6, D=0.5, L=1000, m=200)


784701.068182

Determining pipe length from known diameter, pressure drop, and mass flow (possible but not necessarily useful):

>>> isothermal_gas(rho=11.3, fd=0.00185, P1=1E6, P2=9E5, D=0.5, m=150)


937.325802775

Not all specified mass flow rates are possible. At a certain downstream pressure, choked flow will develop - that
downstream pressure is that at which the mass flow rate reaches a maximum. An exception will be raised if such an
input is specified:

>>> isothermal_gas(rho=11.3, fd=0.00185, P1=1E6, L=1000, D=0.5, m=260)


Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "fluids/compressible.py", line 886, in isothermal_gas
'kg/s at a downstream pressure of %f ' %(P1, m_max, Pcf))
Exception: The desired mass flow rate cannot be achieved with the specified upstream␣
˓→pressure of 1000000.000000 Pa; the maximum flowrate is 257.216733 kg/s at a downstream␣

˓→pressure of 389699.731765

>>> isothermal_gas(rho=11.3, fd=0.00185, P1=1E6, P2=3E5, L=1000, D=0.5)


Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "fluids/compressible.py", line 821, in isothermal_gas
due to the formation of choked flow at P2=%f, specified outlet pressure was %f' %␣
˓→(Pcf, P2))

Exception: Given outlet pressure is not physically possible due to the formation of␣
˓→choked flow at P2=389699.731765, specified outlet pressure was 300000.000000

1.12. Gas pipeline sizing 15


Fluids Documentation, Release 1.0.21

The downstream pressure at which choked flow occurs can be calculated directly as well:

>>> P_isothermal_critical_flow(P=1E6, fd=0.00185, L=1000., D=0.5)


389699.731

A number of limitations exist with respect to the accuracy of this model:


• Density dependence is that of an ideal gas.
• If calculating the pressure drop, the average gas density cannot be known immediately; iteration must be used to
correct this.
• The friction factor depends on both the gas density and velocity, so it should be solved for iteratively as well. It
changes throughout the pipe as the gas expands and velocity increases.
• The model is not easily adapted to include elevation effects due to the acceleration term included in it.
• As the gas expands, it will change temperature slightly, further altering the density and friction factor.
We can explore how the gas density and friction factor effect the model using the thermo library for chemical properties.
Compute the downstream pressure of 50 kg/s of natural gas flowing in a 0.5 m diameter pipeline for 1 km, roughness
= 5E-5 m:

>>> from thermo import *


>>> from fluids import *
>>> from math import pi
>>> D = 0.5
>>> L = 1000
>>> epsilon = 5E-5
>>> S1 = Stream('natural gas', P=1E6, m=50)
>>> V = S1.Q/(pi/4*D**2)
>>> Re = S1.Reynolds(D=D, V=V)
>>> fd = friction_factor(Re=Re, eD=epsilon/D)
>>> P2 = isothermal_gas(rho=S1.rho, fd=fd, P1=S1.P, D=D, L=L, m=S1.m)
>>> P2
877420.071063

In the above example, the friction factor was calculated using the density and velocity of the gas when it enters the
stream. However, the average values, at the middle pressure, and more representative. We can iterate to observe the
effect of using the average values:

>>> for i in range(10):


... S2 = Stream('natural gas', P=0.5*(P2+S1.P), m=50)
... V = S2.Q/(pi/4*D**2)
... Re = S2.Reynolds(D=D, V=V)
... fd = friction_factor(Re=Re, eD=epsilon/D)
... P2 = isothermal_gas(rho=S2.rho, fd=fd, P1=S1.P, D=D, L=L, m=S1.m)
... print('%g' %P2)
868535
867840
867786
867781
867781
867781
867781
867781
(continues on next page)

16 Chapter 1. fluids tutorial


Fluids Documentation, Release 1.0.21

(continued from previous page)


867781
867781

As can be seen, the system converges very quickly. The difference in calculated pressure drop is approximately 1%.
Please note the values given here may change as properties are updated in the thermo library, they are here to demon-
strate the technique only.

1.13 Gas pipeline sizing: Empirical equations

In addition to the actual model, many common simplifications used in industry are implemented as well. These are
equally capable of solving for any of the following inputs:
• Mass flow rate
• Upstream pressure
• Downstream pressure
• Diameter of pipe
• Length of pipe
None of these models include an acceleration term. In addition to reducing their accuracy, it allows all solutions for the
above variables to be analytical. These models cannot predict the occurrence of choked flow, and model only turbulent,
not laminar, flow. Most of these models do not depend on the gas’s viscosity.
Rather than using mass flow rate, they use specific gravity and volumetric flow rate. The volumetric flow rate is
specified with respect to a reference temperature and pressure. The defaults are 288.7 K and 101325 Pa, dating to the
old imperial standard of 60° F. The specific gravity is with respect to air at the reference conditions. As the ideal gas
law is used in each of these models, in addition to pressure and specific gravity the average temperature in the pipeline
is required. Average compressibility factor is an accepted input to all models and corrects the ideal gas law’s ideality.
The full list of approximate models is as follows:
• Panhandle_A
• Panhandle_B
• Weymouth
• Oliphant
• Fritzsche
• Muller
• IGT
• Spitzglass_high
• Spitzglass_low
As an example, calculating flow for a pipe with diameter 0.34 m, upstream pressure 90 bar and downstream pressure
20 bar, 160 km long, 0.693 specific gravity and with an average temperature in the pipeline of 277.15 K:

>>> Panhandle_A(D=0.340, P1=90E5, P2=20E5, L=160E3, SG=0.693, Tavg=277.15)


42.5608

1.13. Gas pipeline sizing: Empirical equations 17


Fluids Documentation, Release 1.0.21

Each model also includes a pipeline efficiency term, ranging from 0 to 1. These are just empirical correction factors,
Some of the models were developed with theory and a correction factor applied always; others are more empirical, and
have a default correction factor. 0.92 is the default for the Panhandle A/B, Weymouth, and Oliphant models; the rest
default to a correction of 1 i.e. no correction at all.
The Muller and IGT models are the most accurate and recent approximations. They both depend on viscosity.

>>> Muller(D=0.340, P1=90E5, P2=20E5, L=160E3, SG=0.693, mu=1E-5, Tavg=277.15)


60.457966
>>> IGT(D=0.340, P1=90E5, P2=20E5, L=160E3, SG=0.693, mu=1E-5, Tavg=277.15)
48.923517

These empirical models are included because they are mandated in many industrial applications regardless of their
accuracy, and correction factors have already been determined.
A great deal of effort was spent converting these models to base SI units and checking the coefficients used in each
model with multiple sources. In many cases multiple sets of coefficients are available for a model; the most authoritative
or common ones were used in those cases.

1.14 Drag and terminal velocity

A number of spherical particle drag correlations are implemented.


In the simplest case, consider a spherical particle of diameter D=1 mm, density=3400 kg/m^3, travelling at 30 m/s in
air with viscosity mu=1E-5 Pa*s and density 1.2 kg/m^3.
We calculate the particle Reynolds number:

>>> Re = Reynolds(V=30, rho=1.2, mu=1E-5, D=1E-3)


>>> Re
3599.999999

The drag coefficient Cd can be calculated with no other parameters from drag_sphere:

>>> drag_sphere(Re)
0.391480468

The terminal velocity of the particle is easily calculated with the v_terminal function.

>>> v_terminal(D=1E-3, rhop=3400, rho=1.2, mu=1E-5)


8.9712239

Very often, we are not interested in just what the velocity of the particle will be at terminal conditions, but on the
distance it will travel and the particle will never have time to reach terminal conditions. An integrating function is
available to do that. Consider that same particle being shot directly down from a helicopter 100 m high.
The integrating function, integrate_drag_sphere, performs the integral with respect to time. At one second, we
can see the (velocity, distance travelled):

>>> integrate_drag_sphere(D=1E-3, rhop=3400., rho=1.2, mu=1E-5, t=1, V=30, distance=True)


(10.56187, 15.6079)

After integrating to 10 seconds, we can see the particle has travelled 97 meters and is almost on the ground.

18 Chapter 1. fluids tutorial


Fluids Documentation, Release 1.0.21

>>> integrate_drag_sphere(D=1E-3, rhop=3400., rho=1.2, mu=1E-5, t=10, V=30,␣


˓→distance=True)

(8.971223, 97.132762)

For this example simply using the terminal velocity would have given an accurate estimation of distance travelled:

>>> 8.971223953182939*10
89.7122395318294

Many engineering applications such as direct contact condensers do operate far from terminal velocity however, and
this function is useful there.

1.15 Pressure drop through packed beds

Twelve different packed bed pressure drop correlations are available. A meta function which allows any of them to be
selected and automatically selects the most accurate correlation for the given parameters.
Pressure drop through a packed bed depends on the density, viscosity and velocity of the fluid, as well as the diameter of
the particles, the amount of free space in the bed (voidage), and to a lesser amount the ratio of particle to tube diameter
and the shape of the particles.
Consider 0.8 mm pebbles with 40% empty space with water flowing through a 2 m column creeping flow at a superficial
velocity of 1 mm/s. We can calculate the pressure drop in Pascals using the dP_packed_bed function:

>>> dP_packed_bed(dp=8E-4, voidage=0.4, vs=1E-3, rho=1E3, mu=1E-3, L=2)


2876.565

The method can be specified manually as well, for example the commonly used Ergun equation:

>>> dP_packed_bed(dp=8E-4, voidage=0.4, vs=1E-3, rho=1E3, mu=1E-3, L=2, Method='Ergun')


2677.73437

Incorporation of the tube diameter will add wall effects to the model.

>>> dP_packed_bed(dp=8E-4, voidage=0.4, vs=1E-3, rho=1E3, mu=1E-3, L=2, Dt=0.01)


2510.325132

Models can be used directly as well. The length of the column is an optional input; if not provided, the result will be
in terms of Pa/m.

>>> KTA(dp=8E-4, voidage=0.4, vs=1E-3, rho=1E3, mu=1E-3) # A correlation standardized␣


˓→for use in pebble reactors

1440.40927

If the column diameter was 0.5 m, the flow rate in m^3/s would be:

>>> .001*(pi/4*0.5**2) # superficial_velocity*A_column


0.0001963495408

The holdup (total volume of the column holding fluid not particles) would be:

>>> (pi/4*0.5**2)*(2)*0.4 # A_column*H_column*voidage


0.15707963267948

1.15. Pressure drop through packed beds 19


Fluids Documentation, Release 1.0.21

Not all particles are spherical. There have been correlations published for specific shapes, but what is often performed
is simply an adjustment of particle diameter by its sphericity in the correlation, with the effective dp used as the product
of the actual dp and the sphericity of the particle. The less spherical the particles, the higher the pressure drop. This is
supported in all of the correlations.

>>> dP_packed_bed(dp=8E-4, voidage=0.4, vs=1E-3, rho=1E3, mu=1E-3, L=2, Dt=0.01,␣


˓→sphericity=0.9)

3050.419598116

While it is easy to measure the volume of particles added to a given column and determine the voidage experimentally,
this does not help in the design process. Several authors have methodically filled columns with particles of different
sizes and created correlations in terms of sphericity and particle to tube diameter ratios. Three such correlations are im-
plemented in fluids, one generally using sphericity, one for spheres, and one for cylinders (voidage_Benyahia_Oneil,
voidage_Benyahia_Oneil_spherical and voidage_Benyahia_Oneil_cylindrical respectively).
1 mm spheres in a 5 cm diameter tube:

>>> voidage_Benyahia_Oneil_spherical(Dp=.001, Dt=.05)


0.390665315

1 mm diameter cylinder 5 mm long in a 5 cm diameter tube:

>>> V_cyl = V_cylinder(D=0.001, L=0.005)


>>> D_sphere_eq = (6*V_cyl/pi)**(1/3.)
>>> A_cyl = A_cylinder(D=0.001, L=0.005)
>>> sph = sphericity(A=A_cyl, V=V_cyl)
>>> voidage_Benyahia_Oneil_cylindrical(Dpe=D_sphere_eq, Dt=0.05, sphericity=sph)
0.37548952

Same calculation, but using the general correlation for all shapes:

>>> voidage_Benyahia_Oneil(Dpe=D_sphere_eq, Dt=0.05, sphericity=sph)


0.44257695

1.16 Pressure drop through piping

It is straightforward to calculate the pressure drop of fluid flowing in a pipeline with any number of fittings using the
fluids library’s fluids.fittings submodule.
15 m of piping, with a sharp entrance and sharp exit, two 30 degree miter bends, one rounded bend 45 degrees, 1 sharp
contraction to half the pipe diameter and 1 sharp expansion back to the normal pipe diameter (water, V=3 m/s, Di=0.05,
roughness 0.01 mm):

>>> Re = Reynolds(V=3, D=0.05, rho=1000, mu=1E-3)


>>> fd = friction_factor(Re, eD=1E-5/0.05)
>>> K = K_from_f(fd=fd, L=15, D=0.05)
>>> K += entrance_sharp()
>>> K += exit_normal()
>>> K += 2*bend_miter(angle=30)
>>> K += bend_rounded(Di=0.05, angle=45, fd=fd)
>>> K += contraction_sharp(Di1=0.05, Di2=0.025)
>>> K += diffuser_sharp(Di1=0.025, Di2=0.05)
(continues on next page)

20 Chapter 1. fluids tutorial


Fluids Documentation, Release 1.0.21

(continued from previous page)


>>> dP_from_K(K, rho=1000, V=3)
37920.511

If the diameter of the piping varies, not all of the loss coefficients will be with respect to the same diameter. Each loss
coefficient must be converted to one standard diameter before the total pressure drop can be calculated. The following
example is solved with the optional pint unit compatibility module.
40 m piping, beveled entrance (10 mm length, 30 degrees, into 5 cm ID pipe) , then a 30 degree miter bend, a sharp
contraction to half the pipe diameter (5 m long), a 30 degree miter bend, a rounded 45 degree bend, a sharp expansion
to 4 cm ID pipe (15 more meters), and a sharp exit:

>>> from fluids.units import *


>>> from math import *
>>> material = nearest_material_roughness('steel', clean=True)
>>> epsilon = material_roughness(material)
>>> Q = .01*u.m**3/u.s
>>> rho = 1000*u.kg/u.m**3
>>> mu = 1E-4*u.Pa*u.s
>>> D1 = 5*u.cm
>>> D2 = 2.5*u.cm
>>> D3 = 4*u.cm
>>> L1 = 20*u.m
>>> L2 = 5*u.m
>>> L3 = 15*u.m
>>> V1 = Q/(pi/4*D1**2)

>>> Re = Reynolds(V=V1, D=D1, rho=rho, mu=mu)


>>> fd = friction_factor(Re, eD=epsilon/D1)
>>> K = K_from_f(fd=fd, L=L1, D=D1)
>>> K += entrance_beveled(Di=D1, l=10*u.mm, angle=30*u.degrees)
>>> K += bend_miter(angle=30*u.degrees)
>>> K += contraction_sharp(Di1=D1, Di2=D2)

>>> V2 = Q/(pi/4*D2**2)
>>> Re2 = Reynolds(V=V2, D=D2, rho=rho, mu=mu)
>>> fd2 = friction_factor(Re2, eD=epsilon/D2)

>>> K += change_K_basis(K_from_f(fd=fd2, L=L2, D=D2), D1=D2, D2=D1)


>>> K += change_K_basis(K1=bend_miter(angle=30*u.degrees), D1=D2, D2=D1)
>>> K += change_K_basis(K1=bend_rounded(Di=D2, angle=45*u.degrees, fd=fd2), D1=D2, D2=D1)

>>> V3 = Q/(pi/4*D3**2)
>>> Re3 = Reynolds(V=V3, D=D3, rho=rho, mu=mu)
>>> fd3 = friction_factor(Re3, eD=epsilon/D3)

>>> K += change_K_basis(K_from_f(fd=fd3, L=L3, D=D3), D1=D3, D2=D1)


>>> K += diffuser_sharp(Di1=D2, Di2=D3)

>>> dP_from_K(K, rho=rho, V=V1)


<Quantity(734959.105, 'pascal')>

1.16. Pressure drop through piping 21


Fluids Documentation, Release 1.0.21

1.17 Control valve sizing: Introduction

The now internationally-standardized methods (IEC 60534) for sizing liquid and gas valves have been implemented.
Conversion factors among the different types of valve coefficients are implemented as well.
There are two forms of loss coefficient used for vales, an imperial and a metric variable called “valve flow coefficient”.
Both can be converted to the standard dimensionless loss coefficient.
If one knows the actual loss coefficient of a valve, the valve flow coefficient can be calculated in either metric or imperial
forms as follows. The flow coefficients are specific to the diameter of the valve. Kv, Cv, and K values can be converted
easily with the functions K_to_Kv, K_to_Cv, Cv_to_K, Kv_to_K, Cv_to_Kv, and Kv_to_Cv.
>>> from fluids import *
>>> K_to_Kv(K=16, D=0.016)
2.56
>>> K_to_Cv(K=16, D=0.016)
2.95961402

If Kv or Cv are known, they can be converted to each other with the proportionality constant 1.156, which is derived
from a unit conversion only. This conversion does not require valve diameter.
>>> Cv_to_Kv(12)
10.37973186
>>> Kv_to_Cv(10.37)
11.9887489

If a Cv or Kv is obtained from a valve datasheet, it can be converted into a standard loss coefficient as follows.
>>> Kv_to_K(Kv=2.56, D=0.016)
16.00000000
>>> Cv_to_K(Cv=3, D=0.016)
15.57211586

For a valve with a specified Kv and pressure drop, the flow rate can be calculated easily for the case of non-choked
non-compressible flow (neglecting other friction losses), as illustrated in the example below for a 5 cm valve with a
pressure drop 370 kPa and density of 870 kg/m^3:
>>> Kv = 72.5
>>> D = 0.05
>>> dP = 370E3
>>> K = Kv_to_K(D=D, Kv=Kv)
>>> rho = 870
>>> V = (dP/(.5*rho*K))**0.5 # dP = K*0.5*rho*V^2
>>> A = pi/4*D**2
>>> Q = V*A
>>> Q
0.04151682

Alternatively, the required Kv can be calculated from an assumed diameter and allowable pressure drop:
>>> Q = .05
>>> D = 0.05
>>> dP = 370E3
>>> rho = 870
>>> A = pi/4*D**2
(continues on next page)

22 Chapter 1. fluids tutorial


Fluids Documentation, Release 1.0.21

(continued from previous page)


>>> V = Q/A
>>> K = dP/(.5*rho*V**2)
>>> K_to_Kv(D=D, K=K)
87.3139992

The approach documented above is not an adequate procedure for sizing valves however because choked flow, com-
pressible flow, the effect of inlet and outlet reducers, the effect of viscosity and the effect of laminar/turbulent flow all
have large influences on the performance of control valves.
Historically, valve manufacturers had their own standards for sizing valves, but these have been standardized today into
the IEC 60534 methods.

1.18 Control valve sizing: Liquid flow

To rigorously size a control valve for liquid flow, the inlet pressure, allowable pressure drop, and desired flow rate must
first be known. These need to be determined taking into account the entire pipe network and the various operating
conditions it needs to support; sizing the valves can be performed afterward and only if no valve with the desired
performance is available does the network need to be redesigned.
To illustrate sizing a valve, we borrow an example from Emerson’s Control Valve Handbook, 4th edition (2005). It
involves a flow of 800 gpm of liquid propane. The inlet and outlet pipe size is 8 inches, but the size of the valve itself
is unknown. The desired pressure drop is 25 psi.
Converting this problem to SI units and using the thermo library to calculate the necessary properties of the fluid, we
calculate the necessary Kv of the valve based on an assumed valve size of 3 inches:

>>> from scipy.constants import *


>>> from fluids.control_valve import size_control_valve_l
>>> from thermo.chemical import Chemical
>>> P1 = 300*psi + psi # to Pa
>>> P2 = 275*psi + psi # to Pa
>>> T = 273.15 + 21 # to K
>>> propane = Chemical('propane', P=(P1+P2)/2, T=T)
>>> rho = propane.rho
>>> Psat = propane.Psat
>>> Pc = propane.Pc
>>> mu = propane.mu
>>> Q = 800*gallon/minute # to m^3/s
>>> D1 = D2 = 8*inch # to m
>>> d = 3*inch # to m

The standard specifies two more parameters specific to a valve:


• FL, Liquid pressure recovery factor of a control valve without attached fittings
• Fd, Valve style modifier
Both of these are factors between 0 and 1. In the Emerson handbook, they are not considered in the sizing procedure
and set to 1. These factors are also a function of the diameter of the valve and are normally tabulated next to the values
of Cv or Kv for a valve. Now using size_control_valve_l to solve for the flow coefficient:

>>> Kv = size_control_valve_l(rho, Psat, Pc, mu, P1, P2, Q, D1, D2, d, FL=1, Fd=1)
>>> Kv
109.3970

1.18. Control valve sizing: Liquid flow 23


Fluids Documentation, Release 1.0.21

The handbook states the Cv of the valve is 121; we convert Kv to Cv:

>>> Kv_to_Cv(Kv=Kv)
126.4738

The example in the book calculated Cv = 125.7, but doesn’t actually use the full calculation method. Either way, the
valve will not carry the desired flow rate; we need to try a larger valve size. The 4 inch size is tried next in the example,
which has a known Cv of 203.

>>> d = 4*inch # to m
>>> Kv = size_control_valve_l(rho, Psat, Pc, mu, P1, P2, Q, D1, D2, d, FL=1, Fd=1)
>>> Kv_to_Cv(Kv=Kv)
116.175503

The calculated Cv is well under the valve’s maximum Cv; we can select it.
This model requires a vapor pressure and a critical pressure of the fluid as inputs. There is no clarification in the
standard about how to handle mixtures, which do not have these values. It is reasonable to calculate vapor pressure as
the bubble pressure, and the mixture’s critical pressure through a mole-weighted average.
For actual values of Cv, Fl, Fd, and available diameters, an excellent resource is the Fisher Catalog 12.

1.19 Control valve sizing: Gas flow

To rigorously size a control valve for gas flow, the inlet pressure, allowable pressure drop, and desired flow rate must
first be known. These need to be determined taking into account the entire pipe network and the various operating
conditions it needs to support; sizing the valves can be performed afterward and only if no valve with the desired
performance is available does the network need to be redesigned.
To illustrate sizing a valve, we borrow an example from Emerson’s Control Valve Handbook, 4th edition (2005). It
involves a flow of 6 million ft^3/hour of natural gas. The inlet and outlet pipe size is 8 inches, but the size of the valve
itself is unknown. The desired pressure drop is 150 psi.
Converting this problem to SI units and using the thermo library to calculate the necessary properties of the fluid, we
calculate the necessary Kv of the valve based on an assumed valve size of 8 inches.

>>> from scipy.constants import *


>>> from fluids.control_valve import size_control_valve_g
>>> from thermo.chemical import Chemical
>>> P1 = 214.7*psi
>>> P2 = 64.7*psi
>>> T = 16 + 273.15
>>> natural_gas = Mixture('natural gas', T=T, P=(P1+P2)/2)
>>> Z = natural_gas.Z
>>> MW = natural_gas.MW
>>> mu = natural_gas.mu
>>> gamma = natural_gas.isentropic_exponent
>>> Q = 6E6*foot**3/hour
>>> D1 = D2 = d = 8*inch # 8-inch Fisher Design V250

The standard specifies three more parameters specific to a valve:


• FL, Liquid pressure recovery factor of a control valve without attached fittings
• Fd, Valve style modifier

24 Chapter 1. fluids tutorial


Fluids Documentation, Release 1.0.21

• xT, Pressure difference ratio factor of a valve without fittings at choked flow
All three of these are factors between 0 and 1. In the Emerson handbook, FL and Fd are not considered in the sizing
procedure and set to 1. xT is specified as 0.137 at full opening. These factors are also a function of the diameter of the
valve and are normally tabulated next to the values of Cv or Kv for a valve. Now using size_control_valve_g to
solve for the flow coefficient:

>>> Kv = size_control_valve_g(T, MW, mu, gamma, Z, P1, P2, Q, D1, D2, d, FL=1, Fd=1, xT=.
˓→137)

>>> Kv_to_Cv(Kv)
1563.44772

The 8-inch valve is rated with Cv = 2190. The valve is adequate to provide the desired flow because the rated Cv is
higher. The calculated value in their example is 1515, differing slightly due to the properties used.
The example next goes on to determine the actual opening position the valve should be set at to provide the required
flow. Their conclusion is approximately 75% open; we can do better using a numerical solver. The values of opening
at different positions are obtained in this example from the valve’s datasheet.
Loading the data and creating interpolation functions so FL, Fd, and xT are all smooth functions:

>>> from scipy.interpolate import interp1d


>>> from scipy.optimize import newton
>>> openings = [.2, .3, .4, .5, .6, .7, .8, .9]
>>> Fds = [0.59, 0.75, 0.85, 0.92, 0.96, 0.98, 0.99, 0.99]
>>> Fls = [0.9, 0.9, 0.9, 0.85, 0.78, 0.68, 0.57, 0.45]
>>> xTs = [0.92, 0.81, 0.85, 0.63, 0.58, 0.48, 0.29, 0.14]
>>> Kvs = [24.1, 79.4, 153, 266, 413, 623, 1060, 1890]
>>> Fd_interp = interp1d(openings, Fds, kind='cubic')
>>> Fl_interp = interp1d(openings, Fls, kind='cubic')
>>> xT_interp = interp1d(openings, xTs, kind='cubic')
>>> Kv_interp = interp1d(openings, Kvs, kind='cubic')

Creating and solving the objective function:

>>> def to_solve(opening):


... Fd = float(Fd_interp(opening))
... Fl = float(Fl_interp(opening))
... xT = float(xT_interp(opening))
... Kv_lookup = float(Kv_interp(opening))
... Kv_calc = size_control_valve_g(T, MW, mu, gamma, Z, P1, P2, Q, D1, D2, d, FL=Fl,␣
˓→Fd=Fd, xT=xT)

... return Kv_calc - Kv_lookup


>>> newton(to_solve, .8) # initial guess of 80%
0.75008147

We see the valve should indeed be set to almost exactly 75% open to provide the desired flow.

1.19. Control valve sizing: Gas flow 25


Fluids Documentation, Release 1.0.21

1.20 Electric motor sizing

Motors are available in standard sizes, mostly as designated by the National Electrical Manufacturers Association
(NEMA). To easily determine what the power of a motor will actually be once purchased, motor_round_size imple-
ments rounding up of a motor power to the nearest size. NEMA standard motors are specified in terms of horsepower.

>>> motor_round_size(1E5) # 100 kW motor; 11.8% larger than desired


111854.980
>>> from scipy.constants import hp
>>> motor_round_size(1E5)/hp # convert to hp
150.0

Motors are designed to generate a certain amount of power, but they themselves are not 100% efficient at doing this
and require more power due to efficiency losses. Many minimum values for motor efficiency are standardized. The
Canadian standard for this is implemented in fluids as CSA_motor_efficiency.

>>> CSA_motor_efficiency(P=5*hp)
0.855

Most motors are not enclosed (the default assumption), but those that are closed are more efficient.

>>> CSA_motor_efficiency(P=5*hp, closed=True)


0.875

The number of poles in a motor also affects its efficiency:

>>> CSA_motor_efficiency(P=5*hp, poles=6)


0.875

There is also a schedule of higher efficiency values standardized as well, normally available at somewhat higher cost:

>>> CSA_motor_efficiency(P=5*hp, closed=True, poles=6, high_efficiency=True)


0.895

A motor will spin at more or less its design frequency, depending on its type. However, if it does not meet sufficient
resistance, it will not be using its design power. This is good and bad - less power is used, but as a motor drops under
50% of its design power, its efficiency becomes terrible. The function motor_efficiency_underloaded has been
written based on generic performance curves to estimate the underloaded efficiency of a motor. Just how bad efficiency
drops off depends on the design power of a motor - higher power motors do better operating at low loads than small
motors.

>>> motor_efficiency_underloaded(P=1E3, load=.9)


1
>>> motor_efficiency_underloaded(P=1E3, load=.2)
0.66393475

This needs to be applied on top of the normal motor efficiency; for example, that 1 kW motor at 20% load would have
a net efficiency of:

>>> motor_efficiency_underloaded(P=1E3, load=.2)*CSA_motor_efficiency(P=1E3)


0.532940428

Many motors have Variable Frequency Drives (VFDs) which allow them to vary the speed of their rotation. The VFD
is another source of inefficiency, but by allowing the pump or other piece of equipment to vary its speed, a system

26 Chapter 1. fluids tutorial


Fluids Documentation, Release 1.0.21

may be designed to be less energy intensive. For example, rather than running a pump at a certain high frequency and
controlling the flow with a large control valve, the flow rate can be controlled with the VFD directly.
The efficiency of a VFD depends on the maximum power it needs to be able to generate, and the power it is actually gen-
erating at an instant (load). A table of typical modern VFD efficiencies is implemented in fluids as VFD_efficiency.

>>> VFD_efficiency(1E5) # 100 kW


0.97
>>> VFD_efficiency(5E3, load=.2) # 5 kW, 20% load
0.8562

1.21 Particle Size Distributions

Fluids has means for calculating, fitting, and manipulating particle size distributions through the fluids.
particle_size_distribution module. In addition to discrete and continuous distributions, there are also means
to create interpolating distributions from discrete distributions, and to use any of SciPy’s statistical distributions or a
custom distribution for calculations.
The following example particle size distribution shows some calculations. Note there is one more diameter point than
number point - this is how the input should be given when the analysis provides classes and each bin has a range of
sizes representing it. Also supported is providing as many diameter values as fraction values.

>>> ds = [240, 360, 450, 562.5, 703, 878, 1097, 1371, 1713, 2141, 2676, 3345, 4181, 5226,
˓→ 6532]

>>> numbers = [65, 119, 232, 410, 629, 849, 990, 981, 825, 579, 297, 111, 21, 1]
>>> psd = ParticleSizeDistribution(ds=ds, fractions=numbers, order=0)
>>> psd
<Particle Size Distribution, points=14, D[3, 3]=2450.886241 m>

In the above example, the analysis available was the number of particles counted in each bin. This is equivalent to
having normalized the numbers into fractions; they are normalized inside the ParticleSizeDistribution class.
If masses in each of the different bins had been known instead, then the same constructor would be given except with
order=3, representing a mass or volume distribution (they are the same thing for distributions with the same density
for all particles).
If the data is available as a cumulative distribution, simple add the flag cdf=True and it will be interpreted correctly.
The probability distribution and cumulative distribution can be plotted with plot_pdf and plot_cdf respectively.
Important statistical parameters describing the distribution can be calculated with the methods
fluids.particle_size_distribution.ParticleSizeDistribution.mean_size or fluids.
particle_size_distribution.ParticleSizeDistribution.mean_size_ISO. The following example
shows calculation of the size-weighted mean diameter; arithmetic mean diameter; Sauter mean diameter; and De
Brouckere diameter.

>>> psd.mean_size(2, 1)
1857.788
>>> psd.mean_size(1, 0)
1459.372
>>> psd.mean_size(3, 2)
2269.321
>>> psd.mean_size(4, 3)
2670.751

1.21. Particle Size Distributions 27


Fluids Documentation, Release 1.0.21

An interpolated distribution exists underneath the discrete data to allow useful properties to be calculated, such as the
D10 or D90:

>>> psd.dn(0.1), psd.dn(0.9)


(1437.07139, 3911.47963)

Or probability density functions:

>>> psd.pdf(1000)
0.0001063238
>>> psd.cdf(5000)
0.98974007

Statistical distributions implemented are PSDLognormal, PSDGatesGaudinSchuhman, and PSDRosinRammler. Dis-


crete and continuous distributions share most methods.

>>> psd = PSDLognormal(s=0.5, d_characteristic=5E-6)


>>> psd.pdf(1e-6) # probability density function
4487.89
>>> psd.cdf(7e-6) # cumulative distribution function
0.749508
>>> psd.dn(0.1) # At what diameter is this fraction of particles smaller than?
2.634417e-06
>>> psd.mean_size(3, 2)
4.41248e-06
>>> ds = psd.ds_discrete(pts=1000) # Compare calculations with the discrete distribution
>>> fractions = psd.fractions_discrete(ds)
>>> ParticleSizeDistribution(ds=ds, fractions=fractions, order=3).mean_size(3, 2)
4.42574e-06

It is straightforward to calculate descriptions of the distribution using the available routines:


Volume specific surface area:

>>> psd.vssa
1359778.1

Span (D90 - D10):

>>> psd.dn(.9) - psd.dn(0.1)


6.85534e-06

Relative span (D90 - D10)/D50:

>>> (psd.dn(.9) - psd.dn(0.1))/psd.dn(0.5)


1.3710691

Percentile ratios, D75/D25 and D90/D10:

>>> psd.dn(0.75)/psd.dn(0.25)
1.9630310
>>> psd.dn(0.9)/psd.dn(0.1)
3.602224

28 Chapter 1. fluids tutorial


Fluids Documentation, Release 1.0.21

1.22 Required Resources

The fluids library is designed to be a low-overhead, lightweight repository of engineering knowledge and utilities that
relate to fluid dynamics. It occupies ~4 MB of RAM on load and should load in a small fraction of a second. Fluids
does load NumPy if it is present, which takes ~150 ms; fluids itself loads in approximately 20 ms. No other libraries
will become required dependencies; anything else, including SciPy, is optional and loaded when needed.
Fluids was originally tightly integrated with SciPy and NumPy; today they are optional components used for only a
small amount of functionality which do not have pure-Python numerical methods implemented. Fluids targets Python
2.7 and up as well as PyPy2 and PyPy3. Additionally, fluids has been tested by the author to load in IronPython, Jython,
and micropython.

1.22. Required Resources 29


Fluids Documentation, Release 1.0.21

30 Chapter 1. fluids tutorial


CHAPTER

TWO

API REFERENCE

2.1 Atmospheric properties (fluids.atmosphere)

This module contains models of earth’s atmosphere. Models are empirical and based on extensive research, primarily
by NASA.
For reporting bugs, adding feature requests, or submitting pull requests, please use the GitHub issue tracker or contact
the author at Caleb.Andrew.Bell@gmail.com.

• Atmospheres
• Solar Radiation and Position
• Wind Models (requires Fortran compiler!)

2.1.1 Atmospheres

class fluids.atmosphere.ATMOSPHERE_1976(Z, dT=0.0)


US Standard Atmosphere 1976 class, which calculates T, P, rho, v_sonic, mu, k, and g as a function of altitude
above sea level. Designed to provide reasonable results up to an elevation of 86,000 m (0.4 Pa). The model is
also valid under sea level, to -610 meters.
Parameters
Z [float] Elevation, [m]
dT [float, optional] Temperature difference from standard conditions used in determining the
properties of the atmosphere, [K]

Notes

Up to 32 km, the International Standard Atmosphere (ISA) and World Meteorological Organization (WMO)
standard atmosphere are identical.
This is a revision of the US 1962 atmosphere.

31
Fluids Documentation, Release 1.0.21

References

[1], [2], [3]

Examples

>>> five_km = ATMOSPHERE_1976(5000)


>>> five_km.P, five_km.rho, five_km.mu
(54048.28614576141, 0.7364284207799743, 1.628248135362207e-05)
>>> five_km.k, five_km.g, five_km.v_sonic
(0.02273190295142526, 9.791241076982665, 320.5455196704035)

Attributes
T [float] Temperature of atmosphere at specified conditions, [K]
P [float] Pressure of atmosphere at specified conditions, [Pa]
rho [float] Mass density of atmosphere at specified conditions [kg/m^3]
H [float] Geopotential height, [m]
g [float] Acceleration due to gravity, [m/s^2]
mu [float] Viscosity of atmosphere at specified conditions, [Pa*s]
k [float] Thermal conductivity of atmosphere at specified conditions, [W/m/K]
v_sonic [float] Speed of sound of atmosphere at specified conditions, [m/s]

Methods

density(T, P) Method defined in the US Standard Atmosphere 1976


for calculating density of air as a function of T and P.
gravity(Z) Method defined in the US Standard Atmosphere 1976
for calculating the gravitational acceleration above
earth as a function of elevation only.
pressure_integral(T1, P1, dH) Method to compute an integral of the pressure differ-
ential of an elevation difference with a base elevation
defined by temperature T1 and pressure P1.
sonic_velocity(T) Method defined in the US Standard Atmosphere 1976
for calculating the speed of sound in air as a function
of T only.
thermal_conductivity(T) Method defined in the US Standard Atmosphere 1976
for calculating thermal conductivity of air as a func-
tion of T only.
viscosity(T) Method defined in the US Standard Atmosphere 1976
for calculating viscosity of air as a function of T only.

static density(T, P)
Method defined in the US Standard Atmosphere 1976 for calculating density of air as a function of T and
P. MW is defined as 28.9644 g/mol, and R as 8314.32 J/kmol/K

𝑃 · 𝑀𝑊
𝜌𝑔 =
𝑇 · 𝑅 · 1000

32 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

Parameters
T [float] Temperature, [K]
P [float] Pressure, [Pa]
Returns
rho [float] Mass density, [kg/m^3]
static gravity(Z)
Method defined in the US Standard Atmosphere 1976 for calculating the gravitational acceleration above
earth as a function of elevation only.
(︂ )︂2
𝑟0
𝑔 = 𝑔0
𝑟0 + 𝑍

Parameters
Z [float] Elevation above sea level, [m]
Returns
g [float] Acceleration due to gravity, [m/s^2]
static pressure_integral(T1, P1, dH)
Method to compute an integral of the pressure differential of an elevation difference with a base elevation
defined by temperature T1 and pressure P1. This is similar to subtracting the pressures at two different
elevations, except it allows for local conditions (temperature and pressure) to be taken into account. This
is useful for e.x. evaluating the pressure difference between the top and bottom of a natural draft cooling
tower.
Parameters
T1 [float] Temperature at the lower elevation condition, [K]
P1 [float] Pressure at the lower elevation condition, [Pa]
dH [float] Elevation difference for which to evaluate the pressure difference, [m]
Returns
delta_P [float] Pressure difference between the elevations, [Pa]
static sonic_velocity(T )
Method defined in the US Standard Atmosphere 1976 for calculating the speed of sound in air as a function
of T only.
(︂ )︂0.5
𝛾𝑅𝑇
𝑐=
𝑀𝑊

Parameters
T [float] Temperature, [K]
Returns
c [float] Speed of sound, [m/s]
static thermal_conductivity(T )
Method defined in the US Standard Atmosphere 1976 for calculating thermal conductivity of air as a func-
tion of T only.

2.64638 × 10−3 𝑇 1.5


𝑘𝑔 =
𝑇 + 245.4 · 10−12./𝑇

2.1. Atmospheric properties (fluids.atmosphere) 33


Fluids Documentation, Release 1.0.21

Parameters
T [float] Temperature, [K]
Returns
kg [float] Thermal conductivity, [W/m/K]
static viscosity(T )
Method defined in the US Standard Atmosphere 1976 for calculating viscosity of air as a function of T only.

1.458 × 10−6 𝑇 1.5


𝜇𝑔 =
𝑇 + 110.4
Parameters
T [float] Temperature, [K]
Returns
mug [float] Viscosity, [Pa*s]
class fluids.atmosphere.ATMOSPHERE_NRLMSISE00(Z, latitude=0.0, longitude=0.0, day=0, seconds=0.0,
f107=150.0, f107_avg=150.0,
geomagnetic_disturbance_indices=None)
NRLMSISE 00 model for calculating temperature and density of gases in the atmosphere, from ground level to
1000 km, as a function of time of year, longitude and latitude, solar activity and earth’s geomagnetic disturbance.
NRLMSISE stands for the US Naval Research Laboratory Mass Spectrometer and Incoherent Scatter Radar
Exosphere model, released in 2001; see [1] for details.
Parameters
Z [float] Elevation, [m]
latitude [float, optional] Latitude, between -90 and 90 [degrees]
longitude [float, optional] Longitude, between -180 and 180 or 0 and 360, [degrees]
day [float, optional] Day of year, 0-366 [day]
seconds [float, optional] Seconds since start of day, in UT1 time; using UTC provides no loss
in accuracy [s]
f107 [float, optional] Daily average 10.7 cm solar flux measurement of the strength of solar
emissions on the 100 MHz band centered on 2800 MHz, averaged hourly; in sfu units, which
are multiples of 10^-22 W/m^2/Hz; use 150 as a default [10^-22 W/m^2/Hz]
f107_avg [float, optional] 81-day sfu average; centered on specified day if possible, otherwise
use the previous days [10^-22 W/m^2/Hz]
geomagnetic_disturbance_indices [list of float, optional] List of the 7 following Ap indexes
also known as planetary magnetic indexes. Has a negligible effect on the calculation. 4 is
the default value often used for each of these values, [-]
• Average daily Ap.
• 3-hour average Ap centered on the current time.
• 3-hour average Ap before the current time.
• 6-hour average Ap before the current time.
• 9-hour average Ap before the current time.
• Average Ap from 12 to 33 hours before the current time, based on eight 3-hour average Ap
values.

34 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

• Average Ap from 36 to 57 hours before the current time, based on eight 3-hour average Ap
values.

Notes

No full description has been published of this model; it has been defined by its implementation only. It was
written in FORTRAN, and is accessible at ftp://hanna.ccmc.gsfc.nasa.gov/pub/modelweb/atmospheric/msis/
nrlmsise00/
A C port of the model by Dominik Brodowskihas become popular, and is available on his website: http://www.
brodo.de/space/nrlmsise/.
In 2013 Joshua Milas ported the C port to Python. This is an interface to his excellent port. It is a 1000-sloc
model, and has been rigorously tested against the C version, and the online calculation tool available at [3] for
parametric inputs of latitude, longitude, altitude, time of day and day of year.
This model is based on measurements other than gravity; it does not provide a calculation method for g. It does
not provide transport properties.
This model takes on the order of ~2 ms.

References

[1], [2], [3]

Examples

>>> atmosphere = ATMOSPHERE_NRLMSISE00(1E3, 45, 45, 150)


>>> atmosphere.T, atmosphere.rho
(285.5440860623, 1.10190620264)

Attributes
rho [float] Mass density [kg/m^3]
T [float] Temperature, [K]
P [float] Pressure, calculated with ideal gas law [Pa]
He_density [float] Density of helium atoms [count/m^3]
O_density [float] Density of monatomic oxygen [count/m^3]
N2_density [float] Density of nitrogen molecules [count/m^3]
O2_density [float] Density of oxygen molecules [count/m^3]
Ar_density [float] Density of Argon atoms [count/m^3]
H_density [float] Density of hydrogen atoms [count/m^3]
N_density [float] Density of monatomic nitrogen [count/m^3]
O_anomalous_density [float] Density of anomalous oxygen; see [1] for details [count/m^3]
particle_density [float] Total density of molecules [count/m^3]
components [list[str]] List of species making up the atmosphere [-]
zs [list[float]] Mole fractions of each molecule in the atmosphere, in order of components [-]

2.1. Atmospheric properties (fluids.atmosphere) 35


Fluids Documentation, Release 1.0.21

fluids.atmosphere.airmass(func, angle, H_max=86400.0, R_planet=6371229.0, RI=1.000276)


Calculates mass of air per square meter in the atmosphere using a provided atmospheric model. The lowest air
mass is calculated straight up; as the angle is lowered to nearer and nearer the horizon, the air mass increases,
and can approach 40x or more the minimum airmass.
∫︁ ∞
{︃ [︂ ]︂2 }︃−1/2
cos 𝛾
𝑚(𝛾) = 𝜌 1 − [1 + 2(RI − 1)(1 − 𝜌/𝜌0 )] 𝑑𝐻
0 (1 + ℎ/𝑅)

Parameters
func [float] Function which returns the density of the atmosphere as a function of elevation
angle [float] Degrees above the horizon (90 = straight up), [degrees]
H_max [float, optional] Maximum height to compute the integration up to before the contribu-
tion of density becomes negligible, [m]
R_planet [float, optional] The radius of the planet for which the integration is being performed,
[m]
RI [float, optional] The refractive index of the atmosphere (air on earth at 0.7 um as default)
assumed a constant, [-]
Returns
m [float] Mass of air per square meter in the atmosphere, [kg/m^2]

Notes

Numerical integration via SciPy’s quad is used to perform the calculation.

References

[1]

Examples

>>> airmass(lambda Z : ATMOSPHERE_1976(Z).rho, 90)


10356.12

2.1.2 Solar Radiation and Position

fluids.atmosphere.solar_position(moment, latitude, longitude, Z=0.0, T=298.15, P=101325.0,


atmos_refract=0.5667)
Calculate the position of the sun in the sky. It is defined in terms of two angles - the zenith and the azimith. The
azimuth tells where a sundial would see the sun as coming from; the zenith tells how high in the sky it is. The
solar elevation angle is returned for convenience; it is the complimentary angle of the zenith.
The sun’s refraction changes how high it appears as though the sun is; so values are returned with an optional
conversion to the apparent angle. This impacts only the zenith/elevation.
Uses the Reda and Andreas (2004) model described in [1], originally incorporated into the excellent pvlib library
Parameters

36 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

moment [datetime, optionally with pytz info] Time and date for the calculation, in UTC time OR
in the time zone of the latitude/longitude specified BUT WITH A TZINFO ATTACHED!
Please be careful with this argument, time zones are confusing. [-]
latitude [float] Latitude, between -90 and 90 [degrees]
longitude [float] Longitude, between -180 and 180, [degrees]
Z [float, optional] Elevation above sea level for the solar position calculation, [m]
T [float, optional] Temperature of atmosphere at ground level, [K]
P [float, optional] Pressure of atmosphere at ground level, [Pa]
atmos_refract [float, optional] Atmospheric refractivity, [degrees]
Returns
apparent_zenith [float] Zenith of the sun as observed from the ground based after accounting
for atmospheric refraction, [degrees]
zenith [float] Actual zenith of the sun (ignores atmospheric refraction), [degrees]
apparent_altitude [float] Altitude of the sun as observed from the ground based after account-
ing for atmospheric refraction, [degrees]
altitude [float] Actual altitude of the sun (ignores atmospheric refraction), [degrees]
azimuth [float] The azimuth of the sun, [degrees]
equation_of_time [float] Equation of time - the number of seconds to be added to the day’s
mean solar time to obtain the apparent solar noon time, [seconds]

Notes

If you were standing at the same longitude of the sun such that it was no further east or west than you were, the
amount of angle it was south or north of you is the zenith. If it were directly overhead it would be 0°; a little north
or south and it would be a little positive; near sunset or sunrise, near 90°; and at night, between 90° and 180°.
The solar altitude angle is defined as 90° -zenith. Note the elevation angle is just another name for the altitude
angle.
The azimuth the angle in degrees that the sun is East of the North angle. It is positive North eastwards 0° to 360°.
Other conventions may be used.
Note that due to differences in atmospheric refractivity, estimation of sunset and sunrise are accuract to no more
than one minute. Refraction conditions truly vary across the atmosphere; so characterizing it by an average value
is limiting as well.

References

[1], [2]

2.1. Atmospheric properties (fluids.atmosphere) 37


Fluids Documentation, Release 1.0.21

Examples

>>> import pytz

Perth, Australia - sunrise

>>> solar_position(pytz.timezone('Australia/Perth').localize(datetime(2020, 6, 6, 7,
˓→ 10, 57)), -31.95265, 115.85742)

[90.89617025931, 90.89617025931, -0.896170259317, -0.896170259317, 63.6016017691,␣


˓→79.0711232143]

Perth, Australia - Comparing against an online source https://www.suncalc.org/#/-31.9526,115.8574,9/2020.06.


06/14:30/1/0

>>> solar_position(pytz.timezone('Australia/Perth').localize(datetime(2020, 6, 6,␣


˓→14, 30, 0)), -31.95265, 115.85742)

[63.4080568623, 63.4400018158, 26.59194313766, 26.55999818417, 325.121376246, 75.


˓→7467475485]

Perth, Australia - time input without timezone; must be converted by user to UTC!

>>> solar_position(datetime(2020, 6, 6, 14, 30, 0) - timedelta(hours=8), -31.95265,␣


˓→115.85742)

[63.4080568623, 63.4400018158, 26.59194313766, 26.55999818417, 325.121376246, 75.


˓→7467475485]

Sunrise occurs when the zenith is 90 degrees (Calgary, AB):

>>> local_time = datetime(2018, 4, 15, 6, 43, 5)


>>> local_time = pytz.timezone('America/Edmonton').localize(local_time)
>>> solar_position(local_time, 51.0486, -114.07)[0]
90.0005468548

Sunset occurs when the zenith is 90 degrees (13.5 hours later in this case):

>>> solar_position(pytz.timezone('America/Edmonton').localize(datetime(2018, 4, 15,␣


˓→20, 30, 28)), 51.0486, -114.07)

[89.999569566, 90.5410381216, 0.000430433876, -0.541038121618, 286.831378190, 6.


˓→63142952587]

fluids.atmosphere.solar_irradiation(latitude, longitude, Z, moment, surface_tilt, surface_azimuth,


T=None, P=None, solar_constant=1366.1, atmos_refract=0.5667,
albedo=0.25, linke_turbidity=None,
extraradiation_method='spencer',
airmass_model='kastenyoung1989', cache=None)
Calculates the amount of solar radiation and radiation reflected back the atmosphere which hits a surface at a
specified tilt, and facing a specified azimuth.
This functions is a wrapper for the incredibly comprehensive pvlib library, and requires it to be installed.
Parameters
latitude [float] Latitude, between -90 and 90 [degrees]
longitude [float] Longitude, between -180 and 180, [degrees]
Z [float, optional] Elevation above sea level for the position, [m]

38 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

moment [datetime, optionally with pytz info] Time and date for the calculation, in UTC time OR
in the time zone of the latitude/longitude specified BUT WITH A TZINFO ATTACHED!
Please be careful with this argument, time zones are confusing. [-]
surface_tilt [float] The angle above the horizontal of the object being hit by radiation, [degrees]
surface_azimuth [float] The angle the object is facing (positive, North eastwards 0° to 360°),
[degrees]
T [float, optional] Temperature of atmosphere at ground level, [K]
P [float, optional] Pressure of atmosphere at ground level, [Pa]
solar_constant [float, optional] The amount of solar radiation which reaches earth’s disk (at
a standardized distance of 1 AU); this constant is independent of activity or conditions on
earth, but will vary throughout the sun’s lifetime and may increase or decrease slightly due
to solar activity, [W/m^2]
atmos_refract [float, optional] Atmospheric refractivity at sunrise/sunset (0.5667 deg is an of-
ten used value; this varies substantially and has an impact of a few minutes on when sunrise
and sunset is), [degrees]
albedo [float, optional] The average amount of reflection of the terrain surrounding the object
at quite a distance; this impacts how much sunlight reflected off the ground, gets reflected
back off clouds, [-]
linke_turbidity [float, optional] The amount of pollution/water in the sky versus a perfect clear
sky; If not specified, this will be retrieved from a historical grid; typical values are 3 for
cloudy, and 7 for severe pollution around a city, [-]
extraradiation_method [str, optional] The specified method to calculate the effect of earth’s
position on the amount of radiation which reaches earth according to the methods available
in the pvlib library, [-]
airmass_model [str, optional] The specified method to calculate the amount of air the sunlight
needs to travel through to reach the earth according to the methods available in the pvlib
library, [-]
cache [dict, optional] Dictionary to to check for values to use to skip some calculations; appar-
ent_zenith, zenith, azimuth supported, [-]
Returns
poa_global [float] The total irradiance in the plane of the surface, [W/m^2]
poa_direct [float] The total beam irradiance in the plane of the surface, [W/m^2]
poa_diffuse [float] The total diffuse irradiance in the plane of the surface, [W/m^2]
poa_sky_diffuse [float] The sky component of the diffuse irradiance, excluding the impact from
the ground, [W/m^2]
poa_ground_diffuse [float] The ground-sky diffuse irradiance component, [W/m^2]

2.1. Atmospheric properties (fluids.atmosphere) 39


Fluids Documentation, Release 1.0.21

Notes

The retrieval of linke_turbidity requires the pytables library (and Pandas); if it is not installed, specify a value of
linke_turbidity to avoid the dependency.
There is some redundancy of the calculated results, according to the following relations. The total irradiance is
normally that desired for engineering calculations.
poa_diffuse = poa_ground_diffuse + poa_sky_diffuse
poa_global = poa_direct + poa_diffuse
For a surface such as a pipe or vessel, an approach would be to split it into a number of rectangles and sum up
the radiation absorbed by each.
This calculation is fairly slow.

References

[1]

Examples

>>> import pytz


>>> solar_irradiation(Z=1100.0, latitude=51.0486, longitude=-114.07, linke_
˓→turbidity=3,

... moment=pytz.timezone('America/Edmonton').localize(datetime(2018, 4, 15, 13, 43,␣


˓→5)), surface_tilt=41.0,

... surface_azimuth=180.0)
(1065.7621896280, 945.2656564506, 120.49653317744, 95.31535344213, 25.181179735317)

>>> cache = {'apparent_zenith': 41.099082295767545, 'zenith': 41.11285376417578,


˓→'azimuth': 182.5631874250523}

>>> solar_irradiation(Z=1100.0, latitude=51.0486, longitude=-114.07,


... moment=pytz.timezone('America/Edmonton').localize(datetime(2018, 4, 15, 13, 43,␣
˓→5)), surface_tilt=41.0,

... linke_turbidity=3, T=300, P=1E5,


... surface_azimuth=180.0, cache=cache)
(1042.567770367, 918.237754854, 124.3300155131, 99.622865737, 24.7071497753)

At night, there is no solar radiation and this function returns zeros:

>>> solar_irradiation(Z=1100.0, latitude=51.0486, longitude=-114.07, linke_


˓→turbidity=3,

... moment=pytz.timezone('America/Edmonton').localize(datetime(2018, 4, 15, 2, 43,␣


˓→5)), surface_tilt=41.0,

... surface_azimuth=180.0)
(0.0, -0.0, 0.0, 0.0, 0.0)

fluids.atmosphere.sunrise_sunset(moment, latitude, longitude)


Calculates the times at which the sun is at sunset; sunrise; and halfway between sunrise and sunset (transit).
Uses the Reda and Andreas (2004) model described in [1], originally incorporated into the excellent pvlib library
Parameters

40 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

moment [datetime] Date for the calculation; needs to contain only the year, month, and day; if
it is timezone-aware, the return values will be localized to this timezone [-]
latitude [float] Latitude, between -90 and 90 [degrees]
longitude [float] Longitude, between -180 and 180, [degrees]
Returns
sunrise [datetime] The time at the specified day when the sun rises IN UTC IF MOMENT
DOES NOT HAVE A TIMEZONE, OTHERWISE THE TIMEZONE GIVEN WITH
IT, [-]
sunset [datetime] The time at the specified day when the sun sets IN UTC IF MOMENT DOES
NOT HAVE A TIMEZONE, OTHERWISE THE TIMEZONE GIVEN WITH IT, [-]
transit [datetime] The time at the specified day when the sun is at solar noon - halfway between
sunrise and sunset IN UTC IF MOMENT DOES NOT HAVE A TIMEZONE, OTHER-
WISE THE TIMEZONE GIVEN WITH IT, [-]

Notes

This functions takes on the order of 2 ms per calculation.

References

[1]

Examples

>>> sunrise, sunset, transit = sunrise_sunset(datetime(2018, 4, 17),


... 51.0486, -114.07)
>>> sunrise
datetime.datetime(2018, 4, 17, 12, 36, 55, 782660)
>>> sunset
datetime.datetime(2018, 4, 18, 2, 34, 4, 249326)
>>> transit
datetime.datetime(2018, 4, 17, 19, 35, 46, 686265)

Example with time zone:

>>> import pytz


>>> sunrise_sunset(pytz.timezone('America/Edmonton').localize(datetime(2018, 4,␣
˓→17)), 51.0486, -114.07)

(datetime.datetime(2018, 4, 16, 6, 39, 1, 570479, tzinfo=<DstTzInfo 'America/


˓→Edmonton' MDT-1 day, 18:00:00 DST>), datetime.datetime(2018, 4, 16, 20, 32, 25,␣

˓→778162, tzinfo=<DstTzInfo 'America/Edmonton' MDT-1 day, 18:00:00 DST>), datetime.

˓→datetime(2018, 4, 16, 13, 36, 0, 386341, tzinfo=<DstTzInfo 'America/Edmonton' MDT-

˓→1 day, 18:00:00 DST>))

Note that the year/month/day as input with a timezone, is converted to UTC time as well.
fluids.atmosphere.earthsun_distance(moment)
Calculates the distance between the earth and the sun as a function of date and time. Uses the Reda and Andreas
(2004) model described in [1], originally incorporated into the excellent pvlib library

2.1. Atmospheric properties (fluids.atmosphere) 41


Fluids Documentation, Release 1.0.21

Parameters
moment [datetime] Time and date for the calculation, in UTC time (or GMT, which is almost
the same thing); OR a timezone-aware datetime instance which will be internally converted
to UTC, [-]
Returns
distance [float] Distance between the center of the earth and the center of the sun, [m]

Notes

This function is quite accurate. The difference comes from the impact of the moon.
Note this function is not continuous; the sun-earth distance is not sufficiently accurately modeled for the change
to be continuous throughout each day.

References

[1]

Examples

>>> earthsun_distance(datetime(2003, 10, 17, 13, 30, 30))


149090925951.18338

The distance at perihelion, which occurs at 4:21 according to this algorithm. The real value is 04:38 (January
2nd).

>>> earthsun_distance(datetime(2013, 1, 2, 4, 21, 50))


147098089490.67123

The distance at aphelion, which occurs at 14:44 according to this algorithm. The real value is dead on - 14:44
(July 5).

>>> earthsun_distance(datetime(2013, 7, 5, 14, 44, 51, 0))


152097354414.36044

Using a timezone-aware date:

>>> import pytz


>>> earthsun_distance(pytz.timezone('America/Edmonton').localize(datetime(2020, 6,␣
˓→6, 10, 0, 0, 0)))

151817805599.67142

This has a slightly different value than the value without a timezone; almost 5000 km further away!

>>> earthsun_distance(datetime(2020, 6, 6, 10, 0, 0, 0))


151812898579.44104

42 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

2.1.3 Wind Models (requires Fortran compiler!)

fluids.atmosphere.hwm93(Z, latitude=0, longitude=0, day=0, seconds=0, f107=150.0, f107_avg=150.0,


geomagnetic_disturbance_index=4)
Horizontal Wind Model 1993, for calculating wind velocity in the atmosphere as a function of time of year,
longitude and latitude, solar activity and earth’s geomagnetic disturbance.
The model is described across the publications [1], [2], and [3].
Parameters
Z [float] Elevation, [m]
latitude [float, optional] Latitude, between -90 and 90 [degrees]
longitude [float, optional] Longitude, between -180 and 180 or 0 and 360, [degrees]
day [float, optional] Day of year, 0-366 [day]
seconds [float, optional] Seconds since start of day, in UT1 time; using UTC provides no loss
in accuracy [s]
f107 [float, optional] Daily average 10.7 cm solar flux measurement of the strength of solar
emissions on the 100 MHz band centered on 2800 MHz, averaged hourly; in sfu units, which
are multiples of 10^-22 W/m^2/Hz; use 150 as a default [W/m^2/Hz]
f107_avg [float, optional] 81-day sfu average; centered on specified day if possible, otherwise
use the previous days [W/m^2/Hz]
geomagnetic_disturbance_index [float, optional] Average daily Ap or also known as planetary
magnetic index.
Returns
v_north [float] Wind velocity, meridional (Northward) [m/s]
v_east [float] Wind velocity, zonal (Eastward) [m/s]

Notes

No full description has been published of this model; it has been defined by its implementation only. It was written
in FORTRAN, and is accessible at ftp://hanna.ccmc.gsfc.nasa.gov/pub/modelweb/atmospheric/hwm93/.
F2PY auto-compilation support is not yet currently supported. To compile this file, run the following command
in a shell after navigating to $FLUIDSPATH/fluids/optional/. This should generate the file hwm93.so in that
directory.

f2py -c hwm93.pyf hwm93.for --f77flags="-std=legacy"

If the module is not compiled, an import error will be raised.

2.1. Atmospheric properties (fluids.atmosphere) 43


Fluids Documentation, Release 1.0.21

References

[1], [2], [3]

Examples

>>> hwm93(5E5, 45, 50, 365)


(-73.00312042236328, 0.1485661268234253)

fluids.atmosphere.hwm14(Z, latitude=0, longitude=0, day=0, seconds=0, geomagnetic_disturbance_index=4)


Horizontal Wind Model 2014, for calculating wind velocity in the atmosphere as a function of time of year,
longitude and latitude, and earth’s geomagnetic disturbance. The model is described in [1].
The model no longer accounts for solar flux.
Parameters
Z [float] Elevation, [m]
latitude [float, optional] Latitude, between -90 and 90 [degrees]
longitude [float, optional] Longitude, between -180 and 180 or 0 and 360, [degrees]
day [float, optional] Day of year, 0-366 [day]
seconds [float, optional] Seconds since start of day, in UT1 time; using UTC provides no loss
in accuracy [s]
geomagnetic_disturbance_index [float, optional] Average daily Ap or also known as planetary
magnetic index.
Returns
v_north [float] Wind velocity, meridional (Northward) [m/s]
v_east [float] Wind velocity, zonal (Eastward) [m/s]

Notes

No full description has been published of this model; it has been defined by its implementation only. It was
written in FORTRAN, and is accessible at http://onlinelibrary.wiley.com/store/10.1002/2014EA000089/asset/
supinfo/ess224-sup-0002-supinfo.tgz?v=1&s=2a957ba70b7cf9dd0612d9430076297c3634ea75.
F2PY auto-compilation support is not yet currently supported. To compile this file, run the following commands
in a shell after navigating to $FLUIDSPATH/fluids/optional/. This should generate the file hwm14.so in that
directory.
Generate a .pyf signature file:

f2py -m hwm14 -h hwm14.pyf hwm14.f90

Compile the interface:

f2py -c hwm14.pyf hwm14.f90

If the module is not compiled, an import error will be raised.


No patches were necessary to either the generated pyf or hwm14.f90 file, as the authors of [1] have made it F2PY
compatible.

44 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

Developed using 73 million data points taken by 44 instruments over 60 years.

References

[1]

Examples

>>> hwm14(5E5, 45, 50, 365)


(-38.64341354370117, 12.871272087097168)

2.2 Compressible flow and compressor sizing (fluids.compressible)

This module contains equations for modeling flow where density changes significantly during the process - compress-
ible flow. Also included are equations for choked flow - the phenomenon where the velocity of a fluid reaches its speed
of sound.
For reporting bugs, adding feature requests, or submitting pull requests, please use the GitHub issue tracker or contact
the author at Caleb.Andrew.Bell@gmail.com.

• Compression Processes
• Compressible Flow
• Empirical Compressible Flow
• Critical Flow
• Stagnation Point

2.2.1 Compression Processes

fluids.compressible.isothermal_work_compression(P1, P2, T, Z=1.0)


Calculates the work of compression or expansion of a gas going through an isothermal process.
(︂ )︂
𝑃2
𝑊 = 𝑧𝑅𝑇 ln
𝑃1

Parameters
P1 [float] Inlet pressure, [Pa]
P2 [float] Outlet pressure, [Pa]
T [float] Temperature of the gas going through an isothermal process, [K]
Z [float] Constant compressibility factor of the gas, [-]
Returns
W [float] Work performed per mole of gas compressed/expanded [J/mol]

2.2. Compressible flow and compressor sizing (fluids.compressible) 45


Fluids Documentation, Release 1.0.21

Notes

The full derivation with all forms is as follows:


∫︁ 𝑃2 ∫︁ 𝑃2
1
𝑊 = 𝑉 𝑑𝑃 = 𝑧𝑅𝑇 𝑑𝑃
𝑃1 𝑃1 𝑃
(︂ )︂ (︂ )︂ (︂ )︂
𝑃2 𝑃2 𝑃2
𝑊 = 𝑧𝑅𝑇 ln = 𝑃1 𝑉1 ln = 𝑃2 𝑉2 ln
𝑃1 𝑃1 𝑃1
The substitutions are according to the ideal gas law with compressibility:
The work of compression/expansion is the change in enthalpy of the gas. Returns negative values for expansion
and positive values for compression.
An average compressibility factor can be used where Z changes. For further accuracy, this expression can be
used repeatedly with small changes in pressure and the work from each step summed.
This is the best possible case for compression; all actual compresssors require more work to do the compression.
By making the compression take a large number of stages and cooling the gas between stages, this can be ap-
proached reasonable closely. Integrally geared compressors are often used for this purpose.

References

[1]

Examples

>>> isothermal_work_compression(1E5, 1E6, 300)


5743.427304244769

fluids.compressible.isentropic_work_compression(T1, k, Z=1.0, P1=None, P2=None, W=None,


eta=None)
Calculation function for dealing with compressing or expanding a gas going through an isentropic, adiabatic
process assuming constant Cp and Cv. The polytropic model is the same equation; just provide n instead of k
and use a polytropic efficiency for eta instead of a isentropic efficiency. Can calculate any of the following, given
all the other inputs:
• W, Work of compression
• P2, Pressure after compression
• P1, Pressure before compression
• eta, isentropic efficiency of compression
[︃(︂ )︂ ]︃
(︂ )︂ (𝑘−1)/𝑘
𝑘 𝑃2
𝑊 = 𝑍𝑅𝑇1 − 1 /𝜂𝑖𝑠𝑒𝑛𝑡𝑟𝑜𝑝𝑖𝑐
𝑘−1 𝑃1
Parameters
T1 [float] Initial temperature of the gas, [K]
k [float] Isentropic exponent of the gas (Cp/Cv) or polytropic exponent n to use this as a poly-
tropic model instead [-]
Z [float, optional] Constant compressibility factor of the gas, [-]
P1 [float, optional] Inlet pressure, [Pa]

46 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

P2 [float, optional] Outlet pressure, [Pa]


W [float, optional] Work performed per mole of gas compressed/expanded [J/mol]
eta [float, optional] Isentropic efficiency of the process or polytropic efficiency of the process to
use this as a polytropic model instead [-]
Returns
W, P1, P2, or eta [float] The missing input which was solved for [base SI]

Notes

For the same compression ratio, this is always of larger magnitude than the isothermal case.
The full derivation is as follows:
For constant-heat capacity “isentropic” fluid,
1/𝑘
𝑃1 𝑉1
𝑉 =
𝑃 1/𝑘
∫︁ 𝑃2 ∫︁ 𝑃2 1/𝑘
𝑃1 𝑉1
𝑊 = 𝑉 𝑑𝑃 = 𝑑𝑃
𝑃1 𝑃1 𝑃 1/𝑘
1/𝑘
𝑃1 𝑉1 [︁ 1−1/𝑘 1−1/𝑘
]︁
𝑊 = 𝑃 2 − 𝑃 1
1 − 𝑘1
After performing the integration and substantial mathematical manipulation we can obtain:
[︃(︂ )︂ ]︃
(︂ )︂ (𝑘−1)/𝑘
𝑘 𝑃2
𝑊 = 𝑃1 𝑉1 −1
𝑘−1 𝑃1

Using PV = ZRT:
(︂ )︂ [︃(︂ )︂(𝑘−1)/𝑘 ]︃
𝑘 𝑃2
𝑊 = 𝑍𝑅𝑇1 −1
𝑘−1 𝑃1

The work of compression/expansion is the change in enthalpy of the gas. Returns negative values for expansion
and positive values for compression.
An average compressibility factor should be used as Z changes. For further accuracy, this expression can be used
repeatedly with small changes in pressure and new values of isentropic exponent, and the work from each step
summed.
For the polytropic case this is not necessary, as eta corrects for the simplification.

References

[1]

2.2. Compressible flow and compressor sizing (fluids.compressible) 47


Fluids Documentation, Release 1.0.21

Examples

>>> isentropic_work_compression(P1=1E5, P2=1E6, T1=300, k=1.4, eta=0.78)


10416.876986384483

fluids.compressible.isentropic_T_rise_compression(T1, P1, P2, k, eta=1)


Calculates the increase in temperature of a fluid which is compressed or expanded under isentropic, adiabatic
conditions assuming constant Cp and Cv. The polytropic model is the same equation; just provide n instead of k
and use a polytropic efficienty for eta instead of a isentropic efficiency.
{︃ [︃(︂ )︂ ]︃}︃
(𝑘−1)/𝑘
∆𝑇𝑠 1 𝑃2
𝑇2 = 𝑇1 + = 𝑇1 1 + −1
𝜂𝑠 𝜂𝑠 𝑃1
Parameters
T1 [float] Initial temperature of gas [K]
P1 [float] Initial pressure of gas [Pa]
P2 [float] Final pressure of gas [Pa]
k [float] Isentropic exponent of the gas (Cp/Cv) or polytropic exponent n to use this as a poly-
tropic model instead [-]
eta [float] Isentropic efficiency of the process or polytropic efficiency of the process to use this
as a polytropic model instead [-]
Returns
T2 [float] Final temperature of gas [K]

Notes

For the ideal case of eta = 1, the model simplifies to:


(︂ )︂(𝑘−1)/𝑘
𝑇2 𝑃2
=
𝑇1 𝑃1

References

[1], [2]

Examples

>>> isentropic_T_rise_compression(286.8, 54050, 432400, 1.4)


519.5230938217768

fluids.compressible.isentropic_efficiency(P1, P2, k, eta_s=None, eta_p=None)


Calculates either isentropic or polytropic efficiency from the other type of efficiency.
(𝑃2 /𝑃1 )(𝑘−1)/𝑘 − 1
𝜂𝑠 = 𝑘−1
(𝑃2 /𝑃1 ) 𝑘𝜂𝑝 − 1
(︁ )︁
(𝑘 − 1) ln 𝑃 𝑃1
2

𝜂𝑝 = (︂ (︂ 1
(︁ )︁ 𝑘 (𝑘−1) )︂)︂
1 𝑃2
𝑘 ln 𝜂𝑠 𝜂𝑠 + 𝑃 1
− 1

48 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

Parameters
P1 [float] Initial pressure of gas [Pa]
P2 [float] Final pressure of gas [Pa]
k [float] Isentropic exponent of the gas (Cp/Cv) [-]
eta_s [float, optional] Isentropic (adiabatic) efficiency of the process, [-]
eta_p [float, optional] Polytropic efficiency of the process, [-]
Returns
eta_s or eta_p [float] Isentropic or polytropic efficiency, depending on input, [-]

Notes

The form for obtained eta_p from eta_s was derived with SymPy.

References

[1]

Examples

>>> isentropic_efficiency(1E5, 1E6, 1.4, eta_p=0.78)


0.7027614191263858

fluids.compressible.polytropic_exponent(k, n=None, eta_p=None)


Calculates one of:
• Polytropic exponent from polytropic efficiency
• Polytropic efficiency from the polytropic exponent
𝑘𝜂𝑝
𝑛=
1 − 𝑘(1 − 𝜂𝑝 )
(︁ )︁
𝑛
𝑛−1 𝑛(𝑘 − 1)
𝜂𝑝 = (︁ )︁ =
𝑘 𝑘(𝑛 − 1)
𝑘−1

Parameters
k [float] Isentropic exponent of the gas (Cp/Cv) [-]
n [float, optional] Polytropic exponent of the process [-]
eta_p [float, optional] Polytropic efficiency of the process, [-]
Returns
n or eta_p [float] Polytropic exponent or polytropic efficiency, depending on input, [-]

2.2. Compressible flow and compressor sizing (fluids.compressible) 49


Fluids Documentation, Release 1.0.21

References

[1]

Examples

>>> polytropic_exponent(1.4, eta_p=0.78)


1.5780346820809246

2.2.2 Compressible Flow

fluids.compressible.isothermal_gas(rho, fd, P1=None, P2=None, L=None, D=None, m=None)


Calculation function for dealing with flow of a compressible gas in a pipeline for the complete isothermal flow
equation. Can calculate any of the following, given all other inputs:
• Mass flow rate
• Upstream pressure (numerical)
• Downstream pressure (analytical or numerical if an overflow occurs)
• Diameter of pipe (numerical)
• Length of pipe
A variety of forms of this equation have been presented, differing in their use of the ideal gas law and choice of
gas constant. The form here uses density explicitly, allowing for non-ideal values to be used.
(︁ )︁2
𝜋𝐷 2
(︀ )︀
4 𝜌𝑎𝑣𝑔 𝑃12 − 𝑃22
˙2=
𝑚 (︁ )︁
𝐿
𝑃1 𝑓𝑑 𝐷 + 2 ln 𝑃1
𝑃2

Parameters
rho [float] Average density of gas in pipe, [kg/m^3]
fd [float] Darcy friction factor for flow in pipe [-]
P1 [float, optional] Inlet pressure to pipe, [Pa]
P2 [float, optional] Outlet pressure from pipe, [Pa]
L [float, optional] Length of pipe, [m]
D [float, optional] Diameter of pipe, [m]
m [float, optional] Mass flow rate of gas through pipe, [kg/s]
Returns
m, P1, P2, D, or L [float] The missing input which was solved for [base SI]

50 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

Notes

The solution for P2 has the following closed form, derived using Maple:
⎛ )︃ ⎞−1
−𝐶𝑚2 +𝐵𝑃1
(︃ (︃ )︃
𝐵𝑃1 −
0.5· 𝑚12 −𝐶𝑚2 + lambertW − 𝑚2
𝑒 𝑚2 𝑚2 +𝐵𝑃1
𝑃2 = 𝑃 1 ⎝ 𝑒
⎜ ⎟

𝜋2 𝐷4
𝐵=
𝜌𝑎𝑣𝑔
42
𝐿
𝐶 = 𝑓𝑑
𝐷
A wide range of conditions are impossible due to choked flow. See P_isothermal_critical_flow for details. An
exception is raised when they occur.
The 2 multiplied by the logarithm is often shown as a power of the pressure ratio; this is only the case when the
pressure ratio is raised to the power of 2 before its logarithm is taken.
A number of limitations exist for this model:
• Density dependence is that of an ideal gas.
• If calculating the pressure drop, the average gas density cannot be known immediately; iteration must be
used to correct this.
• The friction factor depends on both the gas density and velocity, so it should be solved for iteratively as
well. It changes throughout the pipe as the gas expands and velocity increases.
• The model is not easily adapted to include elevation effects due to the acceleration term included in it.
• As the gas expands, it will change temperature slightly, further altering the density and friction factor.
There are many commercial packages which perform the actual direct integration of the flow, such as OLGA
Dynamic Multiphase Flow Simulator, or ASPEN Hydraulics.
This expression has also been presented with the ideal gas assumption directly incorporated into it [4] (note R is
the specific gas constant, in units of J/kg/K):
(︁ )︁2 (︀
𝜋𝐷 2
)︀
4 𝑃12 − 𝑃22
2
𝑚
˙ = (︁ )︁
𝐿
𝑅𝑇 𝑓𝑑 𝐷 + 2 ln 𝑃1
𝑃2

References

[1], [2], [3], [4]

Examples

>>> isothermal_gas(rho=11.3, fd=0.00185, P1=1E6, P2=9E5, L=1000, D=0.5)


145.4847572636031

2.2. Compressible flow and compressor sizing (fluids.compressible) 51


Fluids Documentation, Release 1.0.21

2.2.3 Empirical Compressible Flow

fluids.compressible.Panhandle_A(SG, Tavg, L=None, D=None, P1=None, P2=None, Q=None, Ts=288.7,


Ps=101325.0, Zavg=1.0, E=0.92)
Calculation function for dealing with flow of a compressible gas in a pipeline with the Panhandle A formula.
Can calculate any of the following, given all other inputs:
• Flow rate
• Upstream pressure
• Downstream pressure
• Diameter of pipe
• Length of pipe
A variety of different constants and expressions have been presented for the Panhandle A equation. Here, a new
form is developed with all units in base SI, based on the work of [1].
)︂1.0788 [︂ ]︂0.5394
𝑃12 − 𝑃22
(︂
𝑇𝑠
𝑄 = 158.02053𝐸 𝐷2.6182
𝑃𝑠 𝐿 · 𝑆𝐺0.8539 𝑇𝑎𝑣𝑔 𝑍𝑎𝑣𝑔

Parameters
SG [float] Specific gravity of fluid with respect to air at the reference temperature and pressure
Ts and Ps, [-]
Tavg [float] Average temperature of the fluid in the pipeline, [K]
L [float, optional] Length of pipe, [m]
D [float, optional] Diameter of pipe, [m]
P1 [float, optional] Inlet pressure to pipe, [Pa]
P2 [float, optional] Outlet pressure from pipe, [Pa]
Q [float, optional] Flow rate of gas through pipe at Ts and Ps, [m^3/s]
Ts [float, optional] Reference temperature for the specific gravity of the gas, [K]
Ps [float, optional] Reference pressure for the specific gravity of the gas, [Pa]
Zavg [float, optional] Average compressibility factor for gas, [-]
E [float, optional] Pipeline efficiency, a correction factor between 0 and 1
Returns
Q, P1, P2, D, or L [float] The missing input which was solved for [base SI]

Notes

[1]’s original constant was 4.5965E-3, and it has units of km (length), kPa, mm (diameter), and flowrate in
m^3/day.
The form in [2] has the same exponents as used here, units of mm (diameter), kPa, km (length), and flow in
m^3/hour; its leading constant is 1.9152E-4.
The GPSA [3] has a leading constant of 0.191, a bracketed power of 0.5392, a specific gravity power of 0.853,
and otherwise the same constants. It is in units of mm (diameter) and kPa and m^3/day; length is stated to be in
km, but according to the errata is in m.

52 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

[4] has a leading constant of 1.198E7, a specific gravity of power of 0.8541, and a power of diameter which is
under the root of 4.854 and is otherwise the same. It has units of kPa and m^3/day, but is otherwise in base SI
units.
[5] has a leading constant of 99.5211, but its reference correction has no exponent; other exponents are the same
as here. It is entirely in base SI units.
[6] has pressures in psi, diameter in inches, length in miles, Q in ft^3/day, T in degrees Rankine, and a constant
of 435.87. Its reference condition power is 1.07881, and it has a specific gravity correction outside any other
term with a power of 0.4604.

References

[1], [2], [3], [4], [5], [6]

Examples

>>> Panhandle_A(D=0.340, P1=90E5, P2=20E5, L=160E3, SG=0.693, Tavg=277.15)


42.56082051195928

fluids.compressible.Panhandle_B(SG, Tavg, L=None, D=None, P1=None, P2=None, Q=None, Ts=288.7,


Ps=101325.0, Zavg=1.0, E=0.92)
Calculation function for dealing with flow of a compressible gas in a pipeline with the Panhandle B formula. Can
calculate any of the following, given all other inputs:
• Flow rate
• Upstream pressure
• Downstream pressure
• Diameter of pipe
• Length of pipe
A variety of different constants and expressions have been presented for the Panhandle B equation. Here, a new
form is developed with all units in base SI, based on the work of [1].
)︂1.02 [︂ ]︂0.51
𝑃12 − 𝑃22
(︂
𝑇𝑠
𝑄 = 152.88116𝐸 𝐷2.53
𝑃𝑠 𝐿 · 𝑆𝐺0.961 𝑇𝑎𝑣𝑔 𝑍𝑎𝑣𝑔

Parameters
SG [float] Specific gravity of fluid with respect to air at the reference temperature and pressure
Ts and Ps, [-]
Tavg [float] Average temperature of the fluid in the pipeline, [K]
L [float, optional] Length of pipe, [m]
D [float, optional] Diameter of pipe, [m]
P1 [float, optional] Inlet pressure to pipe, [Pa]
P2 [float, optional] Outlet pressure from pipe, [Pa]
Q [float, optional] Flow rate of gas through pipe at Ts and Ps, [m^3/s]
Ts [float, optional] Reference temperature for the specific gravity of the gas, [K]
Ps [float, optional] Reference pressure for the specific gravity of the gas, [Pa]

2.2. Compressible flow and compressor sizing (fluids.compressible) 53


Fluids Documentation, Release 1.0.21

Zavg [float, optional] Average compressibility factor for gas, [-]


E [float, optional] Pipeline efficiency, a correction factor between 0 and 1
Returns
Q, P1, P2, D, or L [float] The missing input which was solved for [base SI]

Notes

[1]’s original constant was 1.002E-2, and it has units of km (length), kPa, mm (diameter), and flowrate in m^3/day.
The form in [2] has the same exponents as used here, units of mm (diameter), kPa, km (length), and flow in
m^3/hour; its leading constant is 4.1749E-4.
The GPSA [3] has a leading constant of 0.339, and otherwise the same constants. It is in units of mm (diameter)
and kPa and m^3/day; length is stated to be in km, but according to the errata is in m.
[4] has a leading constant of 1.264E7, a diameter power of 4.961 which is also under the 0.51 power, and is
otherwise the same. It has units of kPa and m^3/day, but is otherwise in base SI units.
[5] has a leading constant of 135.8699, but its reference correction has no exponent and its specific gravity has a
power of 0.9608; the other exponents are the same as here. It is entirely in base SI units.
[6] has pressures in psi, diameter in inches, length in miles, Q in ft^3/day, T in degrees Rankine, and a constant
of 737 with the exponents the same as here.

References

[1], [2], [3], [4], [5], [6]

Examples

>>> Panhandle_B(D=0.340, P1=90E5, P2=20E5, L=160E3, SG=0.693, Tavg=277.15)


42.35366178004172

fluids.compressible.Weymouth(SG, Tavg, L=None, D=None, P1=None, P2=None, Q=None, Ts=288.7,


Ps=101325.0, Zavg=1.0, E=0.92)
Calculation function for dealing with flow of a compressible gas in a pipeline with the Weymouth formula. Can
calculate any of the following, given all other inputs:
• Flow rate
• Upstream pressure
• Downstream pressure
• Diameter of pipe
• Length of pipe
A variety of different constants and expressions have been presented for the Weymouth equation. Here, a new
form is developed with all units in base SI, based on the work of [1].
]︂0.5
𝑃12 − 𝑃22
[︂
𝑇𝑠
𝑄 = 137.32958𝐸 𝐷2.667
𝑃𝑠 𝐿 · 𝑆𝐺 · 𝑇𝑎𝑣𝑔 𝑍𝑎𝑣𝑔

Parameters

54 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

SG [float] Specific gravity of fluid with respect to air at the reference temperature and pressure
Ts and Ps, [-]
Tavg [float] Average temperature of the fluid in the pipeline, [K]
L [float, optional] Length of pipe, [m]
D [float, optional] Diameter of pipe, [m]
P1 [float, optional] Inlet pressure to pipe, [Pa]
P2 [float, optional] Outlet pressure from pipe, [Pa]
Q [float, optional] Flow rate of gas through pipe at Ts and Ps, [m^3/s]
Ts [float, optional] Reference temperature for the specific gravity of the gas, [K]
Ps [float, optional] Reference pressure for the specific gravity of the gas, [Pa]
Zavg [float, optional] Average compressibility factor for gas, [-]
E [float, optional] Pipeline efficiency, a correction factor between 0 and 1
Returns
Q, P1, P2, D, or L [float] The missing input which was solved for [base SI]

Notes

[1]’s original constant was 3.7435E-3, and it has units of km (length), kPa, mm (diameter), and flowrate in
m^3/day.
The form in [2] has the same exponents as used here, units of mm (diameter), kPa, km (length), and flow in
m^3/hour; its leading constant is 1.5598E-4.
The GPSA [3] has a leading constant of 0.1182, and otherwise the same constants. It is in units of mm (diameter)
and kPa and m^3/day; length is stated to be in km, but according to the errata is in m.
[4] has a leading constant of 1.162E7, a diameter power of 5.333 which is also under the 0.50 power, and is
otherwise the same. It has units of kPa and m^3/day, but is otherwise in base SI units.
[5] has a leading constant of 137.2364; the other exponents are the same as here. It is entirely in base SI units.
[6] has pressures in psi, diameter in inches, length in miles, Q in ft^3/hour, T in degrees Rankine, and a constant
of 18.062 with the exponents the same as here.

References

[1], [2], [3], [4], [5], [6]

Examples

>>> Weymouth(D=0.340, P1=90E5, P2=20E5, L=160E3, SG=0.693, Tavg=277.15)


32.07729055913029

fluids.compressible.Spitzglass_high(SG, Tavg, L=None, D=None, P1=None, P2=None, Q=None,


Ts=288.7, Ps=101325.0, Zavg=1.0, E=1.0)
Calculation function for dealing with flow of a compressible gas in a pipeline with the Spitzglass (high pressure
drop) formula. Can calculate any of the following, given all other inputs:
• Flow rate

2.2. Compressible flow and compressor sizing (fluids.compressible) 55


Fluids Documentation, Release 1.0.21

• Upstream pressure
• Downstream pressure
• Diameter of pipe (numerical solution)
• Length of pipe
A variety of different constants and expressions have been presented for the Spitzglass (high pressure drop)
formula. Here, the form as in [1] is used but with a more precise metric conversion from inches to m.
]︂0.5
𝑃12 − 𝑃22
(︂ )︂ [︂
𝑇𝑠
𝑄 = 125.1060𝐸 150 𝐷2.5
𝑃𝑠 𝐿 · 𝑆𝐺𝑇𝑎𝑣𝑔 𝑍𝑎𝑣𝑔 (1 + 0.09144/𝐷 + 127 𝐷)

Parameters
SG [float] Specific gravity of fluid with respect to air at the reference temperature and pressure
Ts and Ps, [-]
Tavg [float] Average temperature of the fluid in the pipeline, [K]
L [float, optional] Length of pipe, [m]
D [float, optional] Diameter of pipe, [m]
P1 [float, optional] Inlet pressure to pipe, [Pa]
P2 [float, optional] Outlet pressure from pipe, [Pa]
Q [float, optional] Flow rate of gas through pipe at Ts and Ps, [m^3/s]
Ts [float, optional] Reference temperature for the specific gravity of the gas, [K]
Ps [float, optional] Reference pressure for the specific gravity of the gas, [Pa]
Zavg [float, optional] Average compressibility factor for gas, [-]
E [float, optional] Pipeline efficiency, a correction factor between 0 and 1
Returns
Q, P1, P2, D, or L [float] The missing input which was solved for [base SI]

Notes

This equation is often presented without any correction for reference conditions for specific gravity.
This model is also presented in [2] with a leading constant of 1.0815E-2, the same exponents as used here, units
of mm (diameter), kPa, km (length), and flow in m^3/hour.

References

[1], [2]

56 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

Examples

>>> Spitzglass_high(D=0.340, P1=90E5, P2=20E5, L=160E3, SG=0.693, Tavg=277.15)


29.42670246281681

fluids.compressible.Spitzglass_low(SG, Tavg, L=None, D=None, P1=None, P2=None, Q=None, Ts=288.7,


Ps=101325.0, Zavg=1.0, E=1.0)
Calculation function for dealing with flow of a compressible gas in a pipeline with the Spitzglass (low pressure
drop) formula. Can calculate any of the following, given all other inputs:
• Flow rate
• Upstream pressure
• Downstream pressure
• Diameter of pipe (numerical solution)
• Length of pipe
A variety of different constants and expressions have been presented for the Spitzglass (low pressure drop) for-
mula. Here, the form as in [1] is used but with a more precise metric conversion from inches to m.
(︂ )︂ [︂ ]︂0.5
𝑇𝑠 2(𝑃1 − 𝑃2 )(𝑃𝑠 + 1210)
𝑄 = 125.1060𝐸 150 𝐷2.5
𝑃𝑠 𝐿 · 𝑆𝐺 · 𝑇𝑎𝑣𝑔 𝑍𝑎𝑣𝑔 (1 + 0.09144/𝐷 + 127 𝐷)

Parameters
SG [float] Specific gravity of fluid with respect to air at the reference temperature and pressure
Ts and Ps, [-]
Tavg [float] Average temperature of the fluid in the pipeline, [K]
L [float, optional] Length of pipe, [m]
D [float, optional] Diameter of pipe, [m]
P1 [float, optional] Inlet pressure to pipe, [Pa]
P2 [float, optional] Outlet pressure from pipe, [Pa]
Q [float, optional] Flow rate of gas through pipe at Ts and Ps, [m^3/s]
Ts [float, optional] Reference temperature for the specific gravity of the gas, [K]
Ps [float, optional] Reference pressure for the specific gravity of the gas, [Pa]
Zavg [float, optional] Average compressibility factor for gas, [-]
E [float, optional] Pipeline efficiency, a correction factor between 0 and 1
Returns
Q, P1, P2, D, or L [float] The missing input which was solved for [base SI]

2.2. Compressible flow and compressor sizing (fluids.compressible) 57


Fluids Documentation, Release 1.0.21

Notes

This equation is often presented without any correction for reference conditions for specific gravity.
This model is also presented in [2] with a leading constant of 5.69E-2, the same exponents as used here, units
of mm (diameter), kPa, km (length), and flow in m^3/hour. However, it is believed to contain a typo, and gives
results <1/3 of the correct values. It is also present in [2] in imperial form; this is believed correct, but makes a
slight assumption not done in [1].
This model is present in [3] without reference corrections. The 1210 constant in [1] is an approximation necessary
for the reference correction to function without a square of the pressure difference. The GPSA version is as
follows, and matches this formulation very closely:
]︂0.5
(𝑃1 − 𝑃2 )𝐷5
[︂
𝑄 = 0.821
𝐿 · 𝑆𝐺(1 + 91.44/𝐷 + 0.0018𝐷)

The model is also shown in [4], with diameter in inches, length in feet, flow in MMSCFD, pressure drop in
inH2O, and a rounded leading constant of 0.09; this makes its predictions several percent higher than the model
here.

References

[1], [2], [3], [4]

Examples

>>> Spitzglass_low(D=0.154051, P1=6720.3199, P2=0, L=54.864, SG=0.6, Tavg=288.7)


0.9488775242530617

fluids.compressible.Oliphant(SG, Tavg, L=None, D=None, P1=None, P2=None, Q=None, Ts=288.7,


Ps=101325.0, Zavg=1.0, E=0.92)
Calculation function for dealing with flow of a compressible gas in a pipeline with the Oliphant formula. Can
calculate any of the following, given all other inputs:
• Flow rate
• Upstream pressure
• Downstream pressure
• Diameter of pipe (numerical solution)
• Length of pipe
This model is a more complete conversion to metric of the Imperial version presented in [1].
)︂0.5
𝑃12 − 𝑃22
(︂
(︀ 2.5
)︀ 𝑇𝑠
3
𝑄 = 84.5872 𝐷 + 0.20915𝐷
𝑃𝑠 𝐿 · 𝑆𝐺 · 𝑇𝑎𝑣𝑔

Parameters
SG [float] Specific gravity of fluid with respect to air at the reference temperature and pressure
Ts and Ps, [-]
Tavg [float] Average temperature of the fluid in the pipeline, [K]
L [float, optional] Length of pipe, [m]
D [float, optional] Diameter of pipe, [m]

58 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

P1 [float, optional] Inlet pressure to pipe, [Pa]


P2 [float, optional] Outlet pressure from pipe, [Pa]
Q [float, optional] Flow rate of gas through pipe at Ts and Ps, [m^3/s]
Ts [float, optional] Reference temperature for the specific gravity of the gas, [K]
Ps [float, optional] Reference pressure for the specific gravity of the gas, [Pa]
Zavg [float, optional] Average compressibility factor for gas, [-]
E [float, optional] Pipeline efficiency, a correction factor between 0 and 1
Returns
Q, P1, P2, D, or L [float] The missing input which was solved for [base SI]

Notes

Recommended in [1] for use between vacuum and 100 psi.


The model is simplified by grouping constants here; however, it is presented in the imperial unit set inches
(diameter), miles (length), psi, Rankine, and MMSCFD in [1]:
)︂]︂0.5
𝐷3 𝑃12 − 𝑃22
(︂ )︂ (︂ )︂ (︂ )︂ [︂(︂ )︂ (︂ )︂ (︂
2.5 14.4 𝑇𝑠 0.6 520
𝑄 = 42(24) 𝐷 +
30 𝑃𝑠 520 𝑆𝐺 𝑇𝑎𝑣𝑔 𝐿

References

[1], [2]

Examples

>>> Oliphant(D=0.340, P1=90E5, P2=20E5, L=160E3, SG=0.693, Tavg=277.15)


28.851535408143057

fluids.compressible.Fritzsche(SG, Tavg, L=None, D=None, P1=None, P2=None, Q=None, Ts=288.7,


Ps=101325.0, Zavg=1.0, E=1.0)
Calculation function for dealing with flow of a compressible gas in a pipeline with the Fritzsche formula. Can
calculate any of the following, given all other inputs:
• Flow rate
• Upstream pressure
• Downstream pressure
• Diameter of pipe
• Length of pipe
A variety of different constants and expressions have been presented for the Fritzsche formula. Here, the form
as in [1] is used but with all inputs in base SI units.
)︂0.538
𝑃12 − 𝑃22
(︂
𝑇𝑠
𝑄 = 93.500 𝐷2.69
𝑃𝑠 𝐿 · 𝑆𝐺0.8587 · 𝑇𝑎𝑣𝑔

Parameters

2.2. Compressible flow and compressor sizing (fluids.compressible) 59


Fluids Documentation, Release 1.0.21

SG [float] Specific gravity of fluid with respect to air at the reference temperature and pressure
Ts and Ps, [-]
Tavg [float] Average temperature of the fluid in the pipeline, [K]
L [float, optional] Length of pipe, [m]
D [float, optional] Diameter of pipe, [m]
P1 [float, optional] Inlet pressure to pipe, [Pa]
P2 [float, optional] Outlet pressure from pipe, [Pa]
Q [float, optional] Flow rate of gas through pipe at Ts and Ps, [m^3/s]
Ts [float, optional] Reference temperature for the specific gravity of the gas, [K]
Ps [float, optional] Reference pressure for the specific gravity of the gas, [Pa]
Zavg [float, optional] Average compressibility factor for gas, [-]
E [float, optional] Pipeline efficiency, a correction factor between 0 and 1
Returns
Q, P1, P2, D, or L [float] The missing input which was solved for [base SI]

Notes

This model is also presented in [1] with a leading constant of 2.827, the same exponents as used here, units of
mm (diameter), kPa, km (length), and flow in m^3/hour.
This model is shown in base SI units in [2], and with a leading constant of 94.2565, a diameter power of 2.6911,
main group power of 0.5382 and a specific gravity power of 0.858. The difference is very small.

References

[1], [2]

Examples

>>> Fritzsche(D=0.340, P1=90E5, P2=20E5, L=160E3, SG=0.693, Tavg=277.15)


39.421535157535565

fluids.compressible.Muller(SG, Tavg, mu, L=None, D=None, P1=None, P2=None, Q=None, Ts=288.7,


Ps=101325.0, Zavg=1.0, E=1.0)
Calculation function for dealing with flow of a compressible gas in a pipeline with the Muller formula. Can
calculate any of the following, given all other inputs:
• Flow rate
• Upstream pressure
• Downstream pressure
• Diameter of pipe
• Length of pipe

60 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

A variety of different constants and expressions have been presented for the Muller formula. Here, the form as
in [1] is used but with all inputs in base SI units.
)︂0.575 (︂
𝑃12 − 𝑃22 𝐷2.725
(︂ )︂
𝑇𝑠
𝑄 = 15.7743 𝐸
𝑃𝑠 𝐿 · 𝑍𝑎𝑣𝑔 · 𝑇𝑎𝑣𝑔 𝜇 𝑆𝐺0.425
0.15

Parameters
SG [float] Specific gravity of fluid with respect to air at the reference temperature and pressure
Ts and Ps, [-]
Tavg [float] Average temperature of the fluid in the pipeline, [K]
mu [float] Average viscosity of the fluid in the pipeline, [Pa*s]
L [float, optional] Length of pipe, [m]
D [float, optional] Diameter of pipe, [m]
P1 [float, optional] Inlet pressure to pipe, [Pa]
P2 [float, optional] Outlet pressure from pipe, [Pa]
Q [float, optional] Flow rate of gas through pipe at Ts and Ps, [m^3/s]
Ts [float, optional] Reference temperature for the specific gravity of the gas, [K]
Ps [float, optional] Reference pressure for the specific gravity of the gas, [Pa]
Zavg [float, optional] Average compressibility factor for gas, [-]
E [float, optional] Pipeline efficiency, a correction factor between 0 and 1
Returns
Q, P1, P2, D, or L [float] The missing input which was solved for [base SI]

Notes

This model is presented in [1] with a leading constant of 0.4937, the same exponents as used here, units of inches
(diameter), psi, feet (length), Rankine, pound/(foot*second) for viscosity, and 1000 ft^3/hour.
This model is also presented in [2] in both SI and imperial form. The SI form was incorrectly converted and
yields much higher flow rates. The imperial version has a leading constant of 85.7368, the same powers as used
here except with rounded values of powers of viscosity (0.2609) and specific gravity (0.7391) rearranged to be
inside the bracketed group; its units are inches (diameter), psi, miles (length), Rankine, pound/(foot*second) for
viscosity, and ft^3/day.
This model is shown in base SI units in [3], and with a leading constant of 15.7650, a diameter power of 2.724,
main group power of 0.5747, a specific gravity power of 0.74, and a viscosity power of 0.1494.

References

[1], [2], [3]

2.2. Compressible flow and compressor sizing (fluids.compressible) 61


Fluids Documentation, Release 1.0.21

Examples

>>> Muller(D=0.340, P1=90E5, P2=20E5, L=160E3, SG=0.693, mu=1E-5,


... Tavg=277.15)
60.45796698148659

fluids.compressible.IGT(SG, Tavg, mu, L=None, D=None, P1=None, P2=None, Q=None, Ts=288.7,


Ps=101325.0, Zavg=1.0, E=1.0)
Calculation function for dealing with flow of a compressible gas in a pipeline with the IGT formula. Can calculate
any of the following, given all other inputs:
• Flow rate
• Upstream pressure
• Downstream pressure
• Diameter of pipe
• Length of pipe
A variety of different constants and expressions have been presented for the IGT formula. Here, the form as in
[1] is used but with all inputs in base SI units.
)︂5/9 (︂
𝑃12 − 𝑃22 𝐷8/3
(︂ )︂
𝑇𝑠
𝑄 = 24.6241 𝐸
𝑃𝑠 𝐿 · 𝑍𝑎𝑣𝑔 · 𝑇𝑎𝑣𝑔 𝜇1/9 𝑆𝐺4/9

Parameters
SG [float] Specific gravity of fluid with respect to air at the reference temperature and pressure
Ts and Ps, [-]
Tavg [float] Average temperature of the fluid in the pipeline, [K]
mu [float] Average viscosity of the fluid in the pipeline, [Pa*s]
L [float, optional] Length of pipe, [m]
D [float, optional] Diameter of pipe, [m]
P1 [float, optional] Inlet pressure to pipe, [Pa]
P2 [float, optional] Outlet pressure from pipe, [Pa]
Q [float, optional] Flow rate of gas through pipe at Ts and Ps, [m^3/s]
Ts [float, optional] Reference temperature for the specific gravity of the gas, [K]
Ps [float, optional] Reference pressure for the specific gravity of the gas, [Pa]
Zavg [float, optional] Average compressibility factor for gas, [-]
E [float, optional] Pipeline efficiency, a correction factor between 0 and 1
Returns
Q, P1, P2, D, or L [float] The missing input which was solved for [base SI]

62 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

Notes

This model is presented in [1] with a leading constant of 0.6643, the same exponents as used here, units of inches
(diameter), psi, feet (length), Rankine, pound/(foot*second) for viscosity, and 1000 ft^3/hour.
This model is also presented in [2] in both SI and imperial form. Both forms are correct. The imperial version
has a leading constant of 136.9, the same powers as used here except with rounded values of powers of viscosity
(0.2) and specific gravity (0.8) rearranged to be inside the bracketed group; its units are inches (diameter), psi,
miles (length), Rankine, pound/(foot*second) for viscosity, and ft^3/day.
This model is shown in base SI units in [3], and with a leading constant of 24.6145, and the same powers as used
here.

References

[1], [2], [3]

Examples

>>> IGT(D=0.340, P1=90E5, P2=20E5, L=160E3, SG=0.693, mu=1E-5, Tavg=277.15)


48.92351786788815

2.2.4 Critical Flow

fluids.compressible.T_critical_flow(T, k)
Calculates critical flow temperature Tcf for a fluid with the given isentropic coefficient. Tcf is in a flow (with
Ma=1) whose stagnation conditions are known. Normally used with converging/diverging nozzles.

𝑇* 2
=
𝑇0 𝑘+1
Parameters
T [float] Stagnation temperature of a fluid with Ma=1 [K]
k [float] Isentropic coefficient []
Returns
Tcf [float] Critical flow temperature at Ma=1 [K]

Notes

Assumes isentropic flow.

2.2. Compressible flow and compressor sizing (fluids.compressible) 63


Fluids Documentation, Release 1.0.21

References

[1]

Examples

Example 12.4 in [1]:

>>> T_critical_flow(473, 1.289)


413.2809086937528

fluids.compressible.P_critical_flow(P, k)
Calculates critical flow pressure Pcf for a fluid with the given isentropic coefficient. Pcf is in a flow (with Ma=1)
whose stagnation conditions are known. Normally used with converging/diverging nozzles.
)︂𝑘/(𝑘−1)
𝑃*
(︂
2
=
𝑃0 𝑘+1

Parameters
P [float] Stagnation pressure of a fluid with Ma=1 [Pa]
k [float] Isentropic coefficient []
Returns
Pcf [float] Critical flow pressure at Ma=1 [Pa]

Notes

Assumes isentropic flow.

References

[1]

Examples

Example 12.4 in [1]:

>>> P_critical_flow(1400000, 1.289)


766812.9022792266

fluids.compressible.is_critical_flow(P1, P2, k)
Determines if a flow of a fluid driven by pressure gradient P1 - P2 is critical, for a fluid with the given isentropic
coefficient. This function calculates critical flow pressure, and checks if this is larger than P2. If so, the flow is
critical and choked.
Parameters
P1 [float] Higher, source pressure [Pa]
P2 [float] Lower, downstream pressure [Pa]
k [float] Isentropic coefficient []

64 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

Returns
flowtype [bool] True if the flow is choked; otherwise False

Notes

Assumes isentropic flow. Uses P_critical_flow function.

References

[1]

Examples

Examples 1-2 from API 520.

>>> is_critical_flow(670E3, 532E3, 1.11)


False
>>> is_critical_flow(670E3, 101E3, 1.11)
True

fluids.compressible.P_isothermal_critical_flow(P, fd, D, L)
Calculates critical flow pressure Pcf for a fluid flowing isothermally and suffering pressure drop caused by a
pipe’s friction factor.
(︁ (︁ (︁ 1 )︁ )︁ )︁
1
𝐷 LambertW −𝑒 𝐷 (−𝐷−𝐿𝑓𝑑 ) +1 +𝐿𝑓𝑑
𝑃2 = 𝑃1 𝑒 2𝐷

Parameters
P [float] Inlet pressure [Pa]
fd [float] Darcy friction factor for flow in pipe [-]
D [float] Diameter of pipe, [m]
L [float] Length of pipe, [m]
Returns
Pcf [float] Critical flow pressure of a compressible gas flowing from P1 to Pcf in a tube of length
L and friction factor fd [Pa]

Notes

Assumes isothermal flow. Developed based on the isothermal_gas model, using SymPy.
The isothermal gas model is solved for maximum mass flow rate; any pressure drop under it is impossible due to
the formation of a shock wave.

2.2. Compressible flow and compressor sizing (fluids.compressible) 65


Fluids Documentation, Release 1.0.21

References

[1]

Examples

>>> P_isothermal_critical_flow(P=1E6, fd=0.00185, L=1000., D=0.5)


389699.73176

fluids.compressible.P_upstream_isothermal_critical_flow(P, fd, D, L)
Not part of the public API. Reverses P_isothermal_critical_flow.

Examples

>>> P_upstream_isothermal_critical_flow(P=389699.7317645518, fd=0.00185,


... L=1000., D=0.5)
1000000.00000

2.2.5 Stagnation Point

fluids.compressible.stagnation_energy(V )
Calculates the increase in enthalpy dH which is provided by a fluid’s velocity V.

𝑉2
∆𝐻 =
2
Parameters
V [float] Velocity [m/s]
Returns
dH [float] Incease in enthalpy [J/kg]

Notes

The units work out. This term is pretty small, but not trivial.

References

[1]

66 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

Examples

>>> stagnation_energy(125)
7812.5

fluids.compressible.P_stagnation(P, T, Tst, k)
Calculates stagnation flow pressure Pst for a fluid with the given isentropic coefficient and specified stagnation
temperature and normal temperature. Normally used with converging/diverging nozzles.
(︂ 𝑘
)︂ 𝑘−1
𝑃0 𝑇0
=
𝑃 𝑇

Parameters
P [float] Normal pressure of a fluid [Pa]
T [float] Normal temperature of a fluid [K]
Tst [float] Stagnation temperature of a fluid moving at a certain velocity [K]
k [float] Isentropic coefficient []
Returns
Pst [float] Stagnation pressure of a fluid moving at a certain velocity [Pa]

Notes

Assumes isentropic flow.

References

[1]

Examples

Example 12-1 in [1].

>>> P_stagnation(54050., 255.7, 286.8, 1.4)


80772.80495900588

fluids.compressible.T_stagnation(T, P, Pst, k)
Calculates stagnation flow temperature Tst for a fluid with the given isentropic coefficient and specified stagnation
pressure and normal pressure. Normally used with converging/diverging nozzles.
(︂ )︂ 𝑘−1
𝑃 𝑘
𝑇 = 𝑇0
𝑃0

Parameters
T [float] Normal temperature of a fluid [K]
P [float] Normal pressure of a fluid [Pa]
Pst [float] Stagnation pressure of a fluid moving at a certain velocity [Pa]
k [float] Isentropic coefficient []

2.2. Compressible flow and compressor sizing (fluids.compressible) 67


Fluids Documentation, Release 1.0.21

Returns
Tst [float] Stagnation temperature of a fluid moving at a certain velocity [K]

Notes

Assumes isentropic flow.

References

[1]

Examples

Example 12-1 in [1].

>>> T_stagnation(286.8, 54050, 54050*8, 1.4)


519.5230938217768

fluids.compressible.T_stagnation_ideal(T, V, Cp)
Calculates the ideal stagnation temperature Tst calculated assuming the fluid has a constant heat capacity Cp and
with a specified velocity V and temperature T.

𝑉2
𝑇* = 𝑇 +
2𝐶𝑝

Parameters
T [float] Tempearture [K]
V [float] Velocity [m/s]
Cp [float] Ideal heat capacity [J/kg/K]
Returns
Tst [float] Stagnation temperature [J/kg]

References

[1]

Examples

Example 12-1 in [1].

>>> T_stagnation_ideal(255.7, 250, 1005.)


286.79452736318405

68 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

2.3 Control valve sizing and rating (fluids.control_valve)

This module contains equations for modeling control valves subject to gas or liquid flow.
For reporting bugs, adding feature requests, or submitting pull requests, please use the GitHub issue tracker or contact
the author at Caleb.Andrew.Bell@gmail.com.

• Sizing Functions
• Intermediary Sizing Calculations
• Representative Control Valve Curves
• Noise Generated by Control Valves

2.3.1 Sizing Functions

fluids.control_valve.size_control_valve_l(rho, Psat, Pc, mu, P1, P2, Q, D1=None, D2=None, d=None,


FL=0.9, Fd=1, allow_choked=True, allow_laminar=True,
full_output=False)
Calculates flow coefficient of a control valve passing a liquid according to IEC 60534. Uses a large number of
inputs in SI units. Note the return value is not standard SI. All parameters are required. This sizing model does
not officially apply to liquid mixtures, slurries, non-Newtonian fluids, or liquid-solid conveyance systems. For
details of the calculations, consult [1].
Parameters
rho [float] Density of the liquid at the inlet [kg/m^3]
Psat [float] Saturation pressure of the fluid at inlet temperature [Pa]
Pc [float] Critical pressure of the fluid [Pa]
mu [float] Viscosity of the fluid [Pa*s]
P1 [float] Inlet pressure of the fluid before valves and reducers [Pa]
P2 [float] Outlet pressure of the fluid after valves and reducers [Pa]
Q [float] Volumetric flow rate of the fluid [m^3/s]
D1 [float, optional] Diameter of the pipe before the valve [m]
D2 [float, optional] Diameter of the pipe after the valve [m]
d [float, optional] Diameter of the valve [m]
FL [float, optional] Liquid pressure recovery factor of a control valve without attached fittings
(normally 0.8-0.9 at full open and decreasing as opened further to below 0.5; use default
very cautiously!) []
Fd [float, optional] Valve style modifier (0.1 to 1; varies tremendously depending on the type of
valve and position; do not use the default at all!) []
allow_choked [bool, optional] Overrides the automatic transition into the choked regime if this
is False and returns as if choked flow does not exist
allow_laminar [bool, optional] Overrides the automatic transition into the laminar regime if
this is False and returns as if laminar flow does not exist

2.3. Control valve sizing and rating (fluids.control_valve) 69


Fluids Documentation, Release 1.0.21

full_output [bool, optional] If True, returns intermediate calculation values as well as Kv in the
form of a dictionary containing ‘Kv’, ‘Rev’, ‘choked’, ‘FL’, ‘FLP’, ‘FR’, ‘FP’, and ‘laminar’.
Some may be None if they are not used in the calculation.
Returns
Kv [float] Metric Kv valve flow coefficient (flow rate of water at a pressure drop of 1 bar)
[m^3/hr]

Notes

It is possible to use this model without any diameters specified; in that case, turbulent flow is assumed. Choked
flow can still be modeled. This is not recommended. All three diameters need to be None for this to work. FL
and Fd are not used by the models when the diameters are not specified.

References

[1]

Examples

From [1], matching example 1 for a globe, parabolic plug, flow-to-open valve.

>>> size_control_valve_l(rho=965.4, Psat=70.1E3, Pc=22120E3, mu=3.1472E-4,


... P1=680E3, P2=220E3, Q=0.1, D1=0.15, D2=0.15, d=0.15,
... FL=0.9, Fd=0.46)
164.9954763704956

From [1], matching example 2 for a ball, segmented ball, flow-to-open valve.

>>> size_control_valve_l(rho=965.4, Psat=70.1E3, Pc=22120E3, mu=3.1472E-4,


... P1=680E3, P2=220E3, Q=0.1, D1=0.1, D2=0.1, d=0.1,
... FL=0.6, Fd=0.98)
238.05817216710483

fluids.control_valve.size_control_valve_g(T, MW, mu, gamma, Z, P1, P2, Q, D1=None, D2=None,


d=None, FL=0.9, Fd=1, xT=0.7, allow_choked=True,
allow_laminar=True, full_output=False)
Calculates flow coefficient of a control valve passing a gas according to IEC 60534. Uses a large number of inputs
in SI units. Note the return value is not standard SI. All parameters are required. For details of the calculations,
consult [1]. Note the inlet gas flow conditions.
Parameters
T [float] Temperature of the gas at the inlet [K]
MW [float] Molecular weight of the gas [g/mol]
mu [float] Viscosity of the fluid at inlet conditions [Pa*s]
gamma [float] Specific heat capacity ratio [-]
Z [float] Compressibility factor at inlet conditions, [-]
P1 [float] Inlet pressure of the gas before valves and reducers [Pa]
P2 [float] Outlet pressure of the gas after valves and reducers [Pa]

70 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

Q [float] Volumetric flow rate of the gas at 273.15 K and 1 atm specifically [m^3/s]
D1 [float, optional] Diameter of the pipe before the valve [m]
D2 [float, optional] Diameter of the pipe after the valve [m]
d [float, optional] Diameter of the valve [m]
FL [float, optional] Liquid pressure recovery factor of a control valve without attached fittings
(normally 0.8-0.9 at full open and decreasing as opened further to below 0.5; use default
very cautiously!) []
Fd [float, optional] Valve style modifier (0.1 to 1; varies tremendously depending on the type of
valve and position; do not use the default at all!) []
xT [float, optional] Pressure difference ratio factor of a valve without fittings at choked flow
(increasing to 0.9 or higher as the valve is closed further and decreasing to 0.1 or lower as
the valve is opened further; use default very cautiously!) [-]
allow_choked [bool, optional] Overrides the automatic transition into the choked regime if this
is False and returns as if choked flow does not exist
allow_laminar [bool, optional] Overrides the automatic transition into the laminar regime if
this is False and returns as if laminar flow does not exist
full_output [bool, optional] If True, returns intermediate calculation values as well as Kv in the
form of a dictionary containing ‘Kv’, ‘Rev’, ‘choked’, ‘Y’, ‘FR’, ‘FP’, ‘xTP’, and ‘laminar’.
Some may be None if they are not used in the calculation.
Returns
Kv [float] Metric Kv valve flow coefficient (flow rate of water at a pressure drop of 1 bar)
[m^3/hr]

Notes

It is possible to use this model without any diameters specified; in that case, turbulent flow is assumed. Choked
flow can still be modeled. This is not recommended. All three diameters need to be None for this to work. FL
and Fd are not used by the models when the diameters are not specified, but xT definitely is used by the model.
When this model does not converge, the result is normally because of the specified delta P being less than that
caused by the piping diameter changes.

References

[1]

Examples

From [1], matching example 3 for non-choked gas flow with attached fittings and a rotary, eccentric plug, flow-
to-open control valve:

>>> size_control_valve_g(T=433., MW=44.01, mu=1.4665E-4, gamma=1.30,


... Z=0.988, P1=680E3, P2=310E3, Q=38/36., D1=0.08, D2=0.1, d=0.05,
... FL=0.85, Fd=0.42, xT=0.60)
72.5866454539105

2.3. Control valve sizing and rating (fluids.control_valve) 71


Fluids Documentation, Release 1.0.21

From [1], roughly matching example 4 for a small flow trim sized tapered needle plug valve. Difference is 3%
and explained by the difference in algorithms used.

>>> size_control_valve_g(T=320., MW=39.95, mu=5.625E-5, gamma=1.67, Z=1.0,


... P1=2.8E5, P2=1.3E5, Q=0.46/3600., D1=0.015, D2=0.015, d=0.015, FL=0.98,
... Fd=0.07, xT=0.8)
0.016498765335995726

2.3.2 Intermediary Sizing Calculations

fluids.control_valve.FF_critical_pressure_ratio_l(Psat, Pc)
Calculates FF, the liquid critical pressure ratio factor, for use in IEC 60534 liquid valve sizing calculations.
√︂
𝑃𝑠𝑎𝑡
𝐹𝐹 = 0.96 − 0.28
𝑃𝑐
Parameters
Psat [float] Saturation pressure of the liquid at inlet temperature [Pa]
Pc [float] Critical pressure of the liquid [Pa]
Returns
FF [float] Liquid critical pressure ratio factor [-]

References

[1]

Examples

From [1], matching example.

>>> FF_critical_pressure_ratio_l(70100.0, 22120000.0)


0.9442375225233299

fluids.control_valve.is_choked_turbulent_l(dP, P1, Psat, FF, FL=None, FLP=None, FP=None)


Calculates if a liquid flow in IEC 60534 calculations is critical or not, for use in IEC 60534 liquid valve sizing
calculations. Either FL may be provided or FLP and FP, depending on the calculation process.

∆𝑃 > 𝐹𝐿2 (𝑃1 − 𝐹𝐹 𝑃𝑠𝑎𝑡 )


(︂ )︂2
𝐹𝐿𝑃
∆𝑃 >= (𝑃1 − 𝐹𝐹 𝑃𝑠𝑎𝑡 )
𝐹𝑃
Parameters
dP [float] Differential pressure across the valve, with reducer/expanders [Pa]
P1 [float] Pressure of the fluid before the valve and reducers/expanders [Pa]
Psat [float] Saturation pressure of the fluid at inlet temperature [Pa]
FF [float] Liquid critical pressure ratio factor [-]
FL [float, optional] Liquid pressure recovery factor of a control valve without attached fittings
[-]

72 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

FLP [float, optional] Combined liquid pressure recovery factor with piping geometry factor, for
a control valve with attached fittings [-]
FP [float, optional] Piping geometry factor [-]
Returns
choked [bool] Whether or not the flow is choked [-]

References

[1]

Examples

>>> is_choked_turbulent_l(460.0, 680.0, 70.1, 0.94, 0.9)


False
>>> is_choked_turbulent_l(460.0, 680.0, 70.1, 0.94, 0.6)
True

fluids.control_valve.is_choked_turbulent_g(x, Fgamma, xT=None, xTP=None)


Calculates if a gas flow in IEC 60534 calculations is critical or not, for use in IEC 60534 gas valve sizing calcu-
lations. Either xT or xTP must be provided, depending on the calculation process.

𝑥 ≥ 𝐹𝛾 𝑥𝑇

𝑥 ≥ 𝐹𝛾 𝑥 𝑇 𝑃
Parameters
x [float] Differential pressure over inlet pressure, [-]
Fgamma [float] Specific heat ratio factor [-]
xT [float, optional] Pressure difference ratio factor of a valve without fittings at choked flow [-]
xTP [float] Pressure difference ratio factor of a valve with fittings at choked flow [-]
Returns
choked [bool] Whether or not the flow is choked [-]

References

[1]

Examples

Example 3, compressible flow, non-choked with attached fittings:

>>> is_choked_turbulent_g(0.544, 0.929, 0.6)


False
>>> is_choked_turbulent_g(0.544, 0.929, xTP=0.625)
False

2.3. Control valve sizing and rating (fluids.control_valve) 73


Fluids Documentation, Release 1.0.21

fluids.control_valve.Reynolds_valve(nu, Q, D1, FL, Fd, C)


Calculates Reynolds number of a control valve for a liquid or gas flowing through it at a specified Q, for a specified
D1, FL, Fd, C, and with kinematic viscosity nu according to IEC 60534 calculations.
)︂1/4
𝐹𝐿2 𝐶 2
(︂
𝑁4 𝐹𝑑 𝑄
𝑅𝑒𝑣 = √ +1
𝜈 𝐶𝐹𝐿 𝑁2 𝐷 4

Parameters
nu [float] Kinematic viscosity, [m^2/s]
Q [float] Volumetric flow rate of the fluid [m^3/s]
D1 [float] Diameter of the pipe before the valve [m]
FL [float, optional] Liquid pressure recovery factor of a control valve without attached fittings
[]
Fd [float] Valve style modifier [-]
C [float] Metric Kv valve flow coefficient (flow rate of water at a pressure drop of 1 bar) [m^3/hr]
Returns
Rev [float] Valve reynolds number [-]

References

[1]

Examples

>>> Reynolds_valve(3.26e-07, 360, 150.0, 0.9, 0.46, 165)


2966984.7525455453

fluids.control_valve.Reynolds_factor(FL, C, d, Rev, full_trim=True)


Calculates the Reynolds number factor FR for a valve with a Reynolds number Rev, diameter d, flow coefficient C,
liquid pressure recovery factor FL, and with either full or reduced trim, all according to IEC 60534 calculations.
If full trim:
0.33𝐹𝐿0.5
(︂ )︂ (︂ )︂
𝑅𝑒𝑣
𝐹𝑅,1𝑎 = 1 + log10
𝑛0.25
1 10000

0.026 √︀
𝐹𝑅,2 = min( 𝑛1 𝑅𝑒𝑣 , 1)
𝐹𝐿
𝑁2
𝑛1 = (︀ )︀2
𝐶
𝑑2

𝐹𝑅 = 𝐹𝑅,2 if Rev < 10 else min(𝐹𝑅,1𝑎 , 𝐹𝑅,2 )


Otherwise :
0.33𝐹𝐿0.5
(︂ )︂ (︂ )︂
𝑅𝑒𝑣
𝐹𝑅,3𝑎 = 1 + log10
𝑛0.25
2 10000

0.026 √︀
𝐹𝑅,4 = 𝑛2 𝑅𝑒𝑣
𝐹𝐿

74 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

(︂ )︂2/3
𝐶
𝑛2 = 1 + 𝑁32
𝑑
𝐹𝑅 = 𝐹𝑅,4 if Rev < 10 else min(𝐹𝑅,3𝑎 , 𝐹𝑅,4 )
Parameters
FL [float] Liquid pressure recovery factor of a control valve without attached fittings []
C [float] Metric Kv valve flow coefficient (flow rate of water at a pressure drop of 1 bar) [m^3/hr]
d [float] Diameter of the valve [m]
Rev [float] Valve reynolds number [-]
full_trim [bool] Whether or not the valve has full trim
Returns
FR [float] Reynolds number factor for laminar or transitional flow []

References

[1]

Examples

In Example 4, compressible flow with small flow trim sized for gas flow (Cv in the problem was converted to Kv
here to make FR match with N32, N2):

>>> Reynolds_factor(FL=0.98, C=0.015483, d=15., Rev=1202., full_trim=False)


0.7148753122302025

fluids.control_valve.loss_coefficient_piping(d, D1=None, D2=None)


Calculates the sum of loss coefficients from possible inlet/outlet reducers/expanders around a control valve ac-
cording to IEC 60534 calculations.
Σ𝜉 = 𝜉1 + 𝜉2 + 𝜉𝐵1 − 𝜉𝐵2
[︃ (︂ )︂2 ]︃2
𝑑
𝜉1 = 0.5 1 −
𝐷1
[︃ (︂ )︂2 ]︃2
𝑑
𝜉2 = 1.0 1 −
𝐷2
(︂ )︂4
𝑑
𝜉𝐵1 = 1 −
𝐷1
(︂ )︂4
𝑑
𝜉𝐵2 = 1 −
𝐷2
Parameters
d [float] Diameter of the valve [m]
D1 [float] Diameter of the pipe before the valve [m]
D2 [float] Diameter of the pipe after the valve [m]
Returns
loss [float] Sum of the four loss coefficients [-]

2.3. Control valve sizing and rating (fluids.control_valve) 75


Fluids Documentation, Release 1.0.21

References

[1]

Examples

In example 3, non-choked compressible flow with fittings:

>>> loss_coefficient_piping(0.05, 0.08, 0.1)


0.6580810546875

fluids.control_valve.control_valve_choke_P_l(Psat, Pc, FL, P1=None, P2=None, disp=True)


Calculates either the upstream or downstream pressure at which choked flow though a liquid control valve occurs,
given either a set upstream or downstream pressure. Implements an analytical solution of the needed equations
from the full function size_control_valve_l. For some pressures, no choked flow is possible; for choked flow
to occur the direction if flow must be reversed. If disp is True, an exception will be raised for these conditions.

𝐹𝐹 𝐹𝐿2 𝑃𝑠𝑎𝑡 − 𝑃2
𝑃1 =
𝐹𝐿2 − 1

𝑃2 = 𝐹𝐹 𝐹𝐿2 𝑃𝑠𝑎𝑡 − 𝐹𝐿2 𝑃1 + 𝑃1


Parameters
Psat [float] Saturation pressure of the liquid at inlet temperature [Pa]
Pc [float] Critical pressure of the liquid [Pa]
FL [float, optional] Liquid pressure recovery factor of a control valve without attached fittings
[-]
P1 [float, optional] Absolute pressure upstream of the valve [Pa]
P2 [float, optional] Absolute pressure downstream of the valve [Pa]
disp [bool, optional] Whether or not to raise an exception on flow reversal, [-]
Returns
P_choke [float] Pressure at which a choke occurs in the liquid valve [Pa]

Notes

Extremely cheap to compute.

Examples

>>> control_valve_choke_P_l(69682.89291024722, 22048320.0, 0.6, 680000.0)


458887.5306077305
>>> control_valve_choke_P_l(69682.89291024722, 22048320.0, 0.6, P2=458887.
˓→5306077305)

680000.0

76 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

fluids.control_valve.control_valve_choke_P_g(xT, gamma, P1=None, P2=None)


Calculates either the upstream or downstream pressure at which choked flow though a gas control valve occurs,
given either a set upstream or downstream pressure. Implements an analytical solution of the needed equations
from the full function size_control_valve_g. A singularity arises as xT goes to 1 and gamma goes to 1.4.

7𝑃2
𝑃1 = −
5𝛾𝑥𝑇 − 7
𝑃1
𝑃2 = (−5𝛾𝑥𝑇 + 7)
7
Parameters
xT [float, optional] Pressure difference ratio factor of a valve without fittings at choked flow [-]
gamma [float] Specific heat capacity ratio [-]
P1 [float, optional] Absolute pressure upstream of the valve [Pa]
P2 [float, optional] Absolute pressure downstream of the valve [Pa]
Returns
P_choke [float] Pressure at which a choke occurs in the gas valve [Pa]

Notes

Extremely cheap to compute.

Examples

>>> control_valve_choke_P_g(1.0, 1.3, 1E5)


7142.857142857143
>>> control_valve_choke_P_g(1.0, 1.3, P2=7142.857142857143)
100000.0

fluids.control_valve.convert_flow_coefficient(flow_coefficient, old_scale, new_scale)


Convert from one flow coefficient scale to another; supports the Kv Cv, and Av scales.
Other scales are Qn and Cg, but clear definitions have yet to be found.
Parameters
flow_coefficient [float] Value of the flow coefficient to be converted, expressed in the original
scale.
old_scale [str] String specifying the original scale; one of ‘Av’, ‘Cv’, or ‘Kv’, [-]
new_scale [str] String specifying the new scale; one of ‘Av’, ‘Cv’, or ‘Kv’, [-]
Returns
converted_flow_coefficient [float] Flow coefficient converted to the specified scale.

2.3. Control valve sizing and rating (fluids.control_valve) 77


Fluids Documentation, Release 1.0.21

Notes

Qn is a scale based on a flow of air in units of L/minute as air travels through a valve and loses one bar of
pressure (initially 7 bar absolute, to 6 bar absolute). No consistent conversion factors have been found and those
from theory do not match what have been found. Some uses of Qn use its flow rate as in normal (STP reference
conditions) flow rate of air; others use something like the 7 bar absolute condition.

Examples

>>> convert_flow_coefficient(10, 'Kv', 'Av')


0.0002776532068951358

fluids.control_valve.cavitation_index(P1, P2, Psat)


Calculates the cavitation index of a valve with upstream and downstream absolute pressures P1 and P2 for a fluid
with a vapor pressure Psat.

𝑃1 − 𝑃𝑠𝑎𝑡
𝜎=
𝑃1 − 𝑃2
Parameters
P1 [float] Absolute pressure upstream of the valve [Pa]
P2 [float] Absolute pressure downstream of the valve [Pa]
Psat [float] Saturation pressure of the liquid at inlet temperature [Pa]
Returns
sigma [float] Cavitation index of the valve [-]

Notes

Larger values are safer. Models for adjusting cavitation indexes provided by the manufacturer to the user’s con-
ditions are available, making use of scaling the pressure differences and size differences.
Values can be calculated for incipient cavitation, constant cavitation, maximum vibration cavitation, incipient
damage, and choking cavitation.
Has also been defined as:
𝑃2 − 𝑃𝑠𝑎𝑡
𝜎=
𝑃1 − 𝑃2
Another definition and notation series is:
1 𝑃1 − 𝑃2
𝐾 = 𝑥𝐹 = =
𝜎 𝑃1 − 𝑃𝑠𝑎𝑡

References

[1]

78 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

Examples

>>> cavitation_index(1E6, 8E5, 2E5)


4.0

2.3.3 Representative Control Valve Curves

fluids.control_valve.Cv_char_linear(opening)

fluids.control_valve.Cv_char_quick_opening(opening)

fluids.control_valve.Cv_char_equal_percentage(opening)

2.3.4 Noise Generated by Control Valves

fluids.control_valve.control_valve_noise_l_2015(m, P1, P2, Psat, rho, c, Kv, d, Di, FL, Fd, t_pipe,
rho_pipe=7800.0, c_pipe=5000.0, rho_air=1.2,
c_air=343.0, 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) [1].
Parameters
m [float] Mass flow rate of liquid through the control valve, [kg/s]
P1 [float] Inlet pressure of the fluid before valves and reducers [Pa]
P2 [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 (flow rate of water at a pressure drop of 1 bar)
[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, optional] Liquid pressure recovery factor of a control valve without attached fittings
(normally 0.8-0.9 at full open and decreasing as opened further to below 0.5) [-]
Fd [float, optional] 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]
c_pipe [float, optional] Speed of sound of the pipe wall material at flowing conditions, [m/s]
rho_air [float, optional] Density of the air surrounding the valve and pipe wall, [kg/m^3]
c_air [float, optional] Speed of sound of the air surrounding the valve and pipe wall, [m/s]

2.3. Control valve sizing and rating (fluids.control_valve) 79


Fluids Documentation, Release 1.0.21

xFz [float, optional] If specified, this value xFz is used instead of estimated; the calculation is
sensitive to this value, [-]
An [float, optional] Valve correction factor for acoustic efficiency
Returns
LpAe1m [float] A weighted sound pressure level 1 m from the pipe wall, 1 m distance dowstream
of the valve (at reference sound pressure level 2E-5), [dB]

Notes

For formulas see [1]. This takes on the order of 100 us to compute. This model can also tell if noise is being
produced in a valve just due to turbulent flow, or cavitation. For values of An, see [1]; it is normally -4.6 for
global valves, -4.3 for butterfly valves, and -4.0 for expanders.
This model was checked against three examples in [1]; they match to all given decimals.
A formula is given in [1] for multihole trim valves to estimate xFz as well; this is not implemented here and xFz
must be calculated by the user separately. The formula is
)︂−1/2
𝑁0 𝑑2𝐻
(︂
𝑥𝐹 𝑧 = 4.5 + 1650
𝐹𝐿

Where N0 is the number of open channels and dH is the multihole trim hole diameter.

References

[1]

Examples

>>> control_valve_noise_l_2015(m=40, P1=1E6, P2=6.5E5, Psat=2.32E3,


... rho=997, c=1400, Kv=77.848, d=0.1, Di=0.1071, FL=0.92, Fd=0.42,
... t_pipe=0.0036, rho_pipe=7800.0, c_pipe=5000.0,rho_air=1.293,
... c_air=343.0, An=-4.6)
81.58200097996

fluids.control_valve.control_valve_noise_g_2011(m, P1, P2, T1, rho, gamma, MW, Kv, d, Di, t_pipe,
Fd, FL, FLP=None, FP=None, rho_pipe=7800.0,
c_pipe=5000.0, P_air=101325.0, rho_air=1.2,
c_air=343.0, An=- 3.8, Stp=0.2, T2=None,
beta=0.93)
Calculates the sound made by a gas flowing through a control valve according to the standard IEC 60534-8-3
(2011) [1].
Parameters
m [float] Mass flow rate of gas through the control valve, [kg/s]
P1 [float] Inlet pressure of the gas before valves and reducers [Pa]
P2 [float] Outlet pressure of the gas after valves and reducers [Pa]
T1 [float] Inlet gas temperature, [K]
rho [float] Density of the gas at the inlet [kg/m^3]

80 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

gamma [float] Specific heat capacity ratio [-]


MW [float] Molecular weight of the gas [g/mol]
Kv [float] Metric Kv valve flow coefficient (flow rate of water at a pressure drop of 1 bar)
[m^3/hr]
d [float] Diameter of the valve [m]
Di [float] Internal diameter of the pipe before and after the valve [m]
t_pipe [float] Wall thickness of the pipe after the valve, [m]
Fd [float] Valve style modifier (0.1 to 1; varies tremendously depending on the type of valve and
position; do not use the default at all!) [-]
FL [float] Liquid pressure recovery factor of a control valve without attached fittings (normally
0.8-0.9 at full open and decreasing as opened further to below 0.5; use default very cau-
tiously!) [-]
FLP [float, optional] Combined liquid pressure recovery factor with piping geometry factor, for
a control valve with attached fittings [-]
FP [float, optional] Piping geometry factor [-]
rho_pipe [float, optional] Density of the pipe wall material at flowing conditions, [kg/m^3]
c_pipe [float, optional] Speed of sound of the pipe wall material at flowing conditions, [m/s]
P_air [float, optional] Pressure of the air surrounding the valve and pipe wall, [Pa]
rho_air [float, optional] Density of the air surrounding the valve and pipe wall, [kg/m^3]
c_air [float, optional] Speed of sound of the air surrounding the valve and pipe wall, [m/s]
An [float, optional] Valve correction factor for acoustic efficiency, [-]
Stp [float, optional] Strouhal number at the peak fp; between 0.1 and 0.3 typically, [-]
T2 [float, optional] Outlet gas temperature; assumed T1 if not provided (a PH flash should be
used to obtain this if possible), [K]
beta [float, optional] Valve outlet / expander inlet contraction coefficient, [-]
Returns
LpAe1m [float] A-weighted sound pressure level 1 m from the pipe wall, 1 m distance dow-
stream of the valve (at reference sound pressure level 2E-5), [dB]

Notes

For formulas see [1]. This takes on the order of 100 us to compute. For values of An, see [1].
This model was checked against six examples in [1]; they match to all given decimals.
Several additional formulas are given for multihole trim valves, control valves with two or more fixed area stages,
and multipath, multistage trim valves.

2.3. Control valve sizing and rating (fluids.control_valve) 81


Fluids Documentation, Release 1.0.21

References

[1]

Examples

>>> control_valve_noise_g_2011(m=2.22, P1=1E6, P2=7.2E5, T1=450, rho=5.3,


... gamma=1.22, MW=19.8, Kv=77.85, d=0.1, Di=0.2031, FL=None, FLP=0.792,
... FP=0.98, Fd=0.296, t_pipe=0.008, rho_pipe=8000.0, c_pipe=5000.0,
... rho_air=1.293, c_air=343.0, An=-3.8, Stp=0.2)
91.67702674629604

2.4 Dimensionless numbers (fluids.core)

This module contains basic fluid mechanics and engineering calculations which have been found useful by the author.
The main functionality is calculating dimensionless numbers, interconverting different forms of loss coefficients, and
converting temperature units.
For reporting bugs, adding feature requests, or submitting pull requests, please use the GitHub issue tracker or contact
the author at Caleb.Andrew.Bell@gmail.com.

• Dimensionless Numbers
• Loss Coefficient Converters
• Temperature Conversions
• Miscellaneous Functions

2.4.1 Dimensionless Numbers

fluids.core.Archimedes(L, rhof, rhop, mu, g=9.80665)


Calculates Archimedes number, Ar, for a fluid and particle with the given densities, characteristic length, viscos-
ity, and gravity (usually diameter of particle).

𝐿3 𝜌𝑓 (𝜌𝑝 − 𝜌𝑓 )𝑔
𝐴𝑟 =
𝜇2
Parameters
L [float] Characteristic length, typically particle diameter [m]
rhof [float] Density of fluid, [kg/m^3]
rhop [float] Density of particle, [kg/m^3]
mu [float] Viscosity of fluid, [N/m]
g [float, optional] Acceleration due to gravity, [m/s^2]
Returns
Ar [float] Archimedes number []

82 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

Notes

Used in fluid-particle interaction calculations.


Gravitational force
𝐴𝑟 =
Viscous force

References

[1], [2]

Examples

>>> Archimedes(0.002, 2., 3000, 1E-3)


470.4053872

fluids.core.Bejan_L(dP, L, mu, alpha)


Calculates Bejan number of a length or Be_L for a fluid with the given parameters flowing over a characteristic
length L and experiencing a pressure drop dP.
∆𝑃 𝐿2
𝐵𝑒𝐿 =
𝜇𝛼
Parameters
dP [float] Pressure drop, [Pa]
L [float] Characteristic length, [m]
mu [float, optional] Dynamic viscosity, [Pa*s]
alpha [float] Thermal diffusivity, [m^2/s]
Returns
Be_L [float] Bejan number with respect to length []

Notes

Termed a dimensionless number by someone in 1988.

References

[1], [2]

Examples

>>> Bejan_L(1E4, 1, 1E-3, 1E-6)


10000000000000.0

fluids.core.Bejan_p(dP, K, mu, alpha)


Calculates Bejan number of a permeability or Be_p for a fluid with the given parameters and a permeability K
experiencing a pressure drop dP.
∆𝑃 𝐾
𝐵𝑒𝑝 =
𝜇𝛼

2.4. Dimensionless numbers (fluids.core) 83


Fluids Documentation, Release 1.0.21

Parameters
dP [float] Pressure drop, [Pa]
K [float] Permeability, [m^2]
mu [float, optional] Dynamic viscosity, [Pa*s]
alpha [float] Thermal diffusivity, [m^2/s]
Returns
Be_p [float] Bejan number with respect to pore characteristics []

Notes

Termed a dimensionless number by someone in 1988.

References

[1], [2]

Examples

>>> Bejan_p(1E4, 1, 1E-3, 1E-6)


10000000000000.0

fluids.core.Biot(h, L, k)
Calculates Biot number Br for heat transfer coefficient h, geometric length L, and thermal conductivity k.

ℎ𝐿
𝐵𝑖 =
𝑘
Parameters
h [float] Heat transfer coefficient, [W/m^2/K]
L [float] Characteristic length, no typical definition [m]
k [float] Thermal conductivity, within the object [W/m/K]
Returns
Bi [float] Biot number, [-]

Notes

Do not confuse k, the thermal conductivity within the object, with that of the medium h is calculated with!
Surface thermal resistance
𝐵𝑖 =
Internal thermal resistance

84 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

References

[1], [2]

Examples

>>> Biot(1000., 1.2, 300.)


4.0
>>> Biot(10000., .01, 4000.)
0.025

fluids.core.Boiling(G, q, Hvap)
Calculates Boiling number or Bg using heat flux, two-phase mass flux, and heat of vaporization of the fluid
flowing. Used in two-phase heat transfer calculations.
𝑞
Bg =
𝐺𝑡𝑝 ∆𝐻𝑣𝑎𝑝
Parameters
G [float] Two-phase mass flux in a channel (combined liquid and vapor) [kg/m^2/s]
q [float] Heat flux [W/m^2]
Hvap [float] Heat of vaporization of the fluid [J/kg]
Returns
Bg [float] Boiling number [-]

Notes

Most often uses the symbol Bo instead of Bg, but this conflicts with Bond number.
mass liquid evaporated / area heat transfer surface
Bg =
mass flow rate fluid / flow cross sectional area
First defined in [4], though not named.

References

[1], [2], [3], [4]

Examples

>>> Boiling(300, 3000, 800000)


1.25e-05

fluids.core.Bond(rhol, rhog, sigma, L)


Calculates Bond number, Bo also known as Eotvos number, for a fluid with the given liquid and gas densities,
surface tension, and geometric parameter (usually length).

𝑔(𝜌𝑙 − 𝜌𝑔 )𝐿2
𝐵𝑜 =
𝜎
Parameters

2.4. Dimensionless numbers (fluids.core) 85


Fluids Documentation, Release 1.0.21

rhol [float] Density of liquid, [kg/m^3]


rhog [float] Density of gas, [kg/m^3]
sigma [float] Surface tension, [N/m]
L [float] Characteristic length, [m]
Returns
Bo [float] Bond number []

References

[1]

Examples

>>> Bond(1000., 1.2, .0589, 2)


665187.2339558573

fluids.core.Capillary(V, mu, sigma)


Calculates Capillary number Ca for a characteristic velocity V, viscosity mu, and surface tension sigma.

𝑉𝜇
𝐶𝑎 =
𝜎
Parameters
V [float] Characteristic velocity, [m/s]
mu [float] Dynamic viscosity, [Pa*s]
sigma [float] Surface tension, [N/m]
Returns
Ca [float] Capillary number, [-]

Notes

Used in porous media calculations and film flow calculations. Surface tension may gas-liquid, or liquid-liquid.
Viscous forces
𝐶𝑎 =
Surface forces

References

[1], [2]

86 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

Examples

>>> Capillary(1.2, 0.01, .1)


0.12

fluids.core.Cavitation(P, Psat, rho, V )


Calculates Cavitation number or Ca for a fluid of velocity V with a pressure P, vapor pressure Psat, and density
rho.
𝑃 − 𝑃𝑠𝑎𝑡
𝐶𝑎 = 𝜎𝑐 = 𝜎 = 1 2
2 𝜌𝑉

Parameters
P [float] Internal pressure of the fluid, [Pa]
Psat [float] Vapor pressure of the fluid, [Pa]
rho [float] Density of the fluid, [kg/m^3]
V [float] Velocity of fluid, [m/s]
Returns
Ca [float] Cavitation number []

Notes

Used in determining if a flow through a restriction will cavitate. Sometimes, the multiplication by 2 will be
omitted;
Pressure - Vapor pressure
𝐶𝑎 =
Inertial pressure

References

[1], [2]

Examples

>>> Cavitation(2E5, 1E4, 1000, 10)


3.8

fluids.core.Confinement(D, rhol, rhog, sigma, g=9.80665)


Calculates Confinement number or Co for a fluid in a channel of diameter D with liquid and gas densities rhol
and rhog and surface tension sigma, under the influence of gravitational force g.
[︁ ]︁0.5
𝜎
𝑔(𝜌𝑙 −𝜌𝑔 )
Co =
𝐷
Parameters
D [float] Diameter of channel, [m]
rhol [float] Density of liquid phase, [kg/m^3]
rhog [float] Density of gas phase, [kg/m^3]

2.4. Dimensionless numbers (fluids.core) 87


Fluids Documentation, Release 1.0.21

sigma [float] Surface tension between liquid-gas phase, [N/m]


g [float, optional] Acceleration due to gravity, [m/s^2]
Returns
Co [float] Confinement number [-]

Notes

Used in two-phase pressure drop and heat transfer correlations. First used in [1] according to [3].
surface tension force
buoyancy force
Co =
Channel area

References

[1], [2], [3]

Examples

>>> Confinement(0.001, 1077, 76.5, 4.27E-3)


0.6596978265315191

fluids.core.Dean(Re, Di, D)
Calculates Dean number, De, for a fluid with the Reynolds number Re, inner diameter Di, and a secondary
diameter D. D may be the diameter of curvature, the diameter of a spiral, or some other dimension.
√︂ √︂
𝐷𝑖 𝐷𝑖 𝜌𝑣𝐷
De = Re =
𝐷 𝐷 𝜇
Parameters
Re [float] Reynolds number []
Di [float] Inner diameter []
D [float] Diameter of curvature or outer spiral or other dimension []
Returns
De [float] Dean number [-]

Notes

Used in flow in curved geometry.



centripetal forces · inertial forces
De =
viscous forces

88 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

References

[1]

Examples

>>> Dean(10000, 0.1, 0.4)


5000.0

fluids.core.Drag(F, A, V, rho)
Calculates drag coefficient Cd for a given drag force F, projected area A, characteristic velocity V, and density
rho.
𝐹𝑑
𝐶𝐷 =
𝐴 · 12 𝜌𝑉 2

Parameters
F [float] Drag force, [N]
A [float] Projected area, [m^2]
V [float] Characteristic velocity, [m/s]
rho [float] Density, [kg/m^3]
Returns
Cd [float] Drag coefficient, [-]

Notes

Used in flow around objects, or objects flowing within a fluid.


Drag forces
𝐶𝐷 =
Projected area · Velocity head

References

[1], [2]

Examples

>>> Drag(1000, 0.0001, 5, 2000)


400.0

fluids.core.Eckert(V, Cp, dT )
Calculates Eckert number or Ec for a fluid of velocity V with a heat capacity Cp, between two temperature given
as dT.
𝑉2
𝐸𝑐 =
𝐶𝑝 ∆𝑇

Parameters
V [float] Velocity of fluid, [m/s]

2.4. Dimensionless numbers (fluids.core) 89


Fluids Documentation, Release 1.0.21

Cp [float] Heat capacity of the fluid, [J/kg/K]


dT [float] Temperature difference, [K]
Returns
Ec [float] Eckert number []

Notes

Used in certain heat transfer calculations. Fairly rare.


Kinetic energy
𝐸𝑐 =
Enthalpy difference

References

[1]

Examples

>>> Eckert(10, 2000., 25.)


0.002

fluids.core.Euler(dP, rho, V )
Calculates Euler number or Eu for a fluid of velocity V and density rho experiencing a pressure drop dP.

∆𝑃
𝐸𝑢 =
𝜌𝑉 2
Parameters
dP [float] Pressure drop experience by the fluid, [Pa]
rho [float] Density of the fluid, [kg/m^3]
V [float] Velocity of fluid, [m/s]
Returns
Eu [float] Euler number []

Notes

Used in pressure drop calculations. Rarely, this number is divided by two. Named after Leonhard Euler applied
calculus to fluid dynamics.
Pressure drop
𝐸𝑢 =
2 · velocity head

90 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

References

[1], [2]

Examples

>>> Euler(1E5, 1000., 4)


6.25

fluids.core.Fourier_heat(t, L, rho=None, Cp=None, k=None, alpha=None)


Calculates heat transfer Fourier number or Fo for a specified time t, characteristic length L, and specified prop-
erties for the given fluid.

𝑘𝑡 𝛼𝑡
𝐹𝑜 = = 2
𝐶𝑝 𝜌𝐿2 𝐿

Inputs either of any of the following sets:


• t, L, density rho, heat capacity Cp, and thermal conductivity k
• t, L, and thermal diffusivity alpha

Parameters
t [float] time [s]
L [float] Characteristic length [m]
rho [float, optional] Density, [kg/m^3]
Cp [float, optional] Heat capacity, [J/kg/K]
k [float, optional] Thermal conductivity, [W/m/K]
alpha [float, optional] Thermal diffusivity, [m^2/s]
Returns
Fo [float] Fourier number (heat) []

Notes

Heat conduction rate


𝐹𝑜 =
Rate of thermal energy storage in a solid
An error is raised if none of the required input sets are provided.

References

[1], [2]

2.4. Dimensionless numbers (fluids.core) 91


Fluids Documentation, Release 1.0.21

Examples

>>> Fourier_heat(t=1.5, L=2, rho=1000., Cp=4000., k=0.6)


5.625e-08
>>> Fourier_heat(1.5, 2, alpha=1E-7)
3.75e-08

fluids.core.Fourier_mass(t, L, D)
Calculates mass transfer Fourier number or Fo for a specified time t, characteristic length L, and diffusion coef-
ficient D.
𝐷𝑡
𝐹𝑜 =
𝐿2
Parameters
t [float] time [s]
L [float] Characteristic length [m]
D [float] Diffusivity of a species, [m^2/s]
Returns
Fo [float] Fourier number (mass) []

Notes

Diffusive transport rate


𝐹𝑜 =
Storage rate

References

[1]

Examples

>>> Fourier_mass(t=1.5, L=2, D=1E-9)


3.7500000000000005e-10

fluids.core.Froude(V, L, g=9.80665, squared=False)


Calculates Froude number Fr for velocity V and geometric length L. If desired, gravity can be specified as well.
Normally the function returns the result of the equation below; Froude number is also often said to be defined as
the square of the equation below.

𝑉
𝐹𝑟 = √
𝑔𝐿
Parameters
V [float] Velocity of the particle or fluid, [m/s]
L [float] Characteristic length, no typical definition [m]
g [float, optional] Acceleration due to gravity, [m/s^2]
squared [bool, optional] Whether to return the squared form of Froude number

92 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

Returns
Fr [float] Froude number, [-]

Notes

Many alternate definitions including density ratios have been used.


Inertial Force
𝐹𝑟 =
Gravity Force

References

[1], [2]

Examples

>>> Froude(1.83, L=2., g=1.63)


1.0135432593877318
>>> Froude(1.83, L=2., squared=True)
0.17074638128208924

fluids.core.Froude_densimetric(V, L, rho1, rho2, heavy=True, g=9.80665)


Calculates the densimetric Froude number 𝐹 𝑟𝑑𝑒𝑛 for velocity V geometric length L, heavier fluid density rho1,
and lighter fluid density rho2. If desired, gravity can be specified as well. Depending on the application, this
dimensionless number may be defined with the heavy phase or the light phase density in the numerator of the
square root. For some applications, both need to be calculated. The default is to calculate with the heavy liquid
ensity on top; set heavy to False to reverse this.
√︂
𝑉 𝜌(1 or 2)
𝐹𝑟 = √
𝑔𝐿 𝜌1 − 𝜌2

Parameters
V [float] Velocity of the specified phase, [m/s]
L [float] Characteristic length, no typical definition [m]
rho1 [float] Density of the heavier phase, [kg/m^3]
rho2 [float] Density of the lighter phase, [kg/m^3]
heavy [bool, optional] Whether or not the density used in the numerator is the heavy phase or
the light phase, [-]
g [float, optional] Acceleration due to gravity, [m/s^2]
Returns
Fr_den [float] Densimetric Froude number, [-]

2.4. Dimensionless numbers (fluids.core) 93


Fluids Documentation, Release 1.0.21

Notes

Many alternate definitions including density ratios have been used.


Inertial Force
𝐹𝑟 =
Gravity Force
Where the gravity force is reduced by the relative densities of one fluid in another.
Note that an Exception will be raised if rho1 > rho2, as the square root becomes negative.

References

[1]

Examples

>>> Froude_densimetric(1.83, L=2., rho1=800, rho2=1.2, g=9.81)


0.4134543386272418
>>> Froude_densimetric(1.83, L=2., rho1=800, rho2=1.2, g=9.81, heavy=False)
0.016013017679205096

fluids.core.Graetz_heat(V, D, x, rho=None, Cp=None, k=None, alpha=None)


Calculates Graetz number or Gz for a specified velocity V, diameter D, axial distance x, and specified properties
for the given fluid.

𝑉 𝐷 2 · 𝐶𝑝 𝜌 𝑉 𝐷2
𝐺𝑧 = =
𝑥·𝑘 𝑥𝛼
Inputs either of any of the following sets:
• V, D, x, density rho, heat capacity Cp, and thermal conductivity k
• V, D, x, and thermal diffusivity alpha

Parameters
V [float] Velocity, [m/s]
D [float] Diameter [m]
x [float] Axial distance [m]
rho [float, optional] Density, [kg/m^3]
Cp [float, optional] Heat capacity, [J/kg/K]
k [float, optional] Thermal conductivity, [W/m/K]
alpha [float, optional] Thermal diffusivity, [m^2/s]
Returns
Gz [float] Graetz number []

94 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

Notes

Time for radial heat diffusion in a fluid by conduction


𝐺𝑧 =
Time taken by fluid to reach distance x
𝐷
𝐺𝑧 = 𝑅𝑒𝑃 𝑟
𝑥
An error is raised if none of the required input sets are provided.

References

[1]

Examples

>>> Graetz_heat(1.5, 0.25, 5, 800., 2200., 0.6)


55000.0
>>> Graetz_heat(1.5, 0.25, 5, alpha=1E-7)
187500.0

fluids.core.Grashof(L, beta, T1, T2=0, rho=None, mu=None, nu=None, g=9.80665)


Calculates Grashof number or Gr for a fluid with the given properties, temperature difference, and characteristic
length.

𝑔𝛽(𝑇𝑠 − 𝑇∞ )𝐿3 𝑔𝛽(𝑇𝑠 − 𝑇∞ )𝐿3 𝜌2


𝐺𝑟 = 2
=
𝜈 𝜇2
Inputs either of any of the following sets:
• L, beta, T1 and T2, and density rho and kinematic viscosity mu
• L, beta, T1 and T2, and dynamic viscosity nu

Parameters
L [float] Characteristic length [m]
beta [float] Volumetric thermal expansion coefficient [1/K]
T1 [float] Temperature 1, usually a film temperature [K]
T2 [float, optional] Temperature 2, usually a bulk temperature (or 0 if only a difference is pro-
vided to the function) [K]
rho [float, optional] Density, [kg/m^3]
mu [float, optional] Dynamic viscosity, [Pa*s]
nu [float, optional] Kinematic viscosity, [m^2/s]
g [float, optional] Acceleration due to gravity, [m/s^2]
Returns
Gr [float] Grashof number []

2.4. Dimensionless numbers (fluids.core) 95


Fluids Documentation, Release 1.0.21

Notes

Buoyancy forces
𝐺𝑟 =
Viscous forces
An error is raised if none of the required input sets are provided. Used in free convection problems only.

References

[1], [2]

Examples

Example 4 of [1], p. 1-21 (matches):

>>> Grashof(L=0.9144, beta=0.000933, T1=178.2, rho=1.1613, mu=1.9E-5)


4656936556.178915
>>> Grashof(L=0.9144, beta=0.000933, T1=378.2, T2=200, nu=1.636e-05)
4657491516.530312

fluids.core.Hagen(Re, fd)
Calculates Hagen number, Hg, for a fluid with the given Reynolds number and friction factor.

𝑓𝑑 2 1 ∆𝑃 𝐷3 𝜌∆𝑃 𝐷3
Hg = 𝑅𝑒 = 2
=
2 𝜌 ∆𝑧 𝜈 𝜇2 ∆𝑧
Parameters
Re [float] Reynolds number [-]
fd [float, optional] Darcy friction factor, [-]
Returns
Hg [float] Hagen number, [-]

Notes

Introduced in [1]; further use of it is mostly of the correlations introduced in [1].


Notable for use use in correlations, because it does not have any dependence on velocity.
This expression is useful when designing backwards with a pressure drop spec already known.

References

[1], [2], [3]

96 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

Examples

Example from [3]:

>>> Hagen(Re=2610, fd=1.935235)


6591507.17175

fluids.core.Jakob(Cp, Hvap, Te)


Calculates Jakob number or Ja for a boiling fluid with sensible heat capacity Cp, enthalpy of vaporization Hvap,
and boiling at Te degrees above its saturation boiling point.

𝐶𝑃 ∆𝑇𝑒
𝐽𝑎 =
∆𝐻𝑣𝑎𝑝

Parameters
Cp [float] Heat capacity of the fluid, [J/kg/K]
Hvap [float] Enthalpy of vaporization of the fluid at its saturation temperature [J/kg]
Te [float] Temperature difference above the fluid’s saturation boiling temperature, [K]
Returns
Ja [float] Jakob number []

Notes

Used in boiling heat transfer analysis. Fairly rare.

∆Sensible heat
𝐽𝑎 =
∆Latent heat

References

[1], [2]

Examples

>>> Jakob(4000., 2E6, 10.)


0.02

fluids.core.Knudsen(path, L)
Calculates Knudsen number or Kn for a fluid with mean free path path and for a characteristic length L.

𝜆
𝐾𝑛 =
𝐿
Parameters
path [float] Mean free path between molecular collisions, [m]
L [float] Characteristic length, [m]
Returns
Kn [float] Knudsen number []

2.4. Dimensionless numbers (fluids.core) 97


Fluids Documentation, Release 1.0.21

Notes

Used in mass transfer calculations.


Mean free path length
𝐾𝑛 =
Characteristic length

References

[1], [2]

Examples

>>> Knudsen(1e-10, .001)


1e-07

fluids.core.Lewis(D=None, alpha=None, Cp=None, k=None, rho=None)


Calculates Lewis number or Le for a fluid with the given parameters.

𝑘 𝛼
𝐿𝑒 = =
𝜌𝐶𝑝 𝐷 𝐷

Inputs can be either of the following sets:


• Diffusivity and Thermal diffusivity
• Diffusivity, heat capacity, thermal conductivity, and density

Parameters
D [float] Diffusivity of a species, [m^2/s]
alpha [float, optional] Thermal diffusivity, [m^2/s]
Cp [float, optional] Heat capacity, [J/kg/K]
k [float, optional] Thermal conductivity, [W/m/K]
rho [float, optional] Density, [kg/m^3]
Returns
Le [float] Lewis number []

Notes

Thermal diffusivity 𝑆𝑐
𝐿𝑒 = =
Mass diffusivity 𝑃𝑟
An error is raised if none of the required input sets are provided.

98 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

References

[1], [2], [3]

Examples

>>> Lewis(D=22.6E-6, alpha=19.1E-6)


0.8451327433628318
>>> Lewis(D=22.6E-6, rho=800., k=.2, Cp=2200)
0.00502815768302494

fluids.core.Mach(V, c)
Calculates Mach number or Ma for a fluid of velocity V with speed of sound c.

𝑉
𝑀𝑎 =
𝑐
Parameters
V [float] Velocity of fluid, [m/s]
c [float] Speed of sound in fluid, [m/s]
Returns
Ma [float] Mach number []

Notes

Used in compressible flow calculations.


fluid velocity
𝑀𝑎 =
sonic velocity

References

[1], [2]

Examples

>>> Mach(33., 330)


0.1

fluids.core.Morton(rhol, rhog, mul, sigma, g=9.80665)


Calculates Morton number or Mo for a liquid and vapor with the specified properties, under the influence of
gravitational force g.

𝑔𝜇4𝑙 (𝜌𝑙 − 𝜌𝑔 )
𝑀𝑜 =
𝜌2𝑙 𝜎 3

Parameters
rhol [float] Density of liquid phase, [kg/m^3]
rhog [float] Density of gas phase, [kg/m^3]

2.4. Dimensionless numbers (fluids.core) 99


Fluids Documentation, Release 1.0.21

mul [float] Viscosity of liquid phase, [Pa*s]


sigma [float] Surface tension between liquid-gas phase, [N/m]
g [float, optional] Acceleration due to gravity, [m/s^2]
Returns
Mo [float] Morton number, [-]

Notes

Used in modeling bubbles in liquid.

References

[1], [2]

Examples

>>> Morton(1077.0, 76.5, 4.27E-3, 0.023)


2.311183104430743e-07

fluids.core.Nusselt(h, L, k)
Calculates Nusselt number Nu for a heat transfer coefficient h, characteristic length L, and thermal conductivity
k.
ℎ𝐿
𝑁𝑢 =
𝑘
Parameters
h [float] Heat transfer coefficient, [W/m^2/K]
L [float] Characteristic length, no typical definition [m]
k [float] Thermal conductivity of fluid [W/m/K]
Returns
Nu [float] Nusselt number, [-]

Notes

Do not confuse k, the thermal conductivity of the fluid, with that of within a solid object associated with!
Convective heat transfer
𝑁𝑢 =
Conductive heat transfer

100 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

References

[1], [2]

Examples

>>> Nusselt(1000., 1.2, 300.)


4.0
>>> Nusselt(10000., .01, 4000.)
0.025

fluids.core.Ohnesorge(L, rho, mu, sigma)


Calculates Ohnesorge number, Oh, for a fluid with the given characteristic length, density, viscosity, and surface
tension.
𝜇
Oh = √
𝜌𝜎𝐿
Parameters
L [float] Characteristic length [m]
rho [float] Density of fluid, [kg/m^3]
mu [float] Viscosity of fluid, [Pa*s]
sigma [float] Surface tension, [N/m]
Returns
Oh [float] Ohnesorge number []

Notes

Often used in spray calculations. Sometimes given the symbol Z.



We viscous forces
𝑂ℎ = =√
Re Inertia · Surface tension

References

[1]

Examples

>>> Ohnesorge(1E-4, 1000., 1E-3, 1E-1)


0.01

fluids.core.Peclet_heat(V, L, rho=None, Cp=None, k=None, alpha=None)


Calculates heat transfer Peclet number or Pe for a specified velocity V, characteristic length L, and specified
properties for the given fluid.
𝑉 𝐿𝜌𝐶𝑝 𝐿𝑉
𝑃𝑒 = =
𝑘 𝛼
Inputs either of any of the following sets:

2.4. Dimensionless numbers (fluids.core) 101


Fluids Documentation, Release 1.0.21

• V, L, density rho, heat capacity Cp, and thermal conductivity k


• V, L, and thermal diffusivity alpha

Parameters
V [float] Velocity [m/s]
L [float] Characteristic length [m]
rho [float, optional] Density, [kg/m^3]
Cp [float, optional] Heat capacity, [J/kg/K]
k [float, optional] Thermal conductivity, [W/m/K]
alpha [float, optional] Thermal diffusivity, [m^2/s]
Returns
Pe [float] Peclet number (heat) []

Notes

Bulk heat transfer


𝑃𝑒 =
Conduction heat transfer
An error is raised if none of the required input sets are provided.

References

[1], [2]

Examples

>>> Peclet_heat(1.5, 2, 1000., 4000., 0.6)


20000000.0
>>> Peclet_heat(1.5, 2, alpha=1E-7)
30000000.0

fluids.core.Peclet_mass(V, L, D)
Calculates mass transfer Peclet number or Pe for a specified velocity V, characteristic length L, and diffusion
coefficient D.
𝐿𝑉
𝑃𝑒 =
𝐷
Parameters
V [float] Velocity [m/s]
L [float] Characteristic length [m]
D [float] Diffusivity of a species, [m^2/s]
Returns
Pe [float] Peclet number (mass) []

102 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

Notes

Advective transport rate


𝑃𝑒 =
Diffusive transport rate

References

[1]

Examples

>>> Peclet_mass(1.5, 2, 1E-9)


3000000000.0

fluids.core.Power_number(P, L, N, rho)
Calculates power number, Po, for an agitator applying a specified power P with a characteristic length L, rotational
speed N, to a fluid with a specified density rho.

𝑃
𝑃𝑜 =
𝜌𝑁 3 𝐷5
Parameters
P [float] Power applied, [W]
L [float] Characteristic length, typically agitator diameter [m]
N [float] Speed [revolutions/second]
rho [float] Density of fluid, [kg/m^3]
Returns
Po [float] Power number []

Notes

Used in mixing calculations.


Power
𝑃𝑜 =
Rotational inertia

References

[1], [2]

2.4. Dimensionless numbers (fluids.core) 103


Fluids Documentation, Release 1.0.21

Examples

>>> Power_number(P=180, L=0.01, N=2.5, rho=800.)


144000000.0

fluids.core.Prandtl(Cp=None, k=None, mu=None, nu=None, rho=None, alpha=None)


Calculates Prandtl number or Pr for a fluid with the given parameters.

𝐶𝑝 𝜇 𝜈 𝐶𝑝 𝜌𝜈
𝑃𝑟 = = =
𝑘 𝛼 𝑘
Inputs can be any of the following sets:
• Heat capacity, dynamic viscosity, and thermal conductivity
• Thermal diffusivity and kinematic viscosity
• Heat capacity, kinematic viscosity, thermal conductivity, and density

Parameters
Cp [float] Heat capacity, [J/kg/K]
k [float] Thermal conductivity, [W/m/K]
mu [float, optional] Dynamic viscosity, [Pa*s]
nu [float, optional] Kinematic viscosity, [m^2/s]
rho [float] Density, [kg/m^3]
alpha [float] Thermal diffusivity, [m^2/s]
Returns
Pr [float] Prandtl number []

Notes

kinematic viscosity momentum diffusivity


𝑃𝑟 = =
thermal diffusivity thermal diffusivity
An error is raised if none of the required input sets are provided.

References

[1], [2], [3]

Examples

>>> Prandtl(Cp=1637., k=0.010, mu=4.61E-6)


0.754657
>>> Prandtl(Cp=1637., k=0.010, nu=6.4E-7, rho=7.1)
0.7438528
>>> Prandtl(nu=6.3E-7, alpha=9E-7)
0.7000000000000001

104 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

fluids.core.Rayleigh(Pr, Gr)
Calculates Rayleigh number or Ra using Prandtl number Pr and Grashof number Gr for a fluid with the given
properties, temperature difference, and characteristic length used to calculate Gr and Pr.

𝑅𝑎 = 𝑃 𝑟𝐺𝑟

Parameters
Pr [float] Prandtl number []
Gr [float] Grashof number []
Returns
Ra [float] Rayleigh number []

Notes

Used in free convection problems only.

References

[1], [2]

Examples

>>> Rayleigh(1.2, 4.6E9)


5520000000.0

fluids.core.relative_roughness(D, roughness=1.52e-06)
Calculates relative roughness eD using a diameter and the roughness of the material of the wall. Default rough-
ness is that of steel.
𝜖
𝑒𝐷 =
𝐷
Parameters
D [float] Diameter of pipe, [m]
roughness [float, optional] Roughness of pipe wall [m]
Returns
eD [float] Relative Roughness, [-]

References

[1], [2]

2.4. Dimensionless numbers (fluids.core) 105


Fluids Documentation, Release 1.0.21

Examples

>>> relative_roughness(0.5, 1E-4)


0.0002

fluids.core.Reynolds(V, D, rho=None, mu=None, nu=None)


Calculates Reynolds number or Re for a fluid with the given properties for the specified velocity and diameter.

𝐷·𝑉 𝜌𝑉 𝐷
𝑅𝑒 = =
𝜈 𝜇
Inputs either of any of the following sets:
• V, D, density rho and kinematic viscosity mu
• V, D, and dynamic viscosity nu

Parameters
V [float] Velocity [m/s]
D [float] Diameter [m]
rho [float, optional] Density, [kg/m^3]
mu [float, optional] Dynamic viscosity, [Pa*s]
nu [float, optional] Kinematic viscosity, [m^2/s]
Returns
Re [float] Reynolds number []

Notes

Momentum
𝑅𝑒 =
Viscosity
An error is raised if none of the required input sets are provided.

References

[1], [2]

Examples

>>> Reynolds(2.5, 0.25, 1.1613, 1.9E-5)


38200.65789473684
>>> Reynolds(2.5, 0.25, nu=1.636e-05)
38202.93398533008

fluids.core.Schmidt(D, mu=None, nu=None, rho=None)


Calculates Schmidt number or Sc for a fluid with the given parameters.
𝜇 𝜈
𝑆𝑐 = =
𝐷𝜌 𝐷
Inputs can be any of the following sets:

106 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

• Diffusivity, dynamic viscosity, and density


• Diffusivity and kinematic viscosity

Parameters
D [float] Diffusivity of a species, [m^2/s]
mu [float, optional] Dynamic viscosity, [Pa*s]
nu [float, optional] Kinematic viscosity, [m^2/s]
rho [float, optional] Density, [kg/m^3]
Returns
Sc [float] Schmidt number []

Notes

kinematic viscosity viscous diffusivity


𝑆𝑐 = =
molecular diffusivity species diffusivity
An error is raised if none of the required input sets are provided.

References

[1], [2]

Examples

>>> Schmidt(D=2E-6, mu=4.61E-6, rho=800)


0.00288125
>>> Schmidt(D=1E-9, nu=6E-7)
599.9999999999999

fluids.core.Sherwood(K, L, D)
Calculates Sherwood number Sh for a mass transfer coefficient K, characteristic length L, and diffusivity D.

𝐾𝐿
𝑆ℎ =
𝐷
Parameters
K [float] Mass transfer coefficient, [m/s]
L [float] Characteristic length, no typical definition [m]
D [float] Diffusivity of a species [m/s^2]
Returns
Sh [float] Sherwood number, [-]

2.4. Dimensionless numbers (fluids.core) 107


Fluids Documentation, Release 1.0.21

Notes

Mass transfer by convection 𝐾


𝑆ℎ = =
Mass transfer by diffusion 𝐷/𝐿

References

[1]

Examples

>>> Sherwood(1000., 1.2, 300.)


4.0

fluids.core.Stanton(h, V, rho, Cp)


Calculates Stanton number or St for a specified heat transfer coefficient h, velocity V, density rho, and heat
capacity Cp [1] [2].

𝑆𝑡 =
𝑉 𝜌𝐶𝑝
Parameters
h [float] Heat transfer coefficient, [W/m^2/K]
V [float] Velocity, [m/s]
rho [float] Density, [kg/m^3]
Cp [float] Heat capacity, [J/kg/K]
Returns
St [float] Stanton number []

Notes

Heat transfer coefficient


𝑆𝑡 =
Thermal capacity

References

[1], [2]

Examples

>>> Stanton(5000, 5, 800, 2000.)


0.000625

fluids.core.Stokes_number(V, Dp, D, rhop, mu)


Calculates Stokes Number for a given characteristic velocity V, particle diameter Dp, characteristic diameter D,
particle density rhop, and fluid viscosity mu.
𝜌𝑝 𝑉 𝐷𝑝2
Stk =
18𝜇𝑓 𝐷

108 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

Parameters
V [float] Characteristic velocity (often superficial), [m/s]
Dp [float] Particle diameter, [m]
D [float] Characteristic diameter (ex demister wire diameter or cyclone diameter), [m]
rhop [float] Particle density, [kg/m^3]
mu [float] Fluid viscosity, [Pa*s]
Returns
Stk [float] Stokes numer, [-]

Notes

Used in droplet impaction or collection studies.

References

[1], [2]

Examples

>>> Stokes_number(V=0.9, Dp=1E-5, D=1E-3, rhop=1000, mu=1E-5)


0.5

fluids.core.Strouhal(f, L, V )
Calculates Strouhal number St for a characteristic frequency f, characteristic length L, and velocity V.

𝑓𝐿
𝑆𝑡 =
𝑉
Parameters
f [float] Characteristic frequency, usually that of vortex shedding, [Hz]
L [float] Characteristic length, [m]
V [float] Velocity of the fluid, [m/s]
Returns
St [float] Strouhal number, [-]

Notes

Sometimes abbreviated to S or Sr.


Characteristic flow time
𝑆𝑡 =
Period of oscillation

2.4. Dimensionless numbers (fluids.core) 109


Fluids Documentation, Release 1.0.21

References

[1], [2]

Examples

>>> Strouhal(8, 2., 4.)


4.0

fluids.core.Suratman(L, rho, mu, sigma)


Calculates Suratman number, Su, for a fluid with the given characteristic length, density, viscosity, and surface
tension.
𝜌𝜎𝐿
Su =
𝜇2
Parameters
L [float] Characteristic length [m]
rho [float] Density of fluid, [kg/m^3]
mu [float] Viscosity of fluid, [Pa*s]
sigma [float] Surface tension, [N/m]
Returns
Su [float] Suratman number []

Notes

Also known as Laplace number. Used in two-phase flow, especially the bubbly-slug regime. No confusion
regarding the definition of this group has been observed.

Re2 Inertia · Surface tension


Su = =
We (viscous forces)2
The oldest reference to this group found by the author is in 1963, from [2].

References

[1], [2]

Examples

>>> Suratman(1E-4, 1000., 1E-3, 1E-1)


10000.0

fluids.core.Weber(V, L, rho, sigma)


Calculates Weber number, We, for a fluid with the given density, surface tension, velocity, and geometric param-
eter (usually diameter of bubble).

𝑉 2 𝐿𝜌
𝑊𝑒 =
𝜎

110 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

Parameters
V [float] Velocity of fluid, [m/s]
L [float] Characteristic length, typically bubble diameter [m]
rho [float] Density of fluid, [kg/m^3]
sigma [float] Surface tension, [N/m]
Returns
We [float] Weber number []

Notes

Used in bubble calculations.


inertial force
𝑊𝑒 =
surface tension force

References

[1], [2], [3]

Examples

>>> Weber(V=0.18, L=0.001, rho=900., sigma=0.01)


2.916

2.4.2 Loss Coefficient Converters

fluids.core.K_from_f(fd, L, D)
Calculates loss coefficient, K, for a given section of pipe at a specified friction factor.

𝐾 = 𝑓𝑑 𝐿/𝐷

Parameters
fd [float] friction factor of pipe, []
L [float] Length of pipe, [m]
D [float] Inner diameter of pipe, [m]
Returns
K [float] Loss coefficient, []

2.4. Dimensionless numbers (fluids.core) 111


Fluids Documentation, Release 1.0.21

Notes

For fittings with a specified L/D ratio, use D = 1 and set L to specified L/D ratio.

Examples

>>> K_from_f(fd=0.018, L=100., D=.3)


6.0

fluids.core.K_from_L_equiv(L_D, fd=0.015)
Calculates loss coefficient, for a given equivalent length (L/D).

𝐿
𝐾 = 𝑓𝑑
𝐷
Parameters
L_D [float] Length over diameter, []
fd [float, optional] Darcy friction factor, [-]
Returns
K [float] Loss coefficient, []

Notes

Almost identical to K_from_f, but with a default friction factor for fully turbulent flow in steel pipes.

Examples

>>> K_from_L_equiv(240)
3.5999999999999996

fluids.core.L_equiv_from_K(K, fd=0.015)
Calculates equivalent length of pipe (L/D), for a given loss coefficient.

𝐿 𝐾
=
𝐷 𝑓𝑑
Parameters
K [float] Loss coefficient, [-]
fd [float, optional] Darcy friction factor, [-]
Returns
L_D [float] Length over diameter, [-]

112 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

Notes

Assumes a default friction factor for fully turbulent flow in steel pipes.

Examples

>>> L_equiv_from_K(3.6)
240.00000000000003

fluids.core.L_from_K(K, D, fd=0.015)
Calculates the length of straight pipe at a specified friction factor required to produce a given loss coefficient K.

𝐾𝐷
𝐿=
𝑓𝑑
Parameters
K [float] Loss coefficient, []
D [float] Inner diameter of pipe, [m]
fd [float] friction factor of pipe, []
Returns
L [float] Length of pipe, [m]

Examples

>>> L_from_K(K=6, D=.3, fd=0.018)


100.0

fluids.core.dP_from_K(K, rho, V )
Calculates pressure drop, for a given loss coefficient, at a specified density and velocity.

𝑑𝑃 = 0.5𝐾𝜌𝑉 2

Parameters
K [float] Loss coefficient, []
rho [float] Density of fluid, [kg/m^3]
V [float] Velocity of fluid in pipe, [m/s]
Returns
dP [float] Pressure drop, [Pa]

2.4. Dimensionless numbers (fluids.core) 113


Fluids Documentation, Release 1.0.21

Notes

Loss coefficient K is usually the sum of several factors, including the friction factor.

Examples

>>> dP_from_K(K=10, rho=1000, V=3)


45000.0

fluids.core.head_from_K(K, V, g=9.80665)
Calculates head loss, for a given loss coefficient, at a specified velocity.

𝐾𝑉 2
head =
2𝑔
Parameters
K [float] Loss coefficient, []
V [float] Velocity of fluid in pipe, [m/s]
g [float, optional] Acceleration due to gravity, [m/s^2]
Returns
head [float] Head loss, [m]

Notes

Loss coefficient K is usually the sum of several factors, including the friction factor.

Examples

>>> head_from_K(K=10, V=1.5)


1.1471807396001694

fluids.core.head_from_P(P, rho, g=9.80665)


Calculates head for a fluid of specified density at specified pressure.

𝑃
head =
𝜌𝑔
Parameters
P [float] Pressure fluid in pipe, [Pa]
rho [float] Density of fluid, [kg/m^3]
g [float, optional] Acceleration due to gravity, [m/s^2]
Returns
head [float] Head, [m]

114 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

Notes

By definition. Head varies with location, inversely proportional to the increase in gravitational constant.

Examples

>>> head_from_P(P=98066.5, rho=1000)


10.000000000000002

fluids.core.f_from_K(K, L, D)
Calculates friction factor, fd, from a loss coefficient, K, for a given section of pipe.

𝐾𝐷
𝑓𝑑 =
𝐿
Parameters
K [float] Loss coefficient, []
L [float] Length of pipe, [m]
D [float] Inner diameter of pipe, [m]
Returns
fd [float] Darcy friction factor of pipe, [-]

Notes

This can be useful to blend fittings at specific locations in a pipe into a pressure drop which is evenly distributed
along a pipe.

Examples

>>> f_from_K(K=0.6, L=100., D=.3)


0.0018

fluids.core.P_from_head(head, rho, g=9.80665)


Calculates head for a fluid of specified density at specified pressure.

𝑃 = 𝜌𝑔 · head

Parameters
head [float] Head, [m]
rho [float] Density of fluid, [kg/m^3]
g [float, optional] Acceleration due to gravity, [m/s^2]
Returns
P [float] Pressure fluid in pipe, [Pa]

2.4. Dimensionless numbers (fluids.core) 115


Fluids Documentation, Release 1.0.21

Examples

>>> P_from_head(head=5., rho=800.)


39226.6

2.4.3 Temperature Conversions

These functions used to be part of SciPy, but were removed in favor of a slower function convert_temperature which
removes code duplication but doesn’t have the same convenience or easy to remember signature.
fluids.core.C2K(C)
Convert Celsius to Kelvin.
Parameters
C [float] Celsius temperature to be converted, [degC]
Returns
K [float] Equivalent Kelvin temperature, [K]

Notes

Computes K = C + zero_Celsius where zero_Celsius = 273.15, i.e., (the absolute value of) temperature “ab-
solute zero” as measured in Celsius.

Examples

>>> C2K(-40)
233.14999999999998

fluids.core.K2C(K)
Convert Kelvin to Celsius.
Parameters
K [float] Kelvin temperature to be converted.
Returns
C [float] Equivalent Celsius temperature.

Notes

Computes C = K - zero_Celsius where zero_Celsius = 273.15, i.e., (the absolute value of) temperature “ab-
solute zero” as measured in Celsius.

116 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

Examples

>>> K2C(233.15)
-39.99999999999997

fluids.core.F2C(F)
Convert Fahrenheit to Celsius.
Parameters
F [float] Fahrenheit temperature to be converted.
Returns
C [float] Equivalent Celsius temperature.

Notes

Computes C = (F - 32) / 1.8.

Examples

>>> F2C(-40.0)
-40.0

fluids.core.C2F(C)
Convert Celsius to Fahrenheit.
Parameters
C [float] Celsius temperature to be converted.
Returns
F [float] Equivalent Fahrenheit temperature.

Notes

Computes F = 1.8 * C + 32.

Examples

>>> C2F(-40.0)
-40.0

fluids.core.F2K(F)
Convert Fahrenheit to Kelvin.
Parameters
F [float] Fahrenheit temperature to be converted.
Returns
K [float] Equivalent Kelvin temperature.

2.4. Dimensionless numbers (fluids.core) 117


Fluids Documentation, Release 1.0.21

Notes

Computes K = (F - 32)/1.8 + zero_Celsius where zero_Celsius = 273.15, i.e., (the absolute value of)
temperature “absolute zero” as measured in Celsius.

Examples

>>> F2K(-40)
233.14999999999998

fluids.core.K2F(K)
Convert Kelvin to Fahrenheit.
Parameters
K [float] Kelvin temperature to be converted.
Returns
F [float] Equivalent Fahrenheit temperature.

Notes

Computes F = 1.8 * (K - zero_Celsius) + 32 where zero_Celsius = 273.15, i.e., (the absolute value of)
temperature “absolute zero” as measured in Celsius.

Examples

>>> K2F(233.15)
-39.99999999999996

fluids.core.C2R(C)
Convert Celsius to Rankine.
Parameters
C [float] Celsius temperature to be converted.
Returns
Ra [float] Equivalent Rankine temperature.

Notes

Computes Ra = 1.8 * (C + zero_Celsius) where zero_Celsius = 273.15, i.e., (the absolute value of) tem-
perature “absolute zero” as measured in Celsius.

118 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

Examples

>>> C2R(-40)
419.66999999999996

fluids.core.K2R(K)
Convert Kelvin to Rankine.
Parameters
K [float] Kelvin temperature to be converted.
Returns
Ra [float] Equivalent Rankine temperature.

Notes

Computes Ra = 1.8 * K.

Examples

>>> K2R(273.15)
491.66999999999996

fluids.core.F2R(F)
Convert Fahrenheit to Rankine.
Parameters
F [float] Fahrenheit temperature to be converted.
Returns
Ra [float] Equivalent Rankine temperature.

Notes

Computes Ra = F - 32 + 1.8 * zero_Celsius where zero_Celsius = 273.15, i.e., (the absolute value of)
temperature “absolute zero” as measured in Celsius.

Examples

>>> F2R(100)
559.67

fluids.core.R2C(Ra)
Convert Rankine to Celsius.
Parameters
Ra [float] Rankine temperature to be converted.
Returns
C [float] Equivalent Celsius temperature.

2.4. Dimensionless numbers (fluids.core) 119


Fluids Documentation, Release 1.0.21

Notes

Computes C = Ra / 1.8 - zero_Celsius where zero_Celsius = 273.15, i.e., (the absolute value of) temper-
ature “absolute zero” as measured in Celsius.

Examples

>>> R2C(459.67)
-17.777777777777743

fluids.core.R2K(Ra)
Convert Rankine to Kelvin.
Parameters
Ra [float] Rankine temperature to be converted.
Returns
K [float] Equivalent Kelvin temperature.

Notes

Computes K = Ra / 1.8.

Examples

>>> R2K(491.67)
273.15

fluids.core.R2F(Ra)
Convert Rankine to Fahrenheit.
Parameters
Ra [float] Rankine temperature to be converted.
Returns
F [float] Equivalent Fahrenheit temperature.

Notes

Computes F = Ra + 32 - 1.8 * zero_Celsius where zero_Celsius = 273.15, i.e., (the absolute value of)
temperature “absolute zero” as measured in Celsius.

120 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

Examples

>>> R2F(491.67)
32.00000000000006

2.4.4 Miscellaneous Functions

fluids.core.thermal_diffusivity(k, rho, Cp)


Calculates thermal diffusivity or alpha for a fluid with the given parameters.

𝑘
𝛼=
𝜌𝐶𝑝
Parameters
k [float] Thermal conductivity, [W/m/K]
rho [float] Density, [kg/m^3]
Cp [float] Heat capacity, [J/kg/K]
Returns
alpha [float] Thermal diffusivity, [m^2/s]

References

[1]

Examples

>>> thermal_diffusivity(k=0.02, rho=1., Cp=1000.)


2e-05

fluids.core.c_ideal_gas(T, k, MW )
Calculates speed of sound c in an ideal gas at temperature T.
√︀
𝑐= 𝑘𝑅𝑠𝑝𝑒𝑐𝑖𝑓 𝑖𝑐 𝑇

Parameters
T [float] Temperature of fluid, [K]
k [float] Isentropic exponent of fluid, [-]
MW [float] Molecular weight of fluid, [g/mol]
Returns
c [float] Speed of sound in fluid, [m/s]

2.4. Dimensionless numbers (fluids.core) 121


Fluids Documentation, Release 1.0.21

Notes

Used in compressible flow calculations. Note that the gas constant used is the specific gas constant:
1000
𝑅𝑠𝑝𝑒𝑐𝑖𝑓 𝑖𝑐 = 𝑅
𝑀𝑊

References

[1], [2]

Examples

>>> c_ideal_gas(T=303, k=1.4, MW=28.96)


348.9820953185441

fluids.core.nu_mu_converter(rho, mu=None, nu=None)


Calculates either kinematic or dynamic viscosity, depending on inputs. Used when one type of viscosity is known
as well as density, to obtain the other type. Raises an error if both types of viscosity or neither type of viscosity
is provided.
𝜇
𝜈=
𝜌

𝜇 = 𝜈𝜌
Parameters
rho [float] Density, [kg/m^3]
mu [float, optional] Dynamic viscosity, [Pa*s]
nu [float, optional] Kinematic viscosity, [m^2/s]
Returns
mu or nu [float] Dynamic viscosity, Pa*s or Kinematic viscosity, m^2/s

References

[1]

Examples

>>> nu_mu_converter(998., nu=1.0E-6)


0.000998

fluids.core.gravity(latitude, H)
Calculates local acceleration due to gravity g according to [1]. Uses latitude and height to calculate g.

𝑔 = 9.780356(1 + 0.0052885 sin2 𝜑 − 0.00000592 2𝜑) − 3.086 × 10−6 𝐻

Parameters
latitude [float] Degrees, [degrees]

122 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

H [float] Height above earth’s surface [m]


Returns
g [float] Acceleration due to gravity, [m/s^2]

Notes

Better models, such as EGM2008 exist.

References

[1]

Examples

>>> gravity(55, 1E4)


9.784151976863571

2.5 Drag and terminal velocity (fluids.drag)

This module contains correlations for the drag coefficient Cd of a particle moving in a fluid. Numerical solvers for
terminal velocity and an integrator for particle position over time are included also.
For reporting bugs, adding feature requests, or submitting pull requests, please use the GitHub issue tracker or contact
the author at Caleb.Andrew.Bell@gmail.com.

• Interfaces to Drag Models


• Drag Correlations

2.5.1 Interfaces to Drag Models

fluids.drag.drag_sphere(Re, Method=None)
This function handles calculation of drag coefficient on spheres. Twenty methods are available, all requiring only
the Reynolds number of the sphere. Most methods are valid from Re=0 to Re=200,000. A correlation will be
automatically selected if none is specified. If no correlation is selected, the following rules are used:
• If Re < 0.01, use Stoke’s solution.
• If 0.01 <= Re < 0.1, linearly combine ‘Barati’ with Stokes’s solution such that at Re = 0.1 the solution is
‘Barati’, and at Re = 0.01 the solution is ‘Stokes’.
• If 0.1 <= Re <= ~212963, use the ‘Barati’ solution.
• If ~212963 < Re <= 1E6, use the ‘Barati_high’ solution.
• For Re > 1E6, raises an exception; no valid results have been found.

Parameters

2.5. Drag and terminal velocity (fluids.drag) 123


Fluids Documentation, Release 1.0.21

Re [float] Particle Reynolds number of the sphere using the surrounding fluid density and vis-
cosity, [-]
Returns
Cd [float] Drag coefficient [-]
Other Parameters
Method [string, optional] A string of the function name to use, as in the dictionary
drag_sphere_correlations

Examples

>>> drag_sphere(200)
0.7682237950389874

fluids.drag.v_terminal(D, rhop, rho, mu, Method=None)


Calculates terminal velocity of a falling sphere using any drag coefficient method supported by drag_sphere.
The laminar solution for Re < 0.01 is first tried; if the resulting terminal velocity does not put it in the laminar
regime, a numerical solution is used.
√︃
4𝑔𝑑𝑝 (𝜌𝑝 − 𝜌𝑓 )
𝑣𝑡 =
3𝐶𝐷 𝜌𝑓

Parameters
D [float] Diameter of the sphere, [m]
rhop [float] Particle density, [kg/m^3]
rho [float] Density of the surrounding fluid, [kg/m^3]
mu [float] Viscosity of the surrounding fluid [Pa*s]
Method [string, optional] A string of the function name to use, as in the dictionary
drag_sphere_correlations
Returns
v_t [float] Terminal velocity of falling sphere [m/s]

Notes

As there are no correlations implemented for Re > 1E6, an error will be raised if the numerical solver seeks a
solution above that limit.
The laminar solution is given in [1] and is:

𝑔𝑑2𝑝 (𝜌𝑝 − 𝜌𝑓 )
𝑣𝑡 =
18𝜇𝑓

124 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

References

[1], [2]

Examples

>>> v_terminal(D=70E-6, rhop=2600., rho=1000., mu=1E-3)


0.004142497244531304

Example 7-1 in GPSA handbook, 13th edition:

>>> from scipy.constants import *


>>> v_terminal(D=150E-6, rhop=31.2*lb/foot**3, rho=2.07*lb/foot**3, mu=1.2e-05)/
˓→foot

0.4491992020345101

The answer reported there is 0.46 ft/sec.


fluids.drag.integrate_drag_sphere(D, rhop, rho, mu, t, V=0, Method=None, distance=False)
Integrates the velocity and distance traveled by a particle moving at a speed which will converge to its terminal
velocity.
Performs an integration of the following expression for acceleration:

𝑔(𝜌𝑝 − 𝜌𝑓 ) 3𝐶𝐷 𝜌𝑓 𝑢2
𝑎= −
𝜌𝑝 4𝐷𝜌𝑝

Parameters
D [float] Diameter of the sphere, [m]
rhop [float] Particle density, [kg/m^3]
rho [float] Density of the surrounding fluid, [kg/m^3]
mu [float] Viscosity of the surrounding fluid [Pa*s]
t [float] Time to integrate the particle to, [s]
V [float] Initial velocity of the particle, [m/s]
Method [string, optional] A string of the function name to use, as in the dictionary
drag_sphere_correlations
distance [bool, optional] Whether or not to calculate the distance traveled and return it as well
Returns
v [float] Velocity of falling sphere after time t [m/s]
x [float, returned only if distance == True] Distance traveled by the falling sphere in time t, [m]

2.5. Drag and terminal velocity (fluids.drag) 125


Fluids Documentation, Release 1.0.21

Notes

This can be relatively slow as drag correlations can be complex.


There are analytical solutions available for the Stokes law regime (Re < 0.3). They were obtained from Wolfram
Alpha. [1] was not used in the derivation, but also describes the derivation fully.
exp(−𝑎𝑡)(𝑉0 𝑎 + 𝑏(exp(𝑎𝑡) − 1))
𝑉 (𝑡) =
𝑎
exp(−𝑎𝑡) [𝑉0 𝑎(exp(𝑎𝑡) − 1) + 𝑏 exp(𝑎𝑡)(𝑎𝑡 − 1) + 𝑏]
𝑥(𝑡) =
𝑎2
18𝜇𝑓
𝑎= 2
𝐷 𝜌𝑝
𝑔(𝜌𝑝 − 𝜌𝑓 )
𝑏=
𝜌𝑝
The analytical solution will automatically be used if the initial and terminal velocity is show the particle’s be-
havior to be laminar. Note that this behavior requires that the terminal velocity of the particle be solved for - this
adds slight (1%) overhead for the cases where particles are not laminar.

References

[1]

Examples

>>> integrate_drag_sphere(D=0.001, rhop=2200., rho=1.2, mu=1.78E-5, t=0.5,


... V=30, distance=True)
(9.68646, 7.82945)

fluids.drag.time_v_terminal_Stokes(D, rhop, rho, mu, V0, tol=1e-14)


Calculates the time required for a particle in Stoke’s regime only to reach terminal velocity (approximately). An
infinitely long period is required theoretically, but with floating points, it is possible to calculate the time required
to come within a specified tol of that terminal velocity.
(︂ 2
𝐷 𝑔𝜌 − 𝐷2 𝑔𝜌𝑝 + 18𝜇𝑉𝑡𝑒𝑟𝑚
)︂
1
𝑡𝑡𝑒𝑟𝑚 = − ln 𝐷2 𝜌𝑝
18𝜇 𝐷2 𝑔𝜌 − 𝐷2 𝑔𝜌𝑝 + 18𝜇𝑉0
Parameters
D [float] Diameter of the sphere, [m]
rhop [float] Particle density, [kg/m^3]
rho [float] Density of the surrounding fluid, [kg/m^3]
mu [float] Viscosity of the surrounding fluid [Pa*s]
V0 [float] Initial velocity of the particle, [m/s]
tol [float, optional] How closely to approach the terminal velocity - the target velocity is the
terminal velocity multiplied by 1 (+/-) this, depending on if the particle is accelerating or
decelerating, [-]
Returns
t [float] Time for the particle to reach the terminal velocity to within the specified or an achiev-
able tolerance, [s]

126 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

Notes

The symbolic solution was obtained via Wolfram Alpha.


If a solution cannot be obtained due to floating point error at very high tolerance, an exception is raised - but first,
the tolerance is doubled, up to fifty times in an attempt to obtain the highest possible precision while sill giving
an answer. If at any point the tolerance is larger than 1%, an exception is also raised.

Examples

>>> time_v_terminal_Stokes(D=1e-7, rhop=2200., rho=1.2, mu=1.78E-5, V0=1)


3.1880031137871528e-06
>>> time_v_terminal_Stokes(D=1e-2, rhop=2200., rho=1.2, mu=1.78E-5, V0=1,
... tol=1e-30)
24800.636391801996

fluids.drag.drag_sphere_methods(Re, check_ranges=True)
This function returns a list of methods that can be used to calculate the drag coefficient of a sphere. Twenty one
methods are available, all requiring only the Reynolds number of the sphere. Most methods are valid from Re=0
to Re=200,000.
Parameters
Re [float] Particle Reynolds number of the sphere using the surrounding fluid density and vis-
cosity, [-]
check_ranges [bool, optional] Whether to return only correlations claiming to be valid for the
given Re or not, [-]
Returns
methods [list, only returned if AvailableMethods == True] List of methods which can be used
to calculate Cd with the given Re

Examples

>>> len(drag_sphere_methods(200))
20
>>> len(drag_sphere_methods(200000, check_ranges=False))
21
>>> len(drag_sphere_methods(200000, check_ranges=True))
5

2.5.2 Drag Correlations

fluids.drag.Stokes(Re)
Calculates drag coefficient of a smooth sphere using Stoke’s law.

𝐶𝐷 = 24/𝑅𝑒

Parameters
Re [float] Particle Reynolds number of the sphere using the surrounding fluid density and vis-
cosity, [-]

2.5. Drag and terminal velocity (fluids.drag) 127


Fluids Documentation, Release 1.0.21

Returns
Cd [float] Drag coefficient [-]

Notes

Range is Re <= 0.3

References

[1]

Examples

>>> Stokes(0.1)
240.0

fluids.drag.Barati(Re)
Calculates drag coefficient of a smooth sphere using the method in [1].

𝐶𝐷 = 5.4856 × 109 tanh(4.3774 × 10−9 /𝑅𝑒) + 0.0709 tanh(700.6574/𝑅𝑒) + 0.3894 tanh(74.1539/𝑅𝑒) − 0.1198 tanh(7429

Parameters
Re [float] Particle Reynolds number of the sphere using the surrounding fluid density and vis-
cosity, [-]
Returns
Cd [float] Drag coefficient [-]

Notes

Range is Re <= 2E5

References

[1]

Examples

Matching example in [1], in a table of calculated values.

>>> Barati(200.)
0.7682237950389874

fluids.drag.Barati_high(Re)
Calculates drag coefficient of a smooth sphere using the method in [1].

𝐶𝐷 = 8 × 10−6 (𝑅𝑒/6530)2 + tanh(𝑅𝑒) − 8 ln(𝑅𝑒)/ ln(10) − 0.4119 exp(−2.08 × 1043 /[𝑅𝑒 + 𝑅𝑒2 ]4 ) − 2.1344 exp(−{[ln
[︀ ]︀

Parameters

128 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

Re [float] Particle Reynolds number of the sphere using the surrounding fluid density and vis-
cosity, [-]
Returns
Cd [float] Drag coefficient [-]

Notes

Range is Re <= 1E6 This model is the wider-range model the authors developed. At sufficiently low diameters
or Re values, drag is no longer a phenomena.

References

[1]

Examples

Matching example in [1], in a table of calculated values.

>>> Barati_high(200.)
0.7730544082789523

fluids.drag.Khan_Richardson(Re)
Calculates drag coefficient of a smooth sphere using the method in [1] as described in [2].

𝐶𝐷 = (2.49𝑅𝑒−0.328 + 0.34𝑅𝑒0.067 )3.18

Parameters
Re [float] Particle Reynolds number of the sphere using the surrounding fluid density and vis-
cosity, [-]
Returns
Cd [float] Drag coefficient [-]

Notes

Range is Re <= 2E5

References

[1], [2]

2.5. Drag and terminal velocity (fluids.drag) 129


Fluids Documentation, Release 1.0.21

Examples

>>> Khan_Richardson(200.)
0.7747572379211097

fluids.drag.Morsi_Alexander(Re)
Calculates drag coefficient of a smooth sphere using the method in [1] as described in [2].
If Re < 0.1:
24
𝐶𝐷 =
𝑅𝑒
If 0.1 < Re < 1:
22.73 0.0903
𝐶𝐷 = + + 3.69
𝑅𝑒 𝑅𝑒2
If 1 < Re < 10:
29.1667 3.8889
𝐶𝐷 = − + 1.2220
𝑅𝑒 𝑅𝑒2
If 10 < Re < 100:
46.5 116.67
𝐶𝐷 = − + 0.6167
𝑅𝑒 𝑅𝑒2
If 100 < Re < 1000:
98.33 2778
𝐶𝐷 = − + 0.3644
𝑅𝑒 𝑅𝑒2
If 1000 < Re < 5000:
148.62 4.75 × 104
𝐶𝐷 = − + 0.3570
𝑅𝑒 𝑅𝑒2
If 5000 < Re < 10000:
−490.5460 57.87 × 104
𝐶𝐷 = + + 0.46
𝑅𝑒 𝑅𝑒2
If 10000 < Re < 50000:
−1662.5 5.4167 × 106
𝐶𝐷 = + + 0.5191
𝑅𝑒 𝑅𝑒2
Parameters
Re [float] Particle Reynolds number of the sphere using the surrounding fluid density and vis-
cosity, [-]
Returns
Cd [float] Drag coefficient [-]

Notes

Range is Re <= 2E5. Original was reviewed, and confirmed to contain the cited equations.

130 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

References

[1], [2]

Examples

>>> Morsi_Alexander(200)
0.7866

fluids.drag.Rouse(Re)
Calculates drag coefficient of a smooth sphere using the method in [1] as described in [2].
24 3
𝐶𝐷 = + + 0.34
𝑅𝑒 𝑅𝑒0.5
Parameters
Re [float] Particle Reynolds number of the sphere using the surrounding fluid density and vis-
cosity, [-]
Returns
Cd [float] Drag coefficient [-]

Notes

Range is Re <= 2E5

References

[1], [2]

Examples

>>> Rouse(200.)
0.6721320343559642

fluids.drag.Engelund_Hansen(Re)
Calculates drag coefficient of a smooth sphere using the method in [1] as described in [2].
24
𝐶𝐷 = + 1.5
𝑅𝑒
Parameters
Re [float] Particle Reynolds number of the sphere using the surrounding fluid density and vis-
cosity, [-]
Returns
Cd [float] Drag coefficient [-]

2.5. Drag and terminal velocity (fluids.drag) 131


Fluids Documentation, Release 1.0.21

Notes

Range is Re <= 2E5

References

[1], [2]

Examples

>>> Engelund_Hansen(200.)
1.62

fluids.drag.Clift_Gauvin(Re)
Calculates drag coefficient of a smooth sphere using the method in [1] as described in [2].
24 0.417
𝐶𝐷 = (1 + 0.152𝑅𝑒0.677 ) +
𝑅𝑒 1 + 5070𝑅𝑒−0.94
Parameters
Re [float] Particle Reynolds number of the sphere using the surrounding fluid density and vis-
cosity, [-]
Returns
Cd [float] Drag coefficient [-]

Notes

Range is Re <= 2E5

References

[1], [2]

Examples

>>> Clift_Gauvin(200.)
0.7905400398000133

fluids.drag.Graf(Re)
Calculates drag coefficient of a smooth sphere using the method in [1] as described in [2].
24 7.3
𝐶𝐷 = + + 0.25
𝑅𝑒 1 + 𝑅𝑒0.5
Parameters
Re [float] Particle Reynolds number of the sphere using the surrounding fluid density and vis-
cosity, [-]
Returns
Cd [float] Drag coefficient [-]

132 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

Notes

Range is Re <= 2E5

References

[1], [2]

Examples

>>> Graf(200.)
0.8520984424785725

fluids.drag.Flemmer_Banks(Re)
Calculates drag coefficient of a smooth sphere using the method in [1] as described in [2].
24 𝐸
𝐶𝐷 = 10
𝑅𝑒
0.143
𝐸 = 0.383𝑅𝑒0.356 − 0.207𝑅𝑒0.396 −
1 + (log10 𝑅𝑒)2
Parameters
Re [float] Particle Reynolds number of the sphere using the surrounding fluid density and vis-
cosity, [-]
Returns
Cd [float] Drag coefficient [-]

Notes

Range is Re <= 2E5

References

[1], [2]

Examples

>>> Flemmer_Banks(200.)
0.7849169609270039

fluids.drag.Swamee_Ojha(Re)
Calculates drag coefficient of a smooth sphere using the method in [1] as described in [2].

[︂ ]︂2.5 [︃(︂ )︂2 ]︃−0.25 ⎫0.25
⎨ 24 130 0.72 40000 ⎬
𝐶𝐷 = 0.5 16 ( )1.6 + ( ) + +1
⎩ 𝑅𝑒 𝑅𝑒 𝑅𝑒 ⎭

Parameters

2.5. Drag and terminal velocity (fluids.drag) 133


Fluids Documentation, Release 1.0.21

Re [float] Particle Reynolds number of the sphere using the surrounding fluid density and vis-
cosity, [-]
Returns
Cd [float] Drag coefficient [-]

Notes

Range is Re <= 1.5E5

References

[1], [2]

Examples

>>> Swamee_Ojha(200.)
0.8490012397545713

fluids.drag.Yen(Re)
Calculates drag coefficient of a smooth sphere using the method in [1] as described in [2].
24 (︁ √ )︁ 0.208
𝐶𝐷 = 1 + 0.15 𝑅𝑒 + 0.017𝑅𝑒 −
𝑅𝑒 1 + 104 𝑅𝑒−0.5
Parameters
Re [float] Particle Reynolds number of the sphere using the surrounding fluid density and vis-
cosity, [-]
Returns
Cd [float] Drag coefficient [-]

Notes

Range is Re <= 2E5

References

[1], [2]

Examples

>>> Yen(200.)
0.7822647002187014

fluids.drag.Haider_Levenspiel(Re)
Calculates drag coefficient of a smooth sphere using the method in [1] as described in [2].
(︂ )︂
24 0.4251
𝐶𝐷 = (1 + 0.1806𝑅𝑒0.6459 ) +
𝑅𝑒 1 + 6880.95
𝑅𝑒

134 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

Parameters
Re [float] Particle Reynolds number of the sphere using the surrounding fluid density and vis-
cosity, [-]
Returns
Cd [float] Drag coefficient [-]

Notes

Range is Re <= 2E5 An improved version of this correlation is in Brown and Lawler.

References

[1], [2]

Examples

>>> Haider_Levenspiel(200.)
0.7959551680251666

fluids.drag.Cheng(Re)
Calculates drag coefficient of a smooth sphere using the method in [1] as described in [2].
24
𝐶𝐷 = (1 + 0.27𝑅𝑒)0.43 + 0.47[1 − exp(−0.04𝑅𝑒0.38 )]
𝑅𝑒
Parameters
Re [float] Particle Reynolds number of the sphere using the surrounding fluid density and vis-
cosity, [-]
Returns
Cd [float] Drag coefficient [-]

Notes

Range is Re <= 2E5

References

[1], [2]

2.5. Drag and terminal velocity (fluids.drag) 135


Fluids Documentation, Release 1.0.21

Examples

>>> Cheng(200.)
0.7939143028294227

fluids.drag.Terfous(Re)
Calculates drag coefficient of a smooth sphere using the method in [1] as described in [2].
21.683 0.131 10.616 12.216
𝐶𝐷 = 2.689 + + − +
𝑅𝑒 𝑅𝑒2 𝑅𝑒0.1 𝑅𝑒0.2
Parameters
Re [float] Particle Reynolds number of the sphere using the surrounding fluid density and vis-
cosity, [-]
Returns
Cd [float] Drag coefficient [-]

Notes

Range is 0.1 < Re <= 5E4

References

[1], [2]

Examples

>>> Terfous(200.)
0.7814651149769638

fluids.drag.Mikhailov_Freire(Re)
Calculates drag coefficient of a smooth sphere using the method in [1] as described in [2].

3808[(1617933/2030) + (178861/1063)𝑅𝑒 + (1219/1084)𝑅𝑒2 ]


𝐶𝐷 =
681𝑅𝑒[(77531/422) + (13529/976)𝑅𝑒 − (1/71154)𝑅𝑒2 ]

Parameters
Re [float] Particle Reynolds number of the sphere using the surrounding fluid density and vis-
cosity, [-]
Returns
Cd [float] Drag coefficient [-]

136 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

Notes

Range is Re <= 118300

References

[1], [2]

Examples

>>> Mikhailov_Freire(200.)
0.7514111388018659

fluids.drag.Clift(Re)
Calculates drag coefficient of a smooth sphere using the method in [1] as described in [2].
If Re < 0.01:
24 3
𝐶𝐷 = +
𝑅𝑒 16
If 0.01 < Re < 20:
24
𝐶𝐷 = (1 + 0.1315𝑅𝑒0.82−0.05 log10 𝑅𝑒 )
𝑅𝑒
If 20 < Re < 260:
24
𝐶𝐷 = (1 + 0.1935𝑅𝑒0.6305 )
𝑅𝑒
If 260 < Re < 1500:
2
𝐶𝐷 = 10[1.6435−1.1242 log10 𝑅𝑒+0.1558[log10 𝑅𝑒]
If 1500 < Re < 12000:
2
+0.1049[log10 𝑅𝑒]3
𝐶𝐷 = 10[−2.4571+2.5558 log10 𝑅𝑒−0.9295[log10 𝑅𝑒]
If 12000 < Re < 44000:
2
𝐶𝐷 = 10[−1.9181+0.6370 log10 𝑅𝑒−0.0636[log10 𝑅𝑒]
If 44000 < Re < 338000:
2
𝐶𝐷 = 10[−4.3390+1.5809 log10 𝑅𝑒−0.1546[log10 𝑅𝑒]
If 338000 < Re < 400000:
𝐶𝐷 = 9.78 − 5.3 log10 𝑅𝑒

If 400000 < Re < 1000000:


𝐶𝐷 = 0.19 log10 𝑅𝑒 − 0.49

Parameters
Re [float] Particle Reynolds number of the sphere using the surrounding fluid density and vis-
cosity, [-]
Returns
Cd [float] Drag coefficient [-]

2.5. Drag and terminal velocity (fluids.drag) 137


Fluids Documentation, Release 1.0.21

Notes

Range is Re <= 1E6.

References

[1], [2]

Examples

>>> Clift(200)
0.7756342422322543

fluids.drag.Ceylan(Re)
Calculates drag coefficient of a smooth sphere using the method in [1] as described in [2].

𝐶𝐷 = 1 − 0.5 exp(0.182) + 10.11𝑅𝑒−2/3 exp(0.952𝑅𝑒−1/4 ) − 0.03859𝑅𝑒−4/3 exp(1.30𝑅𝑒−1/2 ) + 0.037 × 10−4 𝑅𝑒 exp(−0.1

Parameters
Re [float] Particle Reynolds number of the sphere using the surrounding fluid density and vis-
cosity, [-]
Returns
Cd [float] Drag coefficient [-]

Notes

Range is 0.1 < Re <= 1E6 Original article reviewed.

References

[1], [2]

Examples

>>> Ceylan(200.)
0.7816735980280175

fluids.drag.Almedeij(Re)
Calculates drag coefficient of a smooth sphere using the method in [1] as described in [2].
[︂ ]︂0.1
1
𝐶𝐷 = + 𝜑4
(𝜑1 + 𝜑2 )−1 + (𝜑3 )−1

𝜑1 = (24𝑅𝑒−1 )10 + (21𝑅𝑒−0.67 )10 + (4𝑅𝑒−0.33 )10 + 0.410


]︀−1
𝜑2 = (0.148𝑅𝑒0.11 )−10 + (0.5)−10
[︀

𝜑3 = (1.57 × 108 𝑅𝑒−1.625 )10


]︀−1
𝜑4 = (6 × 10−17 𝑅𝑒2.63 )−10 + (0.2)−10
[︀

138 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

Parameters
Re [float] Particle Reynolds number of the sphere using the surrounding fluid density and vis-
cosity, [-]
Returns
Cd [float] Drag coefficient [-]

Notes

Range is Re <= 1E6. Original work has been reviewed.

References

[1], [2]

Examples

>>> Almedeij(200.)
0.7114768646813396

fluids.drag.Morrison(Re)
Calculates drag coefficient of a smooth sphere using the method in [1] as described in [2].
(︀ 𝑅𝑒 )︀−7.94
24 2.6𝑅𝑒/5 0.411 263000 𝑅𝑒0.8
𝐶𝐷 = + (︀ 𝑅𝑒 )︀1.52 + (︀ 𝑅𝑒 )︀−8 +
𝑅𝑒 1 + 1 + 263000 461000
5

Parameters
Re [float] Particle Reynolds number of the sphere using the surrounding fluid density and vis-
cosity, [-]
Returns
Cd [float] Drag coefficient [-]

Notes

Range is Re <= 1E6.

References

[1], [2]

2.5. Drag and terminal velocity (fluids.drag) 139


Fluids Documentation, Release 1.0.21

Examples

>>> Morrison(200.)
0.767731559965325

fluids.drag.Song_Xu(Re, sphericity=1.0, S=1.0)


Calculates drag coefficient of a particle using the method in [1]. Developed with data for spheres, cubes, and
cylinders. Claims 3.52% relative error for 0.001 < Re < 100 based on 336 tests data.
24 0.44
𝐶𝑑 = (1 + 0.35𝑅𝑒)
𝑅𝑒𝜑0.65 𝑆 0.3
Parameters
Re [float] Particle Reynolds number of the sphere using the surrounding fluid density and vis-
cosity, [-]
sphericity [float, optional] Sphericity of the particle
S [float, optional] Ratio of equivalent sphere area and the projected area in the particle settling
direction [-]
Returns
Cd [float] Drag coefficient of particle [-]

Notes

Notable as its experimental data and analysis is included in their supporting material.

References

[1]

Examples

>>> Song_Xu(30.)
2.3431335190092444

2.6 Filter pressure drop (fluids.filters)

This module contains correlations for the loss coefficient of various types of filters in a pipe or channel.
For reporting bugs, adding feature requests, or submitting pull requests, please use the GitHub issue tracker or contact
the author at Caleb.Andrew.Bell@gmail.com.

• Loss Coefficients for Screens


• Loss Coefficients for Grills

140 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

2.6.1 Loss Coefficients for Screens

fluids.filters.round_edge_screen(alpha, Re, angle=0.0)


Returns the loss coefficient for a round edged wire screen or bar screen, as shown in [1]. Angle of inclination
may be specified as well.
Parameters
alpha [float] Fraction of screen open to flow [-]
Re [float] Reynolds number of flow through screen with D = space between rods, []
angle [float, optional] Angle of inclination, with 0 being straight and 90 being parallel to flow
[degrees]
Returns
K [float] Loss coefficient [-]

Notes

Linear interpolation between a table of values. Re table extends from 20 to 400, with constant values outside of
the table. This behavior should be adequate. alpha should be between 0.05 and 0.8. If angle is over 85 degrees,
the value at 85 degrees is used.
The velocity the loss coefficient relates to is the approach velocity before the screen.

References

[1]

Examples

>>> round_edge_screen(0.5, 100)


2.0999999999999996
>>> round_edge_screen(0.5, 100, 45)
1.05

fluids.filters.round_edge_open_mesh(alpha, subtype='diamond pattern wire', angle=0.0)


Returns the loss coefficient for a round edged open net/screen made of one of the following patterns, according
to [1]:
‘round bar screen’:

𝐾 = 0.95(1 − 𝛼) + 0.2(1 − 𝛼)2

‘diamond pattern wire’:

𝐾 = 0.67(1 − 𝛼) + 1.3(1 − 𝛼)2

‘knotted net’:

𝐾 = 0.70(1 − 𝛼) + 4.9(1 − 𝛼)2

‘knotless net’:

𝐾 = 0.72(1 − 𝛼) + 2.1(1 − 𝛼)2

2.6. Filter pressure drop (fluids.filters) 141


Fluids Documentation, Release 1.0.21

Parameters
alpha [float] Fraction of net/screen open to flow [-]
subtype [str] One of ‘round bar screen’, ‘diamond pattern wire’, ‘knotted net’ or ‘knotless net’.
angle [float, optional] Angle of inclination, with 0 being straight and 90 being parallel to flow
[degrees]
Returns
K [float] Loss coefficient [-]

Notes

alpha should be between 0.85 and 1 for these correlations. Flow should be turbulent, with Re > 500.
The velocity the loss coefficient relates to is the approach velocity before the mesh.

References

[1]

Examples

>>> round_edge_open_mesh(0.96, angle=33.)


0.02031327712601458

fluids.filters.square_edge_screen(alpha)
Returns the loss coefficient for a square wire screen or square bar screen or perforated plate with squared edges,
as shown in [1].
Parameters
alpha [float] Fraction of screen open to flow [-]
Returns
K [float] Loss coefficient [-]

Notes

Linear interpolation between a table of values. The velocity the loss coefficient relates to is the approach velocity
before the screen.

References

[1]

142 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

Examples

>>> square_edge_screen(0.99)
0.008000000000000007

2.6.2 Loss Coefficients for Grills

fluids.filters.square_edge_grill(alpha, l=None, Dh=None, fd=None)


Returns the loss coefficient for a square grill or square bar screen or perforated plate with squared edges of
thickness l, as shown in [1].
for Dh < l < 50D
0.5(1 − 𝛼) + (1 − 𝛼2 )
𝐾=
𝛼2
else:
0.5(1 − 𝛼) + (1 − 𝛼2 ) + 𝑓 𝑙/𝐷
𝐾=
𝛼2
Parameters
alpha [float] Fraction of grill open to flow [-]
l [float, optional] Thickness of the grill or plate [m]
Dh [float, optional] Hydraulic diameter of gap in grill, [m]
fd [float, optional] Darcy friction factor [-]
Returns
K [float] Loss coefficient [-]

Notes

If l, Dh, or fd is not provided, the first expression is used instead. The alteration of the expression to include
friction factor is there if the grill is long enough to have considerable friction along the surface of the grill.
The velocity the loss coefficient relates to is the approach velocity before the grill.

References

[1]

Examples

>>> square_edge_grill(.45)
5.296296296296296
>>> square_edge_grill(.45, l=.15, Dh=.002, fd=.0185)
12.148148148148147

2.6. Filter pressure drop (fluids.filters) 143


Fluids Documentation, Release 1.0.21

fluids.filters.round_edge_grill(alpha, l=None, Dh=None, fd=None)


Returns the loss coefficient for a rounded square grill or square bar screen or perforated plate with rounded edges
of thickness l, as shown in [1].
for Dh < l < 50D

𝐾 = 𝑙𝑜𝑜𝑘𝑢𝑝(𝑎𝑙𝑝ℎ𝑎)

else:
𝑓𝑙
𝐾 = 𝑙𝑜𝑜𝑘𝑢𝑝(𝑎𝑙𝑝ℎ𝑎) +
𝛼2 𝐷
Parameters
alpha [float] Fraction of grill open to flow [-]
l [float, optional] Thickness of the grill or plate [m]
Dh [float, optional] Hydraulic diameter of gap in grill, [m]
fd [float, optional] Darcy friction factor [-]
Returns
K [float] Loss coefficient [-]

Notes

If l, Dh, or fd is not provided, the first expression is used instead. The alteration of the expression to include
friction factor is there if the grill is long enough to have considerable friction along the surface of the grill. alpha
must be between 0.3 and 0.7.
The velocity the loss coefficient relates to is the approach velocity before the grill.

References

[1]

Examples

>>> round_edge_grill(.4)
1.0
>>> round_edge_grill(.4, l=.15, Dh=.002, fd=.0185)
2.3874999999999997

2.7 Fittings pressure drop (fluids.fittings)

This module contains correlations for the loss coefficient of various types of pipe fittings. Whether you are desining a
network or modeling a single element, the correlations here cover most cases.
For reporting bugs, adding feature requests, or submitting pull requests, please use the GitHub issue tracker or contact
the author at Caleb.Andrew.Bell@gmail.com.

144 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

• Entrances
• Exits
• Bends
• Contractions/Reducers
• Expansions/Diffusers
• Tees
• Valves
• Hooper 2K fittings
• Darby 3K fittings
• Loss Coefficient Converters
• Miscellaneous
• Sources

2.7.1 Entrances

fluids.fittings.entrance_sharp(method='Rennels')
Returns loss coefficient for a sharp entrance to a pipe. Six sources are available; four of them recommending K =
0.5, the most recent ‘Rennels’, method recommending K = 0.57, and the ‘Miller’ method recommending ~0.51
as read from a graph.

Parameters
method [str, optional] The method to use; one of ‘Rennels’, ‘Swamee’, ‘Blevins’, ‘Idelchik’,
‘Crane’, or ‘Miller, [-]
Returns
K [float] Loss coefficient [-]

2.7. Fittings pressure drop (fluids.fittings) 145


Fluids Documentation, Release 1.0.21

Notes

0.5 is the result for ‘Swamee’, ‘Blevins’, ‘Idelchik’, and ‘Crane’; ‘Miller’ returns 0.5093, and ‘Rennels’ returns
0.57.

References

[1], [2], [3], [4], [5], [6]

Examples

>>> entrance_sharp()
0.57

fluids.fittings.entrance_distance(Di, t=None, l=None, method='Rennels')


Returns the loss coefficient for a sharp entrance to a pipe at a distance from the wall of a reservoir. This calculation
has five methods available; all but ‘Idelchik’ require the pipe to be at least Di/2 into the reservoir.
The most conservative formulation is that of Rennels; with Miller being almost identical until t/Di reaches 0.05,
when it continues settling to K = 0.53 compared to K = 0.57 for ‘Rennels’. ‘Idelchik’ is offset lower by about 0.03
and settles to 0.50. The ‘Harris’ method is a straight interpolation from experimental results with smoothing,
and it is the lowest at all points. The ‘Crane’ [6] method returns 0.78 for all cases.
The Rennels [1] formula is:
(︂ )︂2 (︂ )︂3
𝑡 𝑡 𝑡
𝐾 = 1.12 − 22 + 216 + 80
𝑑 𝑑 𝑑

Parameters
Di [float] Inside diameter of pipe, [m]
t [float, optional] Thickness of pipe wall, used in all but ‘Crane’ method, [m]
l [float, optional] The distance the pipe extends into the reservoir; used only in the ‘Idelchik’
method, defaults to Di, [m]
method [str, optional] One of ‘Rennels’, ‘Miller’, ‘Idelchik’, ‘Harris’, ‘Crane’, [-]
Returns
K [float] Loss coefficient [-]

146 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

Notes

This type of inlet is also known as a Borda’s mouthpiece. It is not of practical interest according to [1].
The ‘Idelchik’ [3] data is recommended in [5]; it also provides rounded values for the ‘Harris. method.

Comparison of available methods for re-entrant entrances


Rennels
1.1 Miller
Idelchik
1.0 Harris
Crane
0.9

0.8
K

0.7

0.6

0.5

0.4
0.00 0.05 0.10 0.15 0.20 0.25 0.30
t/Di

References

[1], [2], [3], [4], [5], [6]

Examples

>>> entrance_distance(Di=0.1, t=0.0005)


1.0154100000000001
>>> entrance_distance(Di=0.1, t=0.0005, method='Idelchik')
0.9249999999999999
>>> entrance_distance(Di=0.1, t=0.0005, l=.02, method='Idelchik')
0.8474999999999999

fluids.fittings.entrance_angled(angle, method='Idelchik')
Returns loss coefficient for a sharp, angled entrance to a pipe flush with the wall of a reservoir. First published

2.7. Fittings pressure drop (fluids.fittings) 147


Fluids Documentation, Release 1.0.21

in [2], it has been recommended in [3] as well as in [1].

𝐾 = 0.57 + 0.30 cos(𝜃) + 0.20 cos(𝜃)2

Parameters
angle [float] Angle of inclination (90° = straight, 0° = parallel to pipe wall), [degrees]
method [str, optional] The method to use; only ‘Idelchik’ is supported
Returns
K [float] Loss coefficient [-]

Notes

Not reliable for angles under 20 degrees. Loss coefficient is the same for an upward or downward angled inlet.

References

[1], [2], [3]

Examples

>>> entrance_angled(30)
0.9798076211353315

fluids.fittings.entrance_rounded(Di, rc, method='Rennels')


Returns loss coefficient for a rounded entrance to a pipe flush with the wall of a reservoir. This calculation has
six methods available.
The most conservative formulation is that of Rennels; with the Swammee correlation being 0.02-0.07 lower.
They were published in 2012 and 2008 respectively, and for this reason could be regarded as more reliable.
The Idel’chik correlation appears based on the Hamilton data; and the Miller correlation as well, except a little
more conservative. The Crane model trends similarly but only has a few points. The Harris data set is the lowest.
The Rennels [1] formulas are:
(︁ 𝑟 )︁ 2
𝐾 = 0.0696 1 − 0.569 𝜆 + (𝜆 − 1)2
𝑑
(︂ √︂ )︂4
𝑟 𝑟
𝜆 = 1 + 0.622 1 − 0.30 − 0.70
𝑑 𝑑

148 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

The Swamee [5] formula is:


[︂ (︁ 𝑟 )︁1.2 ]︂−1
𝐾 = 0.5 1 + 36
𝐷

Parameters
Di [float] Inside diameter of pipe, [m]
rc [float] Radius of curvature of the entrance, [m]
method [str, optional] One of ‘Rennels’, ‘Crane’, ‘Miller’, ‘Idelchik’, ‘Harris’, or ‘Swamee’.
Returns
K [float] Loss coefficient [-]

Notes

For generously rounded entrance (rc/Di >= 1), the loss coefficient converges to 0.03 in the Rennels method.
The Rennels formulation was derived primarily from data and theoretical analysis from different flow scenarios
than a rounded pipe entrance; the only available data in [2] is quite old and [1] casts doubt on it.
The Hamilton data set is available in [1] and [6].

References

[1], [2], [3], [4], [5], [6], [7], [8]

Examples

Point from Diagram 9.2 in [1], which was used to confirm the Rennels model implementation:

>>> entrance_rounded(Di=0.1, rc=0.0235)


0.09839534618360923

fluids.fittings.entrance_beveled(Di, l, angle, method='Rennels')


Returns loss coefficient for a beveled or chamfered entrance to a pipe flush with the wall of a reservoir. This
calculation has two methods available.
The ‘Rennels’ and ‘Idelchik’ methods have similar trends, but the ‘Rennels’ formulation is centered around a
straight loss coefficient of 0.57, so it is normally at least 0.07 higher.
The Rennels [1] formulas are:
(︂ )︂
𝑙
𝐾 = 0.0696 1 − 𝐶𝑏 𝜆2 + (𝜆 − 1)2
𝑑

2.7. Fittings pressure drop (fluids.fittings) 149


Fluids Documentation, Release 1.0.21

Comparison of available methods for rounded flush entrances to pipes


Rennels
Crane
0.5 Miller
Idelchik
Harris
0.4 Swamee

0.3
K

0.2

0.1

0.0
0.00 0.05 0.10 0.15 0.20 0.25 0.30 0.35 0.40
rc/Di

150 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

1/4
⎡ ⎤
(︂ )︂ 1−(𝑙/𝑑)
𝑙 2
𝜆 = 1 + 0.622 ⎣1 − 1.5𝐶𝑏 ⎦
𝑑
(︂ )︂ (︂ 1
)︂ 1+𝑙/𝑑
𝜃 𝜃
𝐶𝑏 = 1−
90 90

Parameters
Di [float] Inside diameter of pipe, [m]
l [float] Length of bevel measured parallel to the pipe length, [m]
angle [float] Angle of bevel with respect to the pipe length, [degrees]
method [str, optional] One of ‘Rennels’, or ‘Idelchik’, [-]
Returns
K [float] Loss coefficient [-]

Notes

A cheap way of getting a lower pressure drop. Little credible data is available.
The table of data in [2] uses the angle for both bevels, so it runs from 0 to 180 degrees; this function follows the
convention in [1] which uses only one angle, with the angle varying from 0 to 90 degrees.

References

[1], [2]

Examples

>>> entrance_beveled(Di=0.1, l=0.003, angle=45)


0.450868642219
>>> entrance_beveled(Di=0.1, l=0.003, angle=45, method='Idelchik')
0.399500000000

fluids.fittings.entrance_beveled_orifice(Di, do, l, angle)


Returns loss coefficient for a beveled or chamfered orifice entrance to a pipe flush with the wall of a reservoir, as
shown in [1].
(︂ )︂ (︃ (︂ )︂2 )︃2
𝑙 𝑑𝑜
𝐾 = 0.0696 1 − 𝐶𝑏 𝜆2 + 𝜆 −
𝑑𝑜 𝐷𝑖

2.7. Fittings pressure drop (fluids.fittings) 151


Fluids Documentation, Release 1.0.21

Comparison of available methods for beveled entrances


Rennels, l/Di=0.025
Idelchik, l/Di=0.025
0.5 Rennels, l/Di=0.05
Idelchik, l/Di=0.05
Rennels, l/Di=0.1
Idelchik, l/Di=0.1
0.4 Rennels, l/Di=0.25
Idelchik, l/Di=0.25
Rennels, l/Di=0.5
K

Idelchik, l/Di=0.5
0.3 Rennels, l/Di=0.75
Idelchik, l/Di=0.75
Rennels, l/Di=1
0.2 Idelchik, l/Di=1

0.1
0 20 40 60 80
angle

152 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

)︂ 1−(𝑙/𝑑2𝑜 )0.25
⎡ ⎤
(︂
𝑙
𝜆 = 1 + 0.622 ⎣1 − 𝐶𝑏 ⎦
𝑑𝑜
(︂ )︂ (︂ 1
)︂ 1+𝑙/𝑑
Ψ Ψ 𝑜
𝐶𝑏 = 1−
90 90

Parameters
Di [float] Inside diameter of pipe, [m]
do [float] Inside diameter of orifice, [m]
l [float] Length of bevel measured parallel to the pipe length, [m]
angle [float] Angle of bevel with respect to the pipe length, [degrees]
Returns
K [float] Loss coefficient [-]

References

[1]

Examples

>>> entrance_beveled_orifice(Di=0.1, do=.07, l=0.003, angle=45)


1.2987552913818574

fluids.fittings.entrance_distance_45_Miller(Di, Di0)
Returns loss coefficient for a sharp entrance to a pipe at a distance from the wall of a reservoir with an initial 45
degree slope conical section of diameter Di0 added to reduce the overall loss coefficient.
This method is as shown in Miller’s Internal Flow Systems [1]. This method is a curve fit to a graph in [1] which
was digitized.
Parameters
Di [float] Inside diameter of pipe, [m]
Di0 [float] Initial inner diameter of the welded conical section of the entrance of the distant
(re-entrant) pipe, [m]
Returns
K [float] Loss coefficient with respect to the main pipe diameter Di, [-]

2.7. Fittings pressure drop (fluids.fittings) 153


Fluids Documentation, Release 1.0.21

Notes

The graph predicts an almost constant loss coefficient once the thickness of pipe wall to pipe diameter ratio
becomes ~0.02.

References

[1]

Examples

>>> entrance_distance_45_Miller(Di=0.1, Di0=0.14)


0.24407641818143339

2.7.2 Exits

fluids.fittings.exit_normal()
Returns loss coefficient for any exit to a pipe as shown in [1] and in other sources.

𝐾=1

Returns
K [float] Loss coefficient [-]

Notes

It has been found on occasion that K = 2.0 for laminar flow, and ranges from about 1.04 to 1.10 for turbulent
flow.

154 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

References

[1]

Examples

>>> exit_normal()
1.0

2.7.3 Bends

fluids.fittings.bend_rounded(Di, angle, fd=None, rc=None, bend_diameters=None, Re=None,


roughness=0.0, L_unimpeded=None, method='Rennels')
Returns loss coefficient for rounded bend in a pipe of diameter Di, angle, with a specified either radius of curvature
rc or curvature defined by bend_diameters, Reynolds number Re and optionally pipe roughness, unimpeded
length downstrean, and with the specified method. This calculation has six methods available.
It is hard to describe one method as more conservative than another as depending on the conditions, the relative
results change significantly.
The ‘Miller’ method is the most complicated and slowest method; the ‘Ito’ method comprehensive as well and
a source of original data, and the primary basis for the ‘Rennels’ method. The ‘Swamee’ method is very simple
and generally does not match the other methods. The ‘Crane’ method may match or not match other methods
depending on the inputs. There is also a ‘Crane standard’ method for use with threaded fittings which have higher
pressure drops. It is a linear interpolation of values at angles of 45, 90, and 180 degrees.
The Rennels [1] formula is:
√︀
𝑟 6.6𝑓 ( sin(𝛼/2) + sin(𝛼/2))
𝐾 = 𝑓 𝛼 + (0.10 + 2.4𝑓 ) sin(𝛼/2) + 4𝛼
𝑑 (𝑟/𝑑) 𝜋

The Swamee [5] formula is:


[︃ (︂ )︂3.5 ]︃
𝑑
𝐾 = 0.0733 + 0.923 𝜃0.5
𝑟𝑐

Parameters
Di [float] Inside diameter of pipe, [m]
angle [float] Angle of bend, [degrees]

2.7. Fittings pressure drop (fluids.fittings) 155


Fluids Documentation, Release 1.0.21

fd [float, optional] Darcy friction factor; used only in Rennels method; calculated if not provided
from Reynolds number, diameter, and roughness [-]
rc [float, optional] Radius of curvature of the entrance, optional [m]
bend_diameters [float, optional (used if rc not provided)] Number of diameters of pipe making
up the bend radius [-]
Re [float, optional] Reynolds number of the pipe (used in Miller, Ito methods primarily, and
Rennels method if no friction factor given), [-]
roughness [float, optional] Roughness of bend wall (used in Miller, Ito methods primarily, and
Rennels method if no friction factor given), [m]
L_unimpeded [float, optional] The length of unimpeded pipe without any fittings, instrumen-
tation, or flow disturbances downstream (assumed 20 diameters if not specified); used only
in Miller method, [m]
method [str, optional] One of ‘Rennels’, ‘Miller’, ‘Crane’, ‘Crane standard’, ‘Ito’, or ‘Swamee’,
[-]
Returns
K [float] Loss coefficient [-]

Notes

When inputting bend diameters, note that manufacturers often specify this as a multiplier of nominal diameter,
which is different than actual diameter. Those require that rc be specified.
In the ‘Rennels’ method, rc is limited to 0.5 or above; which represents a sharp, square, inner edge - and an outer
bend radius of 1.0. Losses are at a minimum when this value is large. Its first term represents surface friction
loss; the second, secondary flows; and the third, flow separation. It encompasses the entire range of elbow and
pipe bend configurations. It was developed for bend angles between 0 and 180 degrees; and r/D ratios above 0.5.
Only smooth pipe data was used in its development. Note the loss coefficient includes the surface friction of the
pipe as if it was straight.

References

[1], [2], [3], [4], [5], [6]

Examples

>>> bend_rounded(Di=4.020, rc=4.0*5, angle=30, Re=1E5)


0.11519070808085191

fluids.fittings.bend_rounded_Miller(Di, angle, Re, rc=None, bend_diameters=None, roughness=0.0,


L_unimpeded=None)
Calculates the loss coefficient for a rounded pipe bend according to Miller [1]. This is a sophisticated model
which uses corrections for pipe roughness, the length of the pipe downstream before another interruption, and a
correction for Reynolds number. It interpolates several times using several corrections graphs in [1].
Parameters
Di [float] Inside diameter of pipe, [m]
angle [float] Angle of bend, [degrees]

156 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

Re [float] Reynolds number of the pipe (no specification if inlet or outlet properties should be
used), [m]
rc [float, optional] Radius of curvature of the entrance, [m]
bend_diameters [float, optional] Number of diameters of pipe making up the bend radius (used
if rc not provided; defaults to 5), [-]
roughness [float, optional] Roughness of bend wall, [m]
L_unimpeded [float, optional] The length of unimpeded pipe without any fittings, instrumen-
tation, or flow disturbances downstream (assumed 20 diameters if not specified), [m]
Returns
K [float] Loss coefficient [-]

Notes

When inputting bend diameters, note that manufacturers often specify this as a multiplier of nominal diameter,
which is different than actual diameter. Those require that rc be specified.
rc is limited to 0.5 or above; which represents a sharp, square, inner edge - and an outer bend radius of 1.0.
Losses are at a minimum when this value is large.
This was developed for bend angles between 10 and 180 degrees; and r/D ratios between 0.5 and 10. Both smooth
and rough data was used in its development from several sources.
Note the loss coefficient includes the surface friction of the pipe as if it was straight.

References

[1]

Examples

>>> bend_rounded_Miller(Di=.6, bend_diameters=2, angle=90, Re=2e6,


... roughness=2E-5, L_unimpeded=30*.6)
0.15261820705145895

fluids.fittings.bend_rounded_Crane(Di, angle, rc=None, bend_diameters=None)


Calculates the loss coefficient for any rounded bend in a pipe according to the Crane TP 410M [1] method. This
method effectively uses an interpolation from tabulated values in [1] for friction factor multipliers vs. curvature
radius.

2.7. Fittings pressure drop (fluids.fittings) 157


Fluids Documentation, Release 1.0.21

Parameters
Di [float] Inside diameter of pipe, [m]
angle [float] Angle of bend, [degrees]
rc [float, optional] Radius of curvature of the entrance; specify either rc or bend_diameters,
optional [m]
bend_diameters [float, optional] Number of diameters of pipe making up the bend radius; spec-
ify either rc or bend_diameters, [-]
Returns
K [float] Loss coefficient [-]

Notes

The Crane method does match the trend of increased pressure drop as roughness increases.
The points in [1] are extrapolated to other angles via a well-fitting Chebyshev approximation, whose accuracy
can be seen in the below plot.

Interpolation of Crane ft multipliers for pipe bend losses


50 Crane data
Cubic spline
45 Chebyshev approximation

40
Friction factor multiplier

35
30
25
20
15
10
2.5 5.0 7.5 10.0 12.5 15.0 17.5 20.0
Bend radius/pipe diameter ratio

158 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

References

[1]

Examples

>>> bend_rounded_Crane(Di=.4020, rc=.4*5, angle=30)


0.09321910015613409

fluids.fittings.bend_miter(angle, Di=None, Re=None, roughness=0.0, L_unimpeded=None,


method='Rennels')
Returns loss coefficient for any single-joint miter bend in a pipe of angle angle, diameter Di, Reynolds number
Re, roughness roughness unimpeded downstream length L_unimpeded, and using the specified method. This
calculation has four methods available. The ‘Rennels’ method is based on a formula and extends to angles up to
150 degrees. The ‘Crane’ method extends only to 90 degrees; the ‘Miller’ and ‘Blevins’ methods extend to 120
degrees.
The Rennels [1] formula is:

𝐾 = 0.42 sin(𝛼/2) + 2.56 sin3 (𝛼/2)

The ‘Crane’, ‘Miller’, and ‘Blevins’ methods are all in part graph or tabular based and do not have straightforward
formulas.

Parameters
angle [float] Angle of bend, [degrees]
Di [float, optional] Inside diameter of pipe, [m]
Re [float, optional] Reynolds number of the pipe (no specification if inlet or outlet properties
should be used), [-]
roughness [float, optional] Roughness of bend wall, [m]
L_unimpeded [float, optional] The length of unimpeded pipe without any fittings, instrumen-
tation, or flow disturbances downstream (assumed 20 diameters if not specified), [m]
method [str, optional] The specified method to use; one of ‘Rennels’, ‘Miller’, ‘Crane’, or
‘Blevins’, [-]
Returns
K [float] Loss coefficient with respect to either upstream or downstream diameter, [-]

2.7. Fittings pressure drop (fluids.fittings) 159


Fluids Documentation, Release 1.0.21

Notes

This method is designed only for single-jointed miter bends. It is common for miter bends to have two or three
sections, to further reduce the loss coefficient. Some methods exist in [2] for taking this into account. Because
the additional configurations reduce the pressure loss, it is “common practice” to simply ignore their effect and
accept the slight overdesign.
The following figure illustrates the different methods.

Comparison of available methods for mitre bend losses


Angle (x) vs. Loss coefficient (y)
Re = 10000 Re = 40000 Re = 80000
2 2
2
1 1

0 0 0
0 100 0 100 0 100
Re = 200000 Re = 500000 Re = 1e+06
2
2 Rennels
2
Miller
1 1 1
Crane
Blevins
0 0 0
0 100 0 100 0 100
Re = 5e+06 Re = 1e+07 Re = 1e+08

2 2 2

1 1 1

0 0 0
0 100 0 100 0 100

References

[1], [2], [3], [4]

Examples

>>> bend_miter(150)
2.7128147734758103
>>> bend_miter(Di=.6, angle=45, Re=1e6, roughness=1e-5, L_unimpeded=20,
... method='Miller')
0.2944060416245169

160 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

fluids.fittings.bend_miter_Miller(Di, angle, Re, roughness=0.0, L_unimpeded=None)


Calculates the loss coefficient for a single miter bend according to Miller [1]. This is a sophisticated model
which uses corrections for pipe roughness, the length of the pipe downstream before another interruption, and a
correction for Reynolds number. It interpolates several times using several corrections graphs in [1].
Parameters
Di [float] Inside diameter of pipe, [m]
angle [float] Angle of miter bend, [degrees]
Re [float] Reynolds number of the pipe (no specification if inlet or outlet properties should be
used), [m]
roughness [float, optional] Roughness of bend wall, [m]
L_unimpeded [float, optional] The length of unimpeded pipe without any fittings, instrumen-
tation, or flow disturbances downstream (assumed 20 diameters if not specified), [m]
Returns
K [float] Loss coefficient [-]

Notes

Note the loss coefficient includes the surface friction of the pipe as if it was straight.

References

[1]

Examples

>>> bend_miter_Miller(Di=.6, angle=90, Re=2e6, roughness=2e-5,


... L_unimpeded=30*.6)
1.1921574594947664

fluids.fittings.helix(Di, rs, pitch, N, fd)


Returns loss coefficient for any size constant-pitch helix as shown in [1]. Has applications in immersed coils in
tanks.
[︃ √︀ ]︃
(2𝜋𝑟)2 + 𝑝2
𝐾=𝑁 𝑓 + 0.20 + 4.8𝑓
𝑑

Parameters
Di [float] Inside diameter of pipe, [m]
rs [float] Radius of spiral, [m]
pitch [float] Distance between two subsequent coil centers, [m]
N [float] Number of coils in the helix [-]
fd [float] Darcy friction factor [-]
Returns
K [float] Loss coefficient [-]

2.7. Fittings pressure drop (fluids.fittings) 161


Fluids Documentation, Release 1.0.21

Notes

Formulation based on peak secondary flow as in two 180 degree bends per coil. Flow separation ignored. No f,
Re, geometry limitations. Source not compared against others.

References

[1]

Examples

>>> helix(Di=0.01, rs=0.1, pitch=.03, N=10, fd=.0185)


14.525134924495514

fluids.fittings.spiral(Di, rmax, rmin, pitch, fd)


Returns loss coefficient for any size constant-pitch spiral as shown in [1]. Has applications in immersed coils in
tanks.
[︂ (︂ )︂ ]︂
𝑟𝑚𝑎𝑥 − 𝑟𝑚𝑖𝑛 𝑟𝑚𝑎𝑥 + 𝑟𝑚𝑖𝑛 13.2𝑓
𝐾= 𝑓𝜋 + 0.20 + 4.8𝑓 +
𝑝 𝑑 (𝑟𝑚𝑖𝑛 /𝑑)2

Parameters
Di [float] Inside diameter of pipe, [m]
rmax [float] Radius of spiral at extremity, [m]
rmin [float] Radius of spiral at end near center, [m]
pitch [float] Distance between two subsequent coil centers, [m]
fd [float] Darcy friction factor [-]
Returns
K [float] Loss coefficient [-]

Notes

Source not compared against others.

References

[1]

Examples

>>> spiral(Di=0.01, rmax=.1, rmin=.02, pitch=.01, fd=0.0185)


7.950918552775473

162 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

2.7.4 Contractions/Reducers

fluids.fittings.contraction_sharp(Di1, Di2, fd=None, Re=None, roughness=0.0, method='Rennels')


Returns loss coefficient for a sharp edged pipe contraction.
This calculation has two methods available. The ‘Rennels’ [2] method is a fit for turbulent regimes, while the
Hooper method is more complicated and claims to have full dependence on Re including a laminar transition at
Re of 2500 (based on the original pipe diameter).
The Rennels [1] formulas are:

𝐾1 = 0.0696(1 − 𝛽 5 )𝜆2 + (𝜆 − 1)2

𝜆 = 1 + 0.622(1 − 0.215𝛽 2 − 0.785𝛽 5 )

𝛽 = 𝑑2 /𝑑1
The Hooper [1] formulas are:
If 𝑅𝑒1 ≤ 2500:
[︂ ]︂ [︃(︂ )︂4 ]︃
160 𝐷1
𝐾1 = 1.2 + −1
Re1 𝐷2

If 𝑅𝑒1 > 2500:


(︂ )︂2 [︃(︂ )︂2 ]︃
𝐷1 𝐷1
𝐾1 = [0.6 + 0.48𝑓1 ] −1
𝐷2 𝐷2

Converting the loss coefficient to a consistent basis:

𝐷24
𝐾2 = 𝐾1
𝐷14

For the Crane formula see contraction_conical_Crane with a length of zero.

Parameters
Di1 [float] Inside diameter of original (larger) pipe, [m]
Di2 [float] Inside diameter of following (smaller) pipe, [m]
fd [float, optional] Darcy friction factor in original pipe; used only in the Hooper method and
will be calculated from Re if not given, [-]

2.7. Fittings pressure drop (fluids.fittings) 163


Fluids Documentation, Release 1.0.21

Re [float, optional] Reynolds number of the pipe (used in Hooper method, [m]
roughness [float, optional] Roughness of original pipe (used in Hooper method only if no fric-
tion factor given), [m]
method [str] The calculation method to use; one of ‘Hooper’, ‘Rennels’, or ‘Crane’ [-]
Returns
K [float] Loss coefficient in terms of the following pipe [-]

Notes

A value of 0.506 or simply 0.5 is often used.

References

[1], [2]

Examples

>>> contraction_sharp(Di1=1, Di2=0.4)


0.5301269161
>>> contraction_sharp(Di1=1, Di2=0.4, Re=1e5, method='Hooper')
0.5112534765

The Hooper method supports laminar flow, while Rennels is not even Re aware.

>>> contraction_sharp(Di1=1, Di2=0.4, Re=1e3, method='Hooper')


1.325184

Crane offers similar results:

>>> contraction_sharp(3.0, 2.0, method='Crane')


0.2777777

fluids.fittings.contraction_round(Di1, Di2, rc, method='Rennels')


Returns loss coefficient for any any round edged pipe contraction. This calculation has three methods available.
The ‘Miller’ [2] method is a bivariate spline digitization of a graph; the ‘Idelchik’ [3] method is an interpolation
using a formula and a table of values.
The most conservative formulation is that of Rennels; with fairly similar. The ‘Idelchik’ method is more conser-
vative and less complex; it offers a straight-line curve where the others curves are curved.
The Rennels [1] formulas are:
(︂ )︂ (︂ √︂ )︂
𝑟 𝑟
𝐾 = 0.0696 1 − 0.569 1− 𝛽 (1 − 𝛽 5 )𝜆2 + (𝜆 − 1)2
𝑑2 𝑑2
(︂ √︂ )︂4
𝑟 𝑟
𝜆 = 1 + 0.622 1 − 0.30 − 0.70 (1 − 0.215𝛽 2 − 0.785𝛽 5 )
𝑑2 𝑑2
𝛽 = 𝑑2 /𝑑1

Parameters

164 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

Di1 [float] Inside diameter of original pipe, [m]


Di2 [float] Inside diameter of following pipe, [m]
rc [float] Radius of curvature of the contraction, [m]
method [str] The calculation method to use; one of ‘Rennels’, ‘Miller’, or ‘Idelchik’, [-]
Returns
K [float] Loss coefficient in terms of the following pipe [-]

Notes

Rounding radius larger than 0.14Di2 prevents flow separation from the wall. Further increase in rounding radius
continues to reduce loss coefficient.

Comparison of available methods for rounded pipe contractions


Rennels, ratio = 0.1
Miller, ratio = 0.1
0.5 Idelchik, ratio = 0.1
Rennels, ratio = 0.06
Miller, ratio = 0.06
0.4 Idelchik, ratio = 0.06
Rennels, ratio = 0.04
Miller, ratio = 0.04
0.3 Idelchik, ratio = 0.04
K

Rennels, ratio = 0.02


Miller, ratio = 0.02
0.2 Idelchik, ratio = 0.02
Rennels, ratio = 0
0.1 Miller, ratio = 0
Idelchik, ratio = 0

0.0
0.0 0.2 0.4 0.6 0.8 1.0
Area ratio

2.7. Fittings pressure drop (fluids.fittings) 165


Fluids Documentation, Release 1.0.21

References

[1], [2], [3]

Examples

>>> contraction_round(Di1=1, Di2=0.4, rc=0.04)


0.1783332490866574

fluids.fittings.contraction_round_Miller(Di1, Di2, rc)


Returns loss coefficient for any round edged pipe contraction using the method of Miller [1]. This method uses
a spline fit to a graph with area ratios 0 to 1, and radius ratios (rc/Di2) from 0.1 to 0.
Parameters
Di1 [float] Inside diameter of original pipe, [m]
Di2 [float] Inside diameter of following pipe, [m]
rc [float] Radius of curvature of the contraction, [m]
Returns
K [float] Loss coefficient in terms of the following pipe, [-]

Notes

This method normally gives lower losses than the Rennels formulation.

References

[1]

Examples

>>> contraction_round_Miller(Di1=1, Di2=0.4, rc=0.04)


0.08565953051298639

fluids.fittings.contraction_conical(Di1, Di2, fd=None, l=None, angle=None, Re=None, roughness=0.0,


method='Rennels')
Returns the loss coefficient for any conical pipe contraction. This calculation has five methods available. The
‘Idelchik’ [2] and ‘Blevins’ [3] methods use interpolation among tables of values; ‘Miller’ uses a 2d spline
representation of a graph; and the ‘Rennels’ [1], ‘Crane’ [4], ‘Swamee’ [5] and ‘Hooper’ methods use formulas
for their calculations.
The ‘Rennels’ [1] formulas are:

𝐾2 = 𝐾𝑓 𝑟,2 + 𝐾𝑐𝑜𝑛𝑣,2

𝑓𝑑 (1 − 𝛽 4 )
𝐾𝑓 𝑟,2 =
8 sin(𝜃/2)
𝐾𝑐𝑜𝑛𝑣,2 = 0.0696[1 + 𝐶𝐵 (sin(𝛼/2) − 1)](1 − 𝛽 5 )𝜆2 + (𝜆 − 1)2

𝜆 = 1 + 0.622(𝛼/180)0.8 (1 − 0.215𝛽 2 − 0.785𝛽 5 )

166 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

𝛽 = 𝑑2 /𝑑1
The ‘Swamee’ [5] formula is:

𝐾 = 0.315𝜃1/3

The Hooper [7] formulas are:


If 𝑅𝑒1 ≤ 2500:
[︂ ]︂ [︃(︂ )︂4 ]︃
160 𝐷1
𝐾1,𝑠ℎ𝑎𝑟𝑝 = 1.2 + −1
Re1 𝐷2

If 𝑅𝑒1 > 2500:


(︂ )︂2 [︃(︂ )︂2 ]︃
𝐷1 𝐷1
𝐾1,𝑠ℎ𝑎𝑟𝑝 = [0.6 + 0.48𝑓1 ] −1
𝐷2 𝐷2

In both cases, a multiplier is added for the angle:


For angles between 45 and 180 degrees:
√︂
𝜃
𝐾1 = 𝐾1,𝑠ℎ𝑎𝑟𝑝 sin
2
For angles between 0 and 45 degrees:

𝜃
𝐾1 = 𝐾1,𝑠ℎ𝑎𝑟𝑝 1.6 sin
2
Converting the Hooper loss coefficient to a consistent basis:

𝐷24
𝐾2 = 𝐾1
𝐷14

Parameters
Di1 [float] Inside pipe diameter of the larger, upstream, pipe, [m]
Di2 [float] Inside pipe diameter of the smaller, downstream, pipe, [m]
fd [float, optional] Darcy friction factor; used only in the Rennels and Hooper method and will
be calculated from Re and roughness if not given, [-]
l [float, optional] Length of the contraction, optional [m]
angle [float, optional] Angle of contraction (180 = sharp, 0 = infinitely long contraction), op-
tional [degrees]

2.7. Fittings pressure drop (fluids.fittings) 167


Fluids Documentation, Release 1.0.21

Re [float, optional] Reynolds number of the pipe (used in Rennels and Hooper method only if
no friction factor given), [m]
roughness [float, optional] Roughness of bend wall (used in Rennel method if no friction factor
given), [m]
method [str, optional] The method to use for the calculation; one of ‘Rennels’, ‘Idelchik’,
‘Crane’, ‘Swamee’ ‘Hooper’, ‘Miller’, or ‘Blevins’, [-]
Returns
K [float] Loss coefficient in terms of the following pipe [-]

Notes

Cheap and has substantial impact on pressure drop.


The ‘Idelchik’ method includes two tabular interpolations; its friction term is limited to angles between 2 and
20 degrees and area ratios 0.05 to 0.6, while its main term is limited to length over diameter ratios 0.025 to 0.6.
This seems to give it high results for angles < 25 degrees.
The ‘Blevins’ method is based on Idelchik data; it should not be used, because its data jumps around and its data
is limited to area ratios .1 to 0.83, and length over diameter ratios 0 to 0.6. The ‘Miller’ method jumps around
as well. Unlike most of Miller’s method, there is no correction for Reynolds number.
There is quite a bit of variance in the predictions of the methods, as demonstrated by the following figure.

Comparison of available methods for conical pipe contractions


2 Angle
Area ratio (x) vs. Loss8 Angle
4 Angle
coefficient (y)
10 Angle
0.5
0.5
0.2 0.2
Rennels
0.0 0.0 0.0 0.0 Idelchik
0 15 Angle 1 0 20 Angle 1 0 25 Angle 1 0 30 Angle 1 Crane
Swamee
0.2 0.2 0.2 0.2 Blevins
Miller
0.0 0.0 0.0 0.0 Hooper
0 45 Angle 1 0 60 Angle 1 0 90 Angle 1 0 120 Angle 1
0.5 0.5
0.25 0.25

0.00 0.00 0.0 0.0


0 135 Angle 1 0 150 Angle 1 0 165 Angle 1 0 180 Angle 1
0.5 0.5 0.5 0.5

0.0 0.0 0.0 0.0


0 1 0 1 0 1 0 1

168 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

References

[1], [2], [3], [4], [5], [6], [7]

Examples

>>> contraction_conical(Di1=0.1, Di2=0.04, l=0.04, Re=1E6)


0.15639885880609544

fluids.fittings.contraction_conical_Crane(Di1, Di2, l=None, angle=None)


Returns loss coefficient for a conical pipe contraction as shown in Crane TP 410M [1] between 0 and 180 degrees.
If 𝜃 < 45∘ :
𝜃
𝐾2 = 0.8 sin (1 − 𝛽 2 )
2
otherwise:
√︂
𝜃
𝐾2 = 0.5 sin (1 − 𝛽 2 )
2

𝛽 = 𝑑2 /𝑑1
Parameters
Di1 [float] Inside pipe diameter of the larger, upstream, pipe, [m]
Di2 [float] Inside pipe diameter of the smaller, downstream, pipe, [m]
l [float, optional] Length of the contraction [m]
angle [float, optional] Angle of contraction [degrees]
Returns
K [float] Loss coefficient in terms of the following (smaller) pipe [-]

Notes

Cheap and has substantial impact on pressure drop. Note that the nomenclature in [1] is somewhat different - the
smaller pipe is called 1, and the larger pipe is called 2; and so the beta ratio is reversed, and the fourth power of
beta used in their equation is not necessary.

References

[1]

Examples

>>> contraction_conical_Crane(Di1=0.0779, Di2=0.0525, l=0)


0.2729017979998056

2.7. Fittings pressure drop (fluids.fittings) 169


Fluids Documentation, Release 1.0.21

fluids.fittings.contraction_beveled(Di1, Di2, l=None, angle=None)


Returns loss coefficient for any sharp beveled pipe contraction as shown in [1].

𝐾 = 0.0696[1 + 𝐶𝐵 (sin(𝛼/2) − 1)](1 − 𝛽 5 )𝜆2 + (𝜆 − 1)2


[︂ (︂(︁ )︂]︂
𝛼 )︁0.8
𝜆 = 1 + 0.622 1 + 𝐶𝐵 − 1 (1 − 0.215𝛽 2 − 0.785𝛽 5 )
180
𝑙 2𝛽 tan(𝛼/2)
𝐶𝐵 =
𝑑2 1−𝛽
𝛽 = 𝑑2 /𝑑1

Parameters
Di1 [float] Inside diameter of original pipe, [m]
Di2 [float] Inside diameter of following pipe, [m]
l [float] Length of the bevel along the pipe axis ,[m]
angle [float] Angle of bevel, [degrees]
Returns
K [float] Loss coefficient in terms of the following pipe [-]

References

[1]

Examples

>>> contraction_beveled(Di1=0.5, Di2=0.1, l=.7*.1, angle=120)


0.40946469413070485

170 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

2.7.5 Expansions/Diffusers

fluids.fittings.diffuser_sharp(Di1, Di2, Re=None, fd=None, roughness=0.0, method='Rennels')


Returns loss coefficient for any sudden pipe diameter expansion according to the specified method.
The main theoretical formula is as follows, in [1] and in other sources and is implemented under the name Rennels.

𝐾2 = (1 − 𝛽 2 )2

The Hooper [2] formulas are:


If 𝑅𝑒1 ≤ 4000:
[︃ (︂ )︂4 ]︃
𝐷1
𝐾1 = 2 1 −
𝐷2

else:
⎧[︃ ⎫
(︂ )︂2 ]︃2 ⎬
⎨ 𝐷1
𝐾1 = [1 + 0.8𝑓𝑑,1 ] 1−
⎩ 𝐷2 ⎭

Parameters
Di1 [float] Inside diameter of original pipe (smaller), [m]
Di2 [float] Inside diameter of following pipe (larger), [m]
Re [float, optional] Reynolds number of the pipe for original (smaller) pipe, used in Hooper
method [-]
fd [float, optional] Darcy friction factor for original (smaller) pipe [-]
roughness [float, optional] Roughness of pipe wall (used in Hooper method if no friction factor
given), [m]
method [str] The method to use for the calculation; one of ‘Rennels’, ‘Hooper’ [-]
Returns
K [float] Loss coefficient with respect to the original (smaller) pipe [-]

Notes

Highly accurate.

References

[1], [2]

Examples

>>> diffuser_sharp(Di1=.5, Di2=1)


0.5625
>>> diffuser_sharp(Di1=.5, Di2=1, Re=1e5, fd=1e-7, method='Hooper')
0.562500045

2.7. Fittings pressure drop (fluids.fittings) 171


Fluids Documentation, Release 1.0.21

fluids.fittings.diffuser_conical(Di1, Di2, l=None, angle=None, fd=None, Re=None, roughness=0.0,


method='Rennels')
Returns the loss coefficient for any conical pipe diffuser. This calculation has six methods available.
The ‘Rennels’ [1] formulas are as follows (three different formulas are used, depending on the angle and the ratio
of diameters):
For 0 to 20 degrees, all aspect ratios:

𝑓 (1 − 𝛽 4 )
𝐾1 = 8.30[tan(𝛼/2)]1.75 (1 − 𝛽 2 )2 +
8 sin(𝛼/2)
For 20 to 60 degrees, beta < 0.5:
{︃ ]︂0.5 √︂ }︃
2𝜋(𝛼 − 15∘ ) 𝛼 − 20∘ 𝑓 (1 − 𝛽 4 )
[︂
4 2 2
𝐾1 = 1.366 sin − 0.170 − 3.28(0.0625 − 𝛽 ) (1 − 𝛽 ) +
180 40∘ 8 sin(𝛼/2)

For 20 to 60 degrees, beta >= 0.5:


{︃ ]︂0.5 }︃
2𝜋(𝛼 − 15∘ ) 𝑓 (1 − 𝛽 4 )
[︂
𝐾1 = 1.366 sin − 0.170 (1 − 𝛽 2 )2 +
180 8 sin(𝛼/2)

For 60 to 180 degrees, beta < 0.5:


[︃ √︂ ]︃
4 6 𝛼 − 60∘
𝐾1 = 1.205 − 3.28(0.0625 − 𝛽 ) − 12.8𝛽 (1 − 𝛽 2 )2
120∘

For 60 to 180 degrees, beta >= 0.5:


[︃ √︂ ]︃
𝛼 − 60∘
𝐾1 = 1.205 − 0.20 (1 − 𝛽 2 )2
120∘

The Swamee [5] formula is:


{︃ [︂ (︂ )︂]︂0.533𝑟−2.6 }︃−0.5
0.25 0.6 𝜋 − 𝜃
𝐾= 1 + 1.67
𝜃3 𝑟 𝜃

The Hooper [6] formulas are:


If 𝑅𝑒1 ≤ 4000:
[︃ (︂ )︂4 ]︃
𝐷1
𝐾𝑠ℎ𝑎𝑟𝑝 = 2 1 −
𝐷2

else:
⎧[︃ ⎫
(︂ )︂2 ]︃2 ⎬
⎨ 𝐷1
𝐾𝑠ℎ𝑎𝑟𝑝 = [1 + 0.8𝑓𝑑,1 ] 1−
⎩ 𝐷2 ⎭

If the angle > 45 degrees, 𝐾 = 𝐾𝑠ℎ𝑎𝑟𝑝 otherwise


(︂ )︂
𝜃
𝐾 = 2.6 sin 𝐾𝑠ℎ𝑎𝑟𝑝
2

Parameters

172 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

Di1 [float] Inside diameter of original pipe (smaller), [m]


Di2 [float] Inside diameter of following pipe (larger), [m]
l [float, optional] Length of the contraction along the pipe axis, optional, [m]
angle [float, optional] Angle of contraction, [degrees]
fd [float, optional] Darcy friction factor [-]
Re [float, optional] Reynolds number of the pipe (used in Rennels method only if no friction
factor given), [m]
roughness [float, optional] Roughness of bend wall (used in Rennel method if no friction factor
given), [m]
method [str] The method to use for the calculation; one of ‘Rennels’, ‘Crane’, ‘Miller’,
‘Swamee’, ‘Idelchik’, or ‘Hooper’ [-]
Returns
K [float] Loss coefficient with respect to smaller, upstream diameter [-]

Notes

The Miller method changes around quite a bit.


There is quite a bit of variance in the predictions of the methods, as demonstrated by the following figure.

References

[1], [2], [3], [4], [5], [6]

Examples

>>> diffuser_conical(Di1=1/3., Di2=1.0, angle=50.0, Re=1E6)


0.8027721093415322

fluids.fittings.diffuser_conical_staged(Di1, Di2, DEs, ls, fd=None, method='Rennels')


Returns loss coefficient for any series of staged conical pipe expansions as shown in [1]. Five different formulas
are used, depending on the angle and the ratio of diameters. This function calls diffuser_conical.
Parameters
Di1 [float] Inside diameter of original pipe (smaller), [m]
Di2 [float] Inside diameter of following pipe (larger), [m]
DEs [array] Diameters of intermediate sections, [m]

2.7. Fittings pressure drop (fluids.fittings) 173


Fluids Documentation, Release 1.0.21

Comparison of available methods for conical pipe diffusers


2 Angle
Area ratio (x) vs. Loss8 Angle
4 Angle
coefficient (y)
10 Angle
0.2 0.2
0.2 0.2
Rennels
0.0 0.0 0.0 0.0 Crane
0 15 Angle 1 0 20 Angle 1 0 25 Angle 1 0 30 Angle 1 Miller
0.5 Idelchik
0.2 0.25
0.5 Hooper
0.0 0.00 0.0 0.0
0 45 Angle 1 0 60 Angle 1 0 90 Angle 1 0 120 Angle 1
1 1 1
1

0 0 0 0
0 135 Angle 1 0 150 Angle 1 0 165 Angle 1 0 180 Angle 1
1 1 1 1

0 0 0 0
0 1 0 1 0 1 0 1

174 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

ls [array] Lengths of the various sections, size 1 more than DEs, [m]
fd [float] Darcy friction factor [-]
method [str] The method to use for the calculation; one of ‘Rennels’, ‘Crane’, ‘Miller’,
‘Swamee’, or ‘Idelchik’ [-]
Returns
K [float] Loss coefficient with respect to smaller, upstream diameter [-]

Notes

Only lengths of sections currently allowed. This could be changed to understand angles also.
Formula doesn’t make much sense, as observed by the example comparing a series of conical sections. Use only
for small numbers of segments of highly differing angles.

References

[1]

Examples

>>> diffuser_conical_staged(Di1=1., Di2=10., DEs=[2,3,4], ls=[1.1,1.2,1.3,1.4],␣


˓→fd=0.01)

1.9317533188274658

fluids.fittings.diffuser_curved(Di1, Di2, l)
Returns loss coefficient for any curved wall pipe expansion as shown in [1].

𝐾1 = 𝜑(1.43 − 1.3𝛽 2 )(1 − 𝛽 2 )2


(︂ )︂2 (︂ )︂3 (︂ )︂4
𝑙 𝑙 𝑙 𝑙
𝜑 = 1.01 − 0.624 + 0.30 − 0.074 + 0.0070
𝑑1 𝑑1 𝑑1 𝑑1

Parameters
Di1 [float] Inside diameter of original pipe (smaller), [m]
Di2 [float] Inside diameter of following pipe (larger), [m]
l [float] Length of the curve along the pipe axis, [m]
Returns
K [float] Loss coefficient [-]

2.7. Fittings pressure drop (fluids.fittings) 175


Fluids Documentation, Release 1.0.21

Notes

Beta^2 should be between 0.1 and 0.9. A small mismatch between tabulated values of this function in table 11.3
is observed with the equation presented.

References

[1]

Examples

>>> diffuser_curved(Di1=.25**0.5, Di2=1., l=2.)


0.2299781250000002

fluids.fittings.diffuser_pipe_reducer(Di1, Di2, l, fd1, fd2=None)


Returns loss coefficient for any pipe reducer pipe expansion as shown in [1]. This is an approximate formula.

0.20𝑙 𝑓1 (1 − 𝛽) 0.20𝑙 4
𝐾𝑓 = 𝑓1 + + 𝑓2 𝛽
𝑑1 8 sin(𝛼/2) 𝑑2
(︂ )︂
−1 𝑑1 − 𝑑2
𝛼 = 2 tan
1.20𝑙
Parameters
Di1 [float] Inside diameter of original pipe (smaller), [m]
Di2 [float] Inside diameter of following pipe (larger), [m]
l [float] Length of the pipe reducer along the pipe axis, [m]
fd1 [float] Darcy friction factor at inlet diameter [-]
fd2 [float] Darcy friction factor at outlet diameter, optional [-]
Returns
K [float] Loss coefficient [-]

Notes

Industry lack of standardization prevents better formulas from being developed. Add 15% if the reducer is
eccentric. Friction factor at outlet will be assumed the same as at inlet if not specified.
Doubt about the validity of this equation is raised.

References

[1]

176 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

Examples

>>> diffuser_pipe_reducer(Di1=.5, Di2=.75, l=1.5, fd1=0.07)


0.06873244301714816

2.7.6 Tees

fluids.fittings.K_branch_converging_Crane(D_run, D_branch, Q_run, Q_branch, angle=90.0)


Returns the loss coefficient for the branch of a converging tee or wye according to the Crane method [1].
[︃ (︂ )︂2 (︂ )︂2 (︂ )︂2 ]︃
𝑄𝑏𝑟𝑎𝑛𝑐ℎ 𝑄𝑏𝑟𝑎𝑛𝑐ℎ 𝐹 𝑄𝑏𝑟𝑎𝑛𝑐ℎ
𝐾𝑏𝑟𝑎𝑛𝑐ℎ = 𝐶 1 + 𝐷 2 −𝐸 1− − 2
𝑄𝑐𝑜𝑚𝑏 · 𝛽𝑏𝑟𝑎𝑛𝑐ℎ 𝑄𝑐𝑜𝑚𝑏 𝛽𝑏𝑟𝑎𝑛𝑐ℎ 𝑄𝑐𝑜𝑚𝑏

𝐷𝑏𝑟𝑎𝑛𝑐ℎ 𝐷𝑏𝑟𝑎𝑛𝑐ℎ
𝛽𝑏𝑟𝑎𝑛𝑐ℎ = =
𝐷𝑐𝑜𝑚𝑏 𝐷𝑟𝑢𝑛
In the above equation, D = 1, E = 2. See the notes for definitions of F and C. The run and combined diameter are
assumed the same in this model.
Parameters
D_run [float] Diameter of the straight-through inlet portion of the tee or wye [m]
D_branch [float] Diameter of the pipe attached at an angle to the straight-through, [m]
Q_run [float] Volumetric flow rate in the straight-through inlet of the tee or wye, [m^3/s]
Q_branch [float] Volumetric flow rate in the pipe attached at an angle to the straight- through,
[m^3/s]
angle [float, optional] Angle the branch makes with the straight-through (tee=90, wye<90) [de-
grees]
Returns
K [float] Loss coefficient of branch with respect to the velocity and inside diameter of the com-
bined flow outlet [-]

Notes

F is linearly interpolated from the table of angles below. There is no cutoff to prevent angles from being larger
or smaller than 30 or 90 degrees.

Angle [°]
30 1.74
45 1.41
60 1
90 0

If 𝛽𝑏𝑟𝑎𝑛𝑐ℎ
2
≤ 0.35, C = 1
If 𝛽𝑏𝑟𝑎𝑛𝑐ℎ
2
> 0.35 and 𝑄𝑏𝑟𝑎𝑛𝑐ℎ /𝑄𝑐𝑜𝑚𝑏 > 0.4, C = 0.55.
If neither of the above conditions are met:
(︂ )︂
𝑄𝑏𝑟𝑎𝑛𝑐ℎ
𝐶 = 0.9 1 −
𝑄𝑐𝑜𝑚𝑏

2.7. Fittings pressure drop (fluids.fittings) 177


Fluids Documentation, Release 1.0.21

Note that there is an error in the text of [1]; the errata can be obtained here: http://www.flowoffluids.com/
publications/tp-410-errata.aspx

References

[1]

Examples

Example 7-35 of [1]. A DN100 schedule 40 tee has 1135 liters/minute of water passing through the straight
leg, and 380 liters/minute of water converging with it through a 90° branch. Calculate the loss coefficient in the
branch. The calculated value there is -0.04026.

>>> K_branch_converging_Crane(0.1023, 0.1023, 0.018917, 0.00633)


-0.0404410851362

fluids.fittings.K_run_converging_Crane(D_run, D_branch, Q_run, Q_branch, angle=90)


Returns the loss coefficient for the run of a converging tee or wye according to the Crane method [1].
[︃ (︂ )︂2 (︂ )︂2 (︂ )︂2 ]︃
𝑄𝑏𝑟𝑎𝑛𝑐ℎ 𝑄𝑏𝑟𝑎𝑛𝑐ℎ 𝐹 𝑄𝑏𝑟𝑎𝑛𝑐ℎ
𝐾𝑏𝑟𝑎𝑛𝑐ℎ = 𝐶 1 + 𝐷 2 −𝐸 1− − 2
𝑄𝑐𝑜𝑚𝑏 · 𝛽𝑏𝑟𝑎𝑛𝑐ℎ 𝑄𝑐𝑜𝑚𝑏 𝛽𝑏𝑟𝑎𝑛𝑐ℎ 𝑄𝑐𝑜𝑚𝑏

𝐷𝑏𝑟𝑎𝑛𝑐ℎ 𝐷𝑏𝑟𝑎𝑛𝑐ℎ
𝛽𝑏𝑟𝑎𝑛𝑐ℎ = =
𝐷𝑐𝑜𝑚𝑏 𝐷𝑟𝑢𝑛
In the above equation, C=1, D=0, E=1. See the notes for definitions of F and also the special case of 90°. The
run and combined diameter are assumed the same in this model.
Parameters
D_run [float] Diameter of the straight-through inlet portion of the tee or wye [m]
D_branch [float] Diameter of the pipe attached at an angle to the straight-through, [m]
Q_run [float] Volumetric flow rate in the straight-through inlet of the tee or wye, [m^3/s]
Q_branch [float] Volumetric flow rate in the pipe attached at an angle to the straight- through,
[m^3/s]
angle [float, optional] Angle the branch makes with the straight-through (tee=90, wye<90) [de-
grees]
Returns
K [float] Loss coefficient of run with respect to the velocity and inside diameter of the combined
flow outlet [-]

Notes

F is linearly interpolated from the table of angles below. There is no cutoff to prevent angles from being larger
or smaller than 30 or 60 degrees. The switch to the special 90° happens at 75°.

Angle [°]
30 1.74
45 1.41
60 1

178 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

For the special case of 90°, the formula used is as follows.


(︂ )︂ (︂ )︂2
𝑄𝑏𝑟𝑎𝑛𝑐ℎ 𝑄𝑏𝑟𝑎𝑛𝑐ℎ
𝐾𝑟𝑢𝑛 = 1.55 −
𝑄𝑐𝑜𝑚𝑏 𝑄𝑐𝑜𝑚𝑏

References

[1]

Examples

Example 7-35 of [1]. A DN100 schedule 40 tee has 1135 liters/minute of water passing through the straight leg,
and 380 liters/minute of water converging with it through a 90° branch. Calculate the loss coefficient in the run.
The calculated value there is 0.03258.

>>> K_run_converging_Crane(0.1023, 0.1023, 0.018917, 0.00633)


0.32575847854551254

fluids.fittings.K_branch_diverging_Crane(D_run, D_branch, Q_run, Q_branch, angle=90)


Returns the loss coefficient for the branch of a diverging tee or wye according to the Crane method [1].
[︃ (︂ )︂2 (︂ )︂ ]︃
𝑄𝑏𝑟𝑎𝑛𝑐ℎ 𝑄𝑏𝑟𝑎𝑛𝑐ℎ
𝐾𝑏𝑟𝑎𝑛𝑐ℎ = 𝐺 1 + 𝐻 2 −𝐽 2 cos 𝜃
𝑄𝑐𝑜𝑚𝑏 𝛽𝑏𝑟𝑎𝑛𝑐ℎ 𝑄𝑐𝑜𝑚𝑏 𝛽𝑏𝑟𝑎𝑛𝑐ℎ

𝐷𝑏𝑟𝑎𝑛𝑐ℎ 𝐷𝑏𝑟𝑎𝑛𝑐ℎ
𝛽𝑏𝑟𝑎𝑛𝑐ℎ = =
𝐷𝑐𝑜𝑚𝑏 𝐷𝑟𝑢𝑛
See the notes for definitions of H, J, and G. The run and combined diameter are assumed the same in this model.
Parameters
D_run [float] Diameter of the straight-through inlet portion of the tee or wye [m]
D_branch [float] Diameter of the pipe attached at an angle to the straight-through, [m]
Q_run [float] Volumetric flow rate in the straight-through outlet of the tee or wye, [m^3/s]
Q_branch [float] Volumetric flow rate in the pipe attached at an angle to the straight- through,
[m^3/s]
angle [float, optional] Angle the branch makes with the straight-through (tee=90, wye<90) [de-
grees]
Returns
K [float] Loss coefficient of branch with respect to the velocity and inside diameter of the com-
bined flow inlet [-]

Notes

If 𝛽𝑏𝑟𝑎𝑛𝑐ℎ = 1, 𝜃 = 90∘ , H = 0.3 and J = 0. Otherwise H = 1 and J = 2.


G is determined according to the following pseudocode:

2.7. Fittings pressure drop (fluids.fittings) 179


Fluids Documentation, Release 1.0.21

if angle < 75:


if beta2 <= 0.35:
if Q_ratio <= 0.4:
G = 1.1 - 0.7*Q_ratio
else:
G = 0.85
else:
if Q_ratio <= 0.6:
G = 1.0 - 0.6*Q_ratio
else:
G = 0.6
else:
if beta2 <= 2/3.:
G = 1
else:
G = 1 + 0.3*Q_ratio*Q_ratio

Note that there are several errors in the text of [1]; the errata can be obtained here: http://www.flowoffluids.com/
publications/tp-410-errata.aspx

References

[1]

Examples

Example 7-36 of [1]. A DN150 schedule 80 wye has 1515 liters/minute of water exiting the straight leg, and 950
liters/minute of water exiting it through a 45° branch. Calculate the loss coefficient in the branch. The calculated
value there is 0.4640.

>>> K_branch_diverging_Crane(0.146, 0.146, 0.02525, 0.01583, angle=45)


0.4639895627496694

fluids.fittings.K_run_diverging_Crane(D_run, D_branch, Q_run, Q_branch, angle=90)


Returns the loss coefficient for the run of a converging tee or wye according to the Crane method [1].
(︂ )︂2
𝑄𝑏𝑟𝑎𝑛𝑐ℎ
𝐾𝑟𝑢𝑛 = 𝑀
𝑄𝑐𝑜𝑚𝑏
𝐷𝑏𝑟𝑎𝑛𝑐ℎ 𝐷𝑏𝑟𝑎𝑛𝑐ℎ
𝛽𝑏𝑟𝑎𝑛𝑐ℎ = =
𝐷𝑐𝑜𝑚𝑏 𝐷𝑟𝑢𝑛
See the notes for the definition of M. The run and combined diameter are assumed the same in this model.
Parameters
D_run [float] Diameter of the straight-through inlet portion of the tee or wye [m]
D_branch [float] Diameter of the pipe attached at an angle to the straight-through, [m]
Q_run [float] Volumetric flow rate in the straight-through outlet of the tee or wye, [m^3/s]
Q_branch [float] Volumetric flow rate in the pipe attached at an angle to the straight- through,
[m^3/s]
angle [float, optional] Angle the branch makes with the straight-through (tee=90, wye<90) [de-
grees]

180 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

Returns
K [float] Loss coefficient of run with respect to the velocity and inside diameter of the combined
flow inlet [-]

Notes

M is calculated according to the following pseudocode:

if beta*beta <= 0.4:


M = 0.4
elif Q_branch/Q_comb <= 0.5:
M = 2*(2*Q_branch/Q_comb - 1)
else:
M = 0.3*(2*Q_branch/Q_comb - 1)

References

[1]

Examples

Example 7-36 of [1]. A DN150 schedule 80 wye has 1515 liters/minute of water exiting the straight leg, and 950
liters/minute of water exiting it through a 45° branch. Calculate the loss coefficient in the branch. The calculated
value there is -0.06809.

>>> K_run_diverging_Crane(0.146, 0.146, 0.02525, 0.01583, angle=45)


-0.06810067607153049

2.7.7 Valves

fluids.fittings.K_gate_valve_Crane(D1, D2, angle, fd=None)


Returns loss coefficient for a gate valve of types wedge disc, double disc, or plug type, as shown in [1].
If = 1 and = 0:

𝐾 = 𝐾1 = 𝐾2 = 8𝑓𝑑

If < 1 and <= 45°:


𝐾 + sin 𝜃2 0.8(1 − 𝛽 2 ) + 2.6(1 − 𝛽 2 )2
[︀ ]︀
𝐾2 =
𝛽4
If < 1 and > 45°:
√︁
𝐾 + 0.5 sin 𝜃2 (1 − 𝛽 2 ) + (1 − 𝛽 2 )2
𝐾2 =
𝛽4
Parameters
D1 [float] Diameter of the valve seat bore (must be smaller or equal to D2), [m]
D2 [float] Diameter of the pipe attached to the valve, [m]

2.7. Fittings pressure drop (fluids.fittings) 181


Fluids Documentation, Release 1.0.21

angle [float] Angle formed by the reducer in the valve, [degrees]


fd [float, optional] Darcy friction factor calculated for the actual pipe flow in clean steel (rough-
ness = 0.0018 inch) in the fully developed turbulent region; do not specify this to use the
original Crane friction factor! [-]
Returns
K [float] Loss coefficient with respect to the pipe inside diameter [-]

Notes

This method is not valid in the laminar regime and the pressure drop will be underestimated in those conditions
[2].

References

[1], [2]

Examples

Example 7-4 in [1]; a 150 by 100 mm class 600 steel gate valve, conically tapered ports, length 550 mm, back
of sear ring ~150 mm. The valve is connected to 146 mm schedule 80 pipe. The angle can be calculated to be
13 degrees. The valve is specified to be operating in turbulent conditions.

>>> K_gate_valve_Crane(D1=.1, D2=.146, angle=13.115)


1.1466029421844073

The calculated result is lower than their value of 1.22; the difference is due to Crane’s generous intermediate
rounding. A later, Imperial edition of Crane rounds differently - and comes up with K=1.06.
fluids.fittings.K_angle_valve_Crane(D1, D2, fd=None, style=0)
Returns the loss coefficient for all types of angle valve, (reduced seat or throttled) as shown in [1].
If = 1:

𝐾 = 𝐾1 = 𝐾2 = 𝑁 · 𝑓𝑑

Otherwise:
[︀ ]︀
𝐾 + 0.5(1 − 𝛽 2 ) + (1 − 𝛽 2 )2
𝐾2 =
𝛽4
For style 0 and 2, N = 55; for style 1, N=150.
Parameters
D1 [float] Diameter of the valve seat bore (must be smaller or equal to D2), [m]
D2 [float] Diameter of the pipe attached to the valve, [m]
fd [float, optional] Darcy friction factor calculated for the actual pipe flow in clean steel (rough-
ness = 0.0018 inch) in the fully developed turbulent region; do not specify this to use the
original Crane friction factor!, [-]
style [int, optional] One of 0, 1, or 2; refers to three different types of angle valves as shown in
[1] [-]
Returns

182 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

K [float] Loss coefficient with respect to the pipe inside diameter [-]

Notes

This method is not valid in the laminar regime and the pressure drop will be underestimated in those conditions.

References

[1]

Examples

>>> K_angle_valve_Crane(.01, .02)


26.597361811128465

fluids.fittings.K_globe_valve_Crane(D1, D2, fd=None)


Returns the loss coefficient for all types of globe valve, (reduced seat or throttled) as shown in [1].
If = 1:

𝐾 = 𝐾1 = 𝐾2 = 340𝑓𝑑

Otherwise:
[︀ ]︀
𝐾 + 0.5(1 − 𝛽 2 ) + (1 − 𝛽 2 )2
𝐾2 =
𝛽4
Parameters
D1 [float] Diameter of the valve seat bore (must be smaller or equal to D2), [m]
D2 [float] Diameter of the pipe attached to the valve, [m]
fd [float, optional] Darcy friction factor calculated for the actual pipe flow in clean steel (rough-
ness = 0.0018 inch) in the fully developed turbulent region; do not specify this to use the
original Crane friction factor!, [-]
Returns
K [float] Loss coefficient with respect to the pipe inside diameter [-]

Notes

This method is not valid in the laminar regime and the pressure drop will be underestimated in those conditions.

References

[1]

2.7. Fittings pressure drop (fluids.fittings) 183


Fluids Documentation, Release 1.0.21

Examples

>>> K_globe_valve_Crane(.01, .02)


135.9200548324305

fluids.fittings.K_swing_check_valve_Crane(D=None, fd=None, angled=True)


Returns the loss coefficient for a swing check valve as shown in [1].

𝐾2 = 𝑁 · 𝑓𝑑

For angled swing check valves N = 100; for straight valves, N = 50.
Parameters
D [float, optional] Diameter of the pipe attached to the valve, [m]
fd [float, optional] Darcy friction factor calculated for the actual pipe flow in clean steel (rough-
ness = 0.0018 inch) in the fully developed turbulent region; do not specify this to use the
original Crane friction factor!, [-]
angled [bool, optional] If True, returns a value 2x the unangled value; the style of the valve [-]
Returns
K [float] Loss coefficient with respect to the pipe inside diameter [-]

Notes

This method is not valid in the laminar regime and the pressure drop will be underestimated in those conditions.

References

[1]

Examples

>>> K_swing_check_valve_Crane(D=.02)
2.3974274785373257

fluids.fittings.K_lift_check_valve_Crane(D1, D2, fd=None, angled=True)


Returns the loss coefficient for a lift check valve as shown in [1].
If = 1:

𝐾 = 𝐾1 = 𝐾2 = 𝑁 · 𝑓𝑑

Otherwise:
[︀ ]︀
𝐾 + 0.5(1 − 𝛽 2 ) + (1 − 𝛽 2 )2
𝐾2 =
𝛽4
For angled lift check valves N = 55; for straight valves, N = 600.
Parameters
D1 [float] Diameter of the valve seat bore (must be smaller or equal to D2), [m]

184 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

D2 [float] Diameter of the pipe attached to the valve, [m]


fd [float, optional] Darcy friction factor calculated for the actual pipe flow in clean steel (rough-
ness = 0.0018 inch) in the fully developed turbulent region; do not specify this to use the
original Crane friction factor!, [-]
angled [bool, optional] If True, returns a value 2x the unangled value; the style of the valve [-]
Returns
K [float] Loss coefficient with respect to the pipe inside diameter [-]

Notes

This method is not valid in the laminar regime and the pressure drop will be underestimated in those conditions.

References

[1]

Examples

>>> K_lift_check_valve_Crane(.01, .02)


28.597361811128465

fluids.fittings.K_tilting_disk_check_valve_Crane(D, angle, fd=None)


Returns the loss coefficient for a tilting disk check valve as shown in [1]. Results are specified in [1] to be for
the disk’s resting position to be at 5 or 25 degrees to the flow direction. The model is implemented here so as to
switch to the higher loss 15 degree coefficients at 10 degrees, and use the lesser coefficients for any angle under
10 degrees.

𝐾 = 𝑁 · 𝑓𝑑

N is obtained from the following table:

angle = 5 ° angle = 15°


2-8” 40 120
10-14” 30 90
16-48” 20 60

The actual change of coefficients happen at <= 9” and <= 15”.


Parameters
D [float] Diameter of the pipe section the valve in mounted in; the same as the line size [m]
angle [float] Angle of the tilting disk to the flow direction; nominally 5 or 15 degrees [degrees]
fd [float, optional] Darcy friction factor calculated for the actual pipe flow in clean steel (rough-
ness = 0.0018 inch) in the fully developed turbulent region; do not specify this to use the
original Crane friction factor!, [-]
Returns
K [float] Loss coefficient with respect to the pipe inside diameter [-]

2.7. Fittings pressure drop (fluids.fittings) 185


Fluids Documentation, Release 1.0.21

Notes

This method is not valid in the laminar regime and the pressure drop will be underestimated in those conditions.

References

[1]

Examples

>>> K_tilting_disk_check_valve_Crane(.01, 5)
1.1626516551826345

fluids.fittings.K_globe_stop_check_valve_Crane(D1, D2, fd=None, style=0)


Returns the loss coefficient for a globe stop check valve as shown in [1].
If = 1:

𝐾 = 𝐾1 = 𝐾2 = 𝑁 · 𝑓𝑑

Otherwise:
[︀ ]︀
𝐾 + 0.5(1 − 𝛽 2 ) + (1 − 𝛽 2 )2
𝐾2 =
𝛽4
Style 0 is the standard form; style 1 is angled, with a restrition to force the flow up through the valve; style 2 is
also angled but with a smaller restriction forcing the flow up. N is 400, 300, and 55 for those cases respectively.
Parameters
D1 [float] Diameter of the valve seat bore (must be smaller or equal to D2), [m]
D2 [float] Diameter of the pipe attached to the valve, [m]
fd [float, optional] Darcy friction factor calculated for the actual pipe flow in clean steel (rough-
ness = 0.0018 inch) in the fully developed turbulent region; do not specify this to use the
original Crane friction factor!, [-]
style [int, optional] One of 0, 1, or 2; refers to three different types of angle valves as shown in
[1] [-]
Returns
K [float] Loss coefficient with respect to the pipe inside diameter [-]

Notes

This method is not valid in the laminar regime and the pressure drop will be underestimated in those conditions.

186 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

References

[1]

Examples

>>> K_globe_stop_check_valve_Crane(.1, .02, style=1)


4.5235076518969795

fluids.fittings.K_angle_stop_check_valve_Crane(D1, D2, fd=None, style=0)


Returns the loss coefficient for a angle stop check valve as shown in [1].
If = 1:

𝐾 = 𝐾1 = 𝐾2 = 𝑁 · 𝑓𝑑

Otherwise:
[︀ ]︀
𝐾 + 0.5(1 − 𝛽 2 ) + (1 − 𝛽 2 )2
𝐾2 =
𝛽4
Style 0 is the standard form; style 1 has a restrition to force the flow up through the valve; style 2 is has the clearest
flow area with no guides for the angle valve. N is 200, 350, and 55 for those cases respectively.
Parameters
D1 [float] Diameter of the valve seat bore (must be smaller or equal to D2), [m]
D2 [float] Diameter of the pipe attached to the valve, [m]
fd [float, optional] Darcy friction factor calculated for the actual pipe flow in clean steel (rough-
ness = 0.0018 inch) in the fully developed turbulent region; do not specify this to use the
original Crane friction factor!, [-]
style [int, optional] One of 0, 1, or 2; refers to three different types of angle valves as shown in
[1] [-]
Returns
K [float] Loss coefficient with respect to the pipe inside diameter [-]

Notes

This method is not valid in the laminar regime and the pressure drop will be underestimated in those conditions.

References

[1]

2.7. Fittings pressure drop (fluids.fittings) 187


Fluids Documentation, Release 1.0.21

Examples

>>> K_angle_stop_check_valve_Crane(.1, .02, style=1)


4.525425593879809

fluids.fittings.K_ball_valve_Crane(D1, D2, angle, fd=None)


Returns the loss coefficient for a ball valve as shown in [1].
If = 1:

𝐾 = 𝐾1 = 𝐾2 = 3𝑓𝑑

If < 1 and <= 45°:


𝐾 + sin 𝜃2 0.8(1 − 𝛽 2 ) + 2.6(1 − 𝛽 2 )2
[︀ ]︀
𝐾2 =
𝛽4
If < 1 and > 45°:
√︁
𝐾 + 0.5 sin 𝜃2 (1 − 𝛽 2 ) + (1 − 𝛽 2 )2
𝐾2 =
𝛽4
Parameters
D1 [float] Diameter of the valve seat bore (must be equal to or smaller than D2), [m]
D2 [float] Diameter of the pipe attached to the valve, [m]
angle [float] Angle formed by the reducer in the valve, [degrees]
fd [float, optional] Darcy friction factor calculated for the actual pipe flow in clean steel (rough-
ness = 0.0018 inch) in the fully developed turbulent region; do not specify this to use the
original Crane friction factor!, [-]
Returns
K [float] Loss coefficient with respect to the pipe inside diameter [-]

Notes

This method is not valid in the laminar regime and the pressure drop will be underestimated in those conditions.

References

[1]

Examples

>>> K_ball_valve_Crane(.01, .02, 50)


14.051310974926592

fluids.fittings.K_diaphragm_valve_Crane(D=None, fd=None, style=0)


Returns the loss coefficient for a diaphragm valve of either weir (style = 0) or straight-through (style = 1) as shown
in [1].

𝐾 = 𝐾1 = 𝐾2 = 𝑁 · 𝑓𝑑

For style 0 (weir), N = 149; for style 1 (straight through), N = 39.

188 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

Parameters
D [float, optional] Diameter of the pipe section the valve in mounted in; the same as the line size
[m]
fd [float, optional] Darcy friction factor calculated for the actual pipe flow in clean steel (rough-
ness = 0.0018 inch) in the fully developed turbulent region; do not specify this to use the
original Crane friction factor!, [-]
style [int, optional] Either 0 (weir type valve) or 1 (straight through weir valve) [-]
Returns
K [float] Loss coefficient with respect to the pipe inside diameter [-]

Notes

This method is not valid in the laminar regime and the pressure drop will be underestimated in those conditions.

References

[1]

Examples

>>> K_diaphragm_valve_Crane(D=.1, style=0)


2.4269804835982565

fluids.fittings.K_foot_valve_Crane(D=None, fd=None, style=0)


Returns the loss coefficient for a foot valve of either poppet disc (style = 0) or hinged-disk (style = 1) as shown
in [1]. Both valves are specified include the loss of the attached strainer.

𝐾 = 𝐾1 = 𝐾2 = 𝑁 · 𝑓𝑑

For style 0 (poppet disk), N = 420; for style 1 (hinged disk), N = 75.
Parameters
D [float, optional] Diameter of the pipe section the valve in mounted in; the same as the line size
[m]
fd [float, optional] Darcy friction factor calculated for the actual pipe flow in clean steel (rough-
ness = 0.0018 inch) in the fully developed turbulent region; do not specify this to use the
original Crane friction factor!, [-]
style [int, optional] Either 0 (poppet disk foot valve) or 1 (hinged disk foot valve) [-]
Returns
K [float] Loss coefficient with respect to the pipe inside diameter [-]

2.7. Fittings pressure drop (fluids.fittings) 189


Fluids Documentation, Release 1.0.21

Notes

This method is not valid in the laminar regime and the pressure drop will be underestimated in those conditions.

References

[1]

Examples

>>> K_foot_valve_Crane(D=0.2, style=0)


5.912221498436275

fluids.fittings.K_butterfly_valve_Crane(D, fd=None, style=0)


Returns the loss coefficient for a butterfly valve as shown in [1]. Three different types are supported; Centric
(style = 0), double offset (style = 1), and triple offset (style = 2).

𝐾 = 𝑁 · 𝑓𝑑

N is obtained from the following table:

Size range Centric Double offset Triple offset


2” - 8” 45 74 218
10” - 14” 35 52 96
16” - 24” 25 43 55

The actual change of coefficients happen at <= 9” and <= 15”.


Parameters
D [float] Diameter of the pipe section the valve in mounted in; the same as the line size [m]
fd [float, optional] Darcy friction factor calculated for the actual pipe flow in clean steel (rough-
ness = 0.0018 inch) in the fully developed turbulent region; do not specify this to use the
original Crane friction factor!, [-]
style [int, optional] Either 0 (centric), 1 (double offset), or 2 (triple offset) [-]
Returns
K [float] Loss coefficient with respect to the pipe inside diameter [-]

Notes

This method is not valid in the laminar regime and the pressure drop will be underestimated in those conditions.

190 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

References

[1]

Examples

>>> K_butterfly_valve_Crane(D=.1, style=2)


3.5508841974793284

fluids.fittings.K_plug_valve_Crane(D1, D2, angle, fd=None, style=0)


Returns the loss coefficient for a plug valve or cock valve as shown in [1].
If = 1:

𝐾 = 𝐾1 = 𝐾2 = 𝑁 𝑓𝑑

Otherwise:
√︁
𝐾 + 0.5 sin 𝜃2 (1 − 𝛽 2 ) + (1 − 𝛽 2 )2
𝐾2 =
𝛽4
Three types of plug valves are supported. For straight-through plug valves (style = 0), N = 18. For 3-way, flow
straight through (style = 1) plug valves, N = 30. For 3-way, flow 90° valves (style = 2) N = 90.
Parameters
D1 [float] Diameter of the valve plug bore (must be equal to or smaller than D2), [m]
D2 [float] Diameter of the pipe attached to the valve, [m]
angle [float] Angle formed by the reducer in the valve, [degrees]
fd [float, optional] Darcy friction factor calculated for the actual pipe flow in clean steel (rough-
ness = 0.0018 inch) in the fully developed turbulent region; do not specify this to use the
original Crane friction factor!, [-]
style [int, optional] Either 0 (straight-through), 1 (3-way, flow straight-through), or 2 (3-way,
flow 90°) [-]
Returns
K [float] Loss coefficient with respect to the pipe inside diameter [-]

Notes

This method is not valid in the laminar regime and the pressure drop will be underestimated in those conditions.

References

[1]

2.7. Fittings pressure drop (fluids.fittings) 191


Fluids Documentation, Release 1.0.21

Examples

>>> K_plug_valve_Crane(D1=.01, D2=.02, angle=50)


19.80513692341617

2.7.8 Hooper 2K fittings

fluids.fittings.Hooper2K(Di, Re, name=None, K1=None, Kinfty=None)


Returns loss coefficient for any various fittings, depending on the name input. Alternatively, the Hooper constants
K1, Kinfty may be provided and used instead. Source of data is [1]. Reviews of this model are favorable less
favorable than the Darby method but superior to the constant-K method.

1 inch
(︂ )︂
𝐾1
𝐾= + 𝐾∞ 1 +
𝑅𝑒 𝐷𝑖𝑛

Note this model uses actual inside pipe diameter in inches.


Parameters
Di [float] Actual inside diameter of the pipe, [in]
Re [float] Reynolds number, [-]
name [str, optional] String from Hooper dict representing a fitting
K1 [float, optional] K1 parameter of Hooper model, optional [-]
Kinfty [float, optional] Kinfty parameter of Hooper model, optional [-]
Returns
K [float] Loss coefficient [-]

Notes

Also described in Ludwig’s Applied Process Design. Relatively uncommon to see it used. No actual example
found.

References

[1], [2], [3]

Examples

>>> Hooper2K(Di=2., Re=10000., name='Valve, Globe, Standard')


6.15
>>> Hooper2K(Di=2., Re=10000., K1=900, Kinfty=4)
6.09

192 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

fluids.fittings.Hooper = {'Elbow, 180°, Long-radius (R/D = 1.5), All types': (1000.0,


0.3), 'Elbow, 180°, Standard (R/D = 1), Flanged/welded': (1000.0, 0.35), 'Elbow, 45°,
Long-radius (R/D 1.5), All types': (500.0, 0.15), 'Elbow, 45°, Mitered (R/D=1.5), 1 weld
(45° angle)': (500.0, 0.25), 'Elbow, 45°, Mitered (R/D=1.5), 2 weld (22.5° angle)':
(500.0, 0.15), 'Elbow, 45°, Standard (R/D = 1), All types': (500.0, 0.2), 'Elbow, 45°,
Standard (R/D = 1), Screwed': (1000.0, 0.7), 'Elbow, 90°, Long-radius (R/D = 1.5), All
types': (800.0, 0.2), 'Elbow, 90°, Mitered (R/D = 1.5), 1 weld (90° angle)': (1000.0,
1.15), 'Elbow, 90°, Mitered (R/D = 1.5), 2 weld (45° angle)': (800.0, 0.35), 'Elbow, 90°,
Mitered (R/D = 1.5), 3 weld (30° angle)': (800.0, 0.3), 'Elbow, 90°, Mitered (R/D = 1.5),
4 weld (22.5° angle)': (800.0, 0.27), 'Elbow, 90°, Mitered (R/D = 1.5), 5 weld (18°
angle)': (800.0, 0.25), 'Elbow, 90°, Standard (R/D = 1), Flanged/welded': (800.0, 0.25),
'Elbow, 90°, Standard (R/D = 1), Screwed': (800.0, 0.4), 'Elbow, Elbow, Long-radius,
Screwed': (800.0, 0.4), 'Elbow, Elbow, Standard, Flanged/welded': (800.0, 0.8), 'Elbow,
Elbow, Stub-in type branch': (1000.0, 1.0), 'Elbow, Used as, Standard, Screwed': (500.0,
0.7), 'Tee, Run, Screwed': (200.0, 0.1), 'Tee, Tee, Stub-in type branch': (100.0, 0.0),
'Tee, Through, Flanged or welded': (150.0, 0.05), 'Valve, Ball, Reduced trim, Beta =
0.9': (500.0, 0.15), 'Valve, Butterfly,': (800.0, 0.25), 'Valve, Check, Lift': (2000.0,
10.0), 'Valve, Check, Swing': (1500.0, 1.5), 'Valve, Check, Tilting-disc': (1000.0, 0.5),
'Valve, Diaphragm, Dam type': (1000.0, 2.0), 'Valve, Gate, Full line size, Beta = 1':
(300.0, 0.1), 'Valve, Globe, Angle or Y-type': (1000.0, 2.0), 'Valve, Globe, Standard':
(1500.0, 4.0), 'Valve, Plug, Reduced trim, Beta = 0.8': (1000.0, 0.25)}
Dictionary of coefficients for Hooper’s 2K fitting pressure drop method; the tuple contains 𝐾1 and 𝐾∞ in that
order.

2.7.9 Darby 3K fittings

fluids.fittings.Darby3K(NPS=None, Re=None, name=None, K1=None, Ki=None, Kd=None)


Returns loss coefficient for any various fittings, depending on the name input. Alternatively, the Darby constants
K1, Ki and Kd may be provided and used instead. Source of data is [1]. Reviews of this model are favorable.
(︂ )︂
𝐾1 𝐾𝑑
𝐾𝑓 = + 𝐾𝑖 1 + 0.3
𝑅𝑒 𝐷NPS

Note this model uses nominal pipe diameter in inches.


Parameters
NPS [float] Nominal diameter of the pipe, [in]
Re [float] Reynolds number, [-]
name [str] String from Darby dict representing a fitting
K1 [float] K1 parameter of Darby model, optional [-]
Ki [float] Ki parameter of Darby model, optional [-]
Kd [float] Kd parameter of Darby model, optional [in]
Returns
K [float] Loss coefficient [-]

2.7. Fittings pressure drop (fluids.fittings) 193


Fluids Documentation, Release 1.0.21

Notes

Also described in Albright’s Handbook and Ludwig’s Applied Process Design. Relatively uncommon to see it
used.
The possibility of combining these methods with those above are attractive.

References

[1], [2]

Examples

>>> Darby3K(NPS=2., Re=10000., name='Valve, Angle valve, 45°, full line size, = 1')
1.1572523963562356
>>> Darby3K(NPS=12., Re=10000., K1=950, Ki=0.25, Kd=4)
0.819510280626355

fluids.fittings.Darby = {'Elbow, 180°, all, (r/D = 1.5)': (1000.0, 0.1, 4.0), 'Elbow,
180°, flanged, (r/D = 1)': (1000.0, 0.12, 4.0), 'Elbow, 180°, threaded, close-return
bend, (r/D = 1)': (1000.0, 0.23, 4.0), 'Elbow, 45°, long radius, (r/D = 1.5)': (500.0,
0.052, 4.0), 'Elbow, 45°, mitered, 1 weld, (45°)': (500.0, 0.086, 4.0), 'Elbow, 45°,
mitered, 2 welds, (22.5°)': (500.0, 0.052, 4.0), 'Elbow, 45°, threaded standard, (r/D =
1)': (500.0, 0.071, 4.2), 'Elbow, 90°, (r/D = 2)': (800.0, 0.056, 3.9), 'Elbow, 90°, (r/D
= 4)': (800.0, 0.066, 3.9), 'Elbow, 90°, (r/D = 6)': (800.0, 0.075, 4.2), 'Elbow, 90°, 2
welds, (45°)': (800.0, 0.068, 4.1), 'Elbow, 90°, 3 welds, (30°)': (800.0, 0.035, 4.2),
'Elbow, 90°, flanged, welded, bends, (r/D = 1)': (800.0, 0.091, 4.0), 'Elbow, 90°,
mitered, 1 weld, (90°)': (1000.0, 0.27, 4.0), 'Elbow, 90°, threaded, long radius, (r/D =
1.5)': (800.0, 0.071, 4.2), 'Elbow, 90°, threaded, standard, (r/D = 1)': (800.0, 0.14,
4.0), 'Tee, Run-through, flanged, (r/D = 1)': (150.0, 0.05, 4.0), 'Tee, Run-through,
stub-in branch': (100.0, 0.0, 0.0), 'Tee, Run-through, threaded, (r/D = 1)': (200.0,
0.091, 4.0), 'Tee, Through-branch, (as elbow), flanged, (r/D = 1)': (800.0, 0.28, 4.0),
'Tee, Through-branch, (as elbow), stub-in branch': (1000.0, 0.34, 4.0), 'Tee,
Through-branch, (as elbow), threaded, (r/D = 1)': (500.0, 0.274, 4.0), 'Tee,
Through-branch,(as elbow), (r/D = 1.5)': (800.0, 0.14, 4.0), 'Valve, Angle valve, 45°,
full line size, = 1': (950.0, 0.25, 4.0), 'Valve, Angle valve, 90°, full line size, =
1': (1000.0, 0.69, 4.0), 'Valve, Ball valve, standard, = 1': (300.0, 0.017, 3.5),
'Valve, Diaphragm, dam type': (1000.0, 0.69, 4.9), 'Valve, Gate valve, standard, = 1':
(300.0, 0.037, 3.9), 'Valve, Globe valve, standard, = 1': (1500.0, 1.7, 3.6), 'Valve,
Lift check': (2000.0, 2.85, 3.8), 'Valve, Plug valve, branch flow': (500.0, 0.41, 4.0),
'Valve, Plug valve, straight through': (300.0, 0.084, 3.9), 'Valve, Plug valve, three-way
(flow through)': (300.0, 0.14, 4.0), 'Valve, Swing check': (1500.0, 0.46, 4.0)}
Dictionary of coefficients for Darby’s 3K fitting pressure drop method; the tuple contains 𝐾1 and 𝐾𝑖 and 𝐾𝑑 in
that order.

194 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

2.7.10 Loss Coefficient Converters

fluids.fittings.Cv_to_K(Cv, D)
Convert imperial valve flow coefficient from imperial units to regular loss coefficients.

𝐷4
𝐾 = 1.6 × 109 (︀
𝐶𝑣 2
)︀
1.56

Parameters
Cv [float] Imperial Cv valve flow coefficient (flow rate of water at a pressure drop of 1 psi)
[gallons/minute]
D [float] Inside diameter of the valve [m]
Returns
K [float] Loss coefficient, [-]

Notes

The exact conversion coefficient between Kv to Cv is 1.1560992283536566; it is rounded in the formula above.

References

[1]

Examples

>>> Cv_to_K(2.712, .015)


14.719595348352

fluids.fittings.Kv_to_K(Kv, D)
Convert valve flow coefficient from common metric units to regular loss coefficients.

𝐷4
𝐾 = 1.6 × 109
𝐾𝑣2

Parameters
Kv [float] Metric Kv valve flow coefficient (flow rate of water at a pressure drop of 1 bar)
[m^3/hr]
D [float] Inside diameter of the valve [m]
Returns
K [float] Loss coefficient, [-]

2.7. Fittings pressure drop (fluids.fittings) 195


Fluids Documentation, Release 1.0.21

Notes

Crane TP 410 M (2009) gives the coefficient of 0.04 (with diameter in mm).
It also suggests the density of water should be found between 5-40°C. Older versions specify the density should
be found at 60 °F, which is used here, and the pessure for the appropriate density is back calculated.
1 2
∆𝑃 = 1 bar = 𝜌𝑉 · 𝐾
2
𝐾𝑣 · hour
3600 second
𝑉 = 𝜋 2
4𝐷
𝜌 = 999.29744568 𝑘𝑔/𝑚3 at 𝑇 = 60𝐹, 𝑃 = 703572𝑃 𝑎

The value of density is calculated with IAPWS-95; it is chosen as it makes the coefficient a very convenient round
number. Others constants that have been used are 1.604E9, and 1.60045E9.

References

[1]

Examples

>>> Kv_to_K(2.312, .015)


15.153374600399898

fluids.fittings.K_to_Cv(K, D)
Convert regular loss coefficient to imperial valve flow coefficient.
√︂
𝐷4
𝐾𝑣 = 1.156 · 4 × 104
𝐾
Parameters
K [float] Loss coefficient, [-]
D [float] Inside diameter of the valve [m]
Returns
Cv [float] Imperial Cv valve flow coefficient (flow rate of water at a pressure drop of 1 psi)
[gallons/minute]

Notes

The conversion factor does not depend on the density of the fluid or the diameter of the valve. It is calculated
with the definition of a US gallon as 231 cubic inches, and a psi as a pound-force per square inch.
The exact conversion coefficient between Kv to Cv is 1.1560992283536566; it is rounded in the formula above.

196 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

References

[1]

Examples

>>> K_to_Cv(16, .015)


2.601223263795727

fluids.fittings.K_to_Kv(K, D)
Convert regular loss coefficient to valve flow coefficient.
√︂
4 𝐷4
𝐾𝑣 = 4 × 10
𝐾
Parameters
K [float] Loss coefficient, [-]
D [float] Inside diameter of the valve [m]
Returns
Kv [float] Metric Kv valve flow coefficient (flow rate of water at a pressure drop of 1 bar)
[m^3/hr]

Notes

Crane TP 410 M (2009) gives the coefficient of 0.04 (with diameter in mm).
It also suggests the density of water should be found between 5-40°C. Older versions specify the density should
be found at 60 °F, which is used here, and the pessure for the appropriate density is back calculated.
1 2
∆𝑃 = 1 bar = 𝜌𝑉 · 𝐾
2
𝐾𝑣 · hour
3600 second
𝑉 = 𝜋 2
4𝐷
𝜌 = 999.29744568 𝑘𝑔/𝑚3 at 𝑇 = 60𝐹, 𝑃 = 703572𝑃 𝑎

The value of density is calculated with IAPWS-95; it is chosen as it makes the coefficient a very convenient round
number. Others constants that have been used are 1.604E9, and 1.60045E9.

References

[1]

2.7. Fittings pressure drop (fluids.fittings) 197


Fluids Documentation, Release 1.0.21

Examples

>>> K_to_Kv(15.15337460039990, .015)


2.312

fluids.fittings.Cv_to_Kv(Cv)
Convert valve flow coefficient from imperial to common metric units.

𝐾𝑣 = 𝐶𝑣 /1.156

Parameters
Cv [float] Imperial Cv valve flow coefficient (flow rate of water at a pressure drop of 1 psi)
[gallons/minute]
Returns
Kv [float] Metric Kv valve flow coefficient (flow rate of water at a pressure drop of 1 bar)
[m^3/hr]

Notes

Kv = 0.865 Cv is in the IEC standard 60534-2-1. It has also been said that Cv = 1.17Kv; this is wrong by current
standards.
The conversion factor does not depend on the density of the fluid or the diameter of the valve. It is calculated
with the definition of a US gallon as 231 cubic inches, and a psi as a pound-force per square inch.
The exact conversion coefficient between Kv to Cv is 1.1560992283536566; it is rounded in the formula above.

References

[1]

Examples

>>> Cv_to_Kv(2.312)
1.9998283393826013

fluids.fittings.Kv_to_Cv(Kv)
Convert valve flow coefficient from imperial to common metric units.

𝐶𝑣 = 1.156𝐾𝑣

Parameters
Kv [float] Metric Kv valve flow coefficient (flow rate of water at a pressure drop of 1 bar)
[m^3/hr]
Returns
Cv [float] Imperial Cv valve flow coefficient (flow rate of water at a pressure drop of 1 psi)
[gallons/minute]

198 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

Notes

Kv = 0.865 Cv is in the IEC standard 60534-2-1. It has also been said that Cv = 1.17Kv; this is wrong by current
standards.
The conversion factor does not depend on the density of the fluid or the diameter of the valve. It is calculated
with the definition of a US gallon as 231 cubic inches, and a psi as a pound-force per square inch.
The exact conversion coefficient between Kv to Cv is 1.1560992283536566; it is rounded in the formula above.

References

[1]

Examples

>>> Kv_to_Cv(2)
2.3121984567073133

2.7.11 Miscellaneous

fluids.fittings.v_lift_valve_Crane(rho, D1=None, D2=None, style='swing check angled')


Calculates the approximate minimum velocity required to lift the disk or other controlling element of a check
valve to a fully open, stable, position according to the Crane method [1].
√︃
kg/m3
𝑣𝑚𝑖𝑛 = 𝑁 · m/s ·
𝜌
√︃
kg/m3
𝑣𝑚𝑖𝑛 = 𝑁 𝛽 2 · m/s ·
𝜌
See the notes for the definition of values of N and which check valves use which formulas.
Parameters
rho [float] Density of the fluid [kg/m^3]
D1 [float, optional] Diameter of the valve bore (must be equal to or smaller than D2), [m]
D2 [float, optional] Diameter of the pipe attached to the valve, [m]
style [str] The type of valve; one of [‘swing check angled’, ‘swing check straight’, ‘swing check
UL’, ‘lift check straight’, ‘lift check angled’, ‘tilting check 5°’, ‘tilting check 15°’, ‘stop check
globe 1’, ‘stop check angle 1’, ‘stop check globe 2’, ‘stop check angle 2’, ‘stop check globe
3’, ‘stop check angle 3’, ‘foot valve poppet disc’, ‘foot valve hinged disc’], [-]
Returns
v_min [float] Approximate minimum velocity required to keep the disc fully lifted, preventing
chattering and wear [m/s]

2.7. Fittings pressure drop (fluids.fittings) 199


Fluids Documentation, Release 1.0.21

Notes

This equation is not dimensionless.

Name/string N Full
‘swing check angled’ 45 No
‘swing check straight’ 75 No
‘swing check UL’ 120 No
‘lift check straight’ 50 Yes
‘lift check angled’ 170 Yes
‘tilting check 5°’ 100 No
‘tilting check 15°’ 40 No
‘stop check globe 1’ 70 Yes
‘stop check angle 1’ 95 Yes
‘stop check globe 2’ 75 Yes
‘stop check angle 2’ 75 Yes
‘stop check globe 3’ 170 Yes
‘stop check angle 3’ 170 Yes
‘foot valve poppet disc’ 20 No
‘foot valve hinged disc’ 45 No

References

[1]

Examples

>>> v_lift_valve_Crane(rho=998.2, D1=0.0627, D2=0.0779, style='lift check straight')


1.0252301935349286

2.7.12 Sources

The main sources for these correlations are as follows [100] [101] [102] [103] [104]:

2.8 Orifice plates, flow nozzles, Venturi tubes, cone and wedge me-
ters (fluids.flow_meter)

This module contains correlations, standards, and solvers for orifice plates and other flow metering devices. Both
permanent and measured pressure drop is included, and models work for both liquids and gases. A number of non-
standard devices are included, as well as limited two-phase functionality.
For reporting bugs, adding feature requests, or submitting pull requests, please use the GitHub issue tracker or contact
the author at Caleb.Andrew.Bell@gmail.com.

200 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

• Flow Meter Solvers


• Flow Meter Interfaces
• Orifice Plate Correlations
• Nozzle Flow Meters
• Venturi Tube Meters
• Cone Meters
• Wedge Meters
• Flow Meter Utilities

2.8.1 Flow Meter Solvers

fluids.flow_meter.differential_pressure_meter_solver(D, rho, mu, k=None, D2=None, P1=None,


P2=None, m=None, meter_type='ISO 5167
orifice', taps=None, tap_position=None,
C_specified=None, epsilon_specified=None)
Calculates either the mass flow rate, the upstream pressure, the second pressure value, or the orifice diameter for
a differential pressure flow meter based on the geometry of the meter, measured pressures of the meter, and the
density, viscosity, and isentropic exponent of the fluid. This solves an equation iteratively to obtain the correct
flow rate.
Parameters
D [float] Upstream internal pipe diameter, [m]
rho [float] Density of fluid at P1, [kg/m^3]
mu [float] Viscosity of fluid at P1, [Pa*s]
k [float, optional] Isentropic exponent of fluid; required unless epsilon_specified is specified ,
[-]
D2 [float, optional] Diameter of orifice, or venturi meter orifice, or flow tube orifice, or cone
meter end diameter, or wedge meter fluid flow height, [m]
P1 [float, optional] Static pressure of fluid upstream of differential pressure meter at the cross-
section of the pressure tap, [Pa]
P2 [float, optional] Static pressure of fluid downstream of differential pressure meter or at the
prescribed location (varies by type of meter) [Pa]
m [float, optional] Mass flow rate of fluid through the flow meter, [kg/s]
meter_type [str] One of {‘conical orifice’, ‘orifice’, ‘machined convergent venturi tube’, ‘ISO
5167 orifice’, ‘Miller quarter circle orifice’, ‘Hollingshead venturi sharp’, ‘segmental ori-
fice’, ‘Miller conical orifice’, ‘Miller segmental orifice’, ‘quarter circle orifice’, ‘Holling-
shead v cone’, ‘wedge meter’, ‘eccentric orifice’, ‘venuri nozzle’, ‘rough welded convergent
venturi tube’, ‘ISA 1932 nozzle’, ‘ISO 15377 quarter-circle orifice’, ‘Hollingshead venturi
smooth’, ‘Hollingshead orifice’, ‘cone meter’, ‘Hollingshead wedge’, ‘Miller orifice’, ‘long
radius nozzle’, ‘ISO 15377 conical orifice’, ‘unspecified meter’, ‘as cast convergent venturi
tube’, ‘Miller eccentric orifice’, ‘ISO 15377 eccentric orifice’}, [-]
taps [str, optional] The orientation of the taps; one of ‘corner’, ‘flange’, ‘D’, or ‘D/2’; applies
for orifice meters only, [-]

2.8. Orifice plates, flow nozzles, Venturi tubes, cone and wedge meters (fluids.flow_meter) 201
Fluids Documentation, Release 1.0.21

tap_position [str, optional] The rotation of the taps, used only for the eccentric orifice case
where the pressure profile is are not symmetric; ‘180 degree’ for the normal case where the
taps are opposite the orifice bore, and ‘90 degree’ for the case where, normally for operational
reasons, the taps are near the bore [-]
C_specified [float, optional] If specified, the correlation for the meter type is not used - this
value is used for C
epsilon_specified [float, optional] If specified, the correlation for the fluid expansibility is not
used - this value is used for 𝜖. Many publications recommend this be set to 1 for incompress-
ible fluids [-]
Returns
ans [float] One of m, the mass flow rate of the fluid; P1, the pressure upstream of the flow meter;
P2, the second pressure tap’s value; and D2, the diameter of the measuring device; units of
respectively, kg/s, Pa, Pa, or m

Notes

See the appropriate functions for the documentation for the formulas and references used in each method.
The solvers make some assumptions about the range of values answers may be in.
Note that the solver for the upstream pressure uses the provided values of density, viscosity and isentropic expo-
nent; whereas these values all depend on pressure (albeit to a small extent). An outer loop should be added with
pressure-dependent values calculated in it for maximum accuracy.
It would be possible to solve for the upstream pipe diameter, but there is no use for that functionality.
If a meter has already been calibrated to have a known C, this may be provided and it will be used in place of
calculating one.

Examples

>>> differential_pressure_meter_solver(D=0.07366, D2=0.05, P1=200000.0,


... P2=183000.0, rho=999.1, mu=0.0011, k=1.33,
... meter_type='ISO 5167 orifice', taps='D')
7.702338035732167

>>> differential_pressure_meter_solver(D=0.07366, m=7.702338, P1=200000.0,


... P2=183000.0, rho=999.1, mu=0.0011, k=1.33,
... meter_type='ISO 5167 orifice', taps='D')
0.04999999990831885

2.8.2 Flow Meter Interfaces

fluids.flow_meter.differential_pressure_meter_dP(D, D2, P1, P2, C=None, meter_type='ISO 5167


orifice')
Calculates the non-recoverable pressure drop of a differential pressure flow meter based on the geometry of the
meter, measured pressures of the meter, and for most models the meter discharge coefficient.
Parameters
D [float] Upstream internal pipe diameter, [m]

202 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

D2 [float] Diameter of orifice, or venturi meter orifice, or flow tube orifice, or cone meter end
diameter, or wedge meter fluid flow height, [m]
P1 [float] Static pressure of fluid upstream of differential pressure meter at the cross-section of
the pressure tap, [Pa]
P2 [float] Static pressure of fluid downstream of differential pressure meter or at the prescribed
location (varies by type of meter) [Pa]
C [float, optional] Coefficient of discharge (used only in orifice plates, and venturi nozzles), [-]
meter_type [str] One of {‘conical orifice’, ‘orifice’, ‘machined convergent venturi tube’, ‘ISO
5167 orifice’, ‘Miller quarter circle orifice’, ‘Hollingshead venturi sharp’, ‘segmental ori-
fice’, ‘Miller conical orifice’, ‘Miller segmental orifice’, ‘quarter circle orifice’, ‘Holling-
shead v cone’, ‘wedge meter’, ‘eccentric orifice’, ‘venuri nozzle’, ‘rough welded convergent
venturi tube’, ‘ISA 1932 nozzle’, ‘ISO 15377 quarter-circle orifice’, ‘Hollingshead venturi
smooth’, ‘Hollingshead orifice’, ‘cone meter’, ‘Hollingshead wedge’, ‘Miller orifice’, ‘long
radius nozzle’, ‘ISO 15377 conical orifice’, ‘unspecified meter’, ‘as cast convergent venturi
tube’, ‘Miller eccentric orifice’, ‘ISO 15377 eccentric orifice’}, [-]
Returns
dP [float] Non-recoverable pressure drop of the differential pressure flow meter, [Pa]

Notes

See the appropriate functions for the documentation for the formulas and references used in each method.
Wedge meters, and venturi nozzles do not have standard formulas available for pressure drop computation.

Examples

>>> differential_pressure_meter_dP(D=0.07366, D2=0.05, P1=200000.0,


... P2=183000.0, meter_type='as cast convergent venturi tube')
1788.5717754177406

fluids.flow_meter.differential_pressure_meter_C_epsilon(D, D2, m, P1, P2, rho, mu, k, meter_type,


taps=None, tap_position=None,
C_specified=None,
epsilon_specified=None)
Calculates the discharge coefficient and expansibility of a flow meter given the mass flow rate, the upstream
pressure, the second pressure value, and the orifice diameter for a differential pressure flow meter based on the
geometry of the meter, measured pressures of the meter, and the density, viscosity, and isentropic exponent of
the fluid.
Parameters
D [float] Upstream internal pipe diameter, [m]
D2 [float] Diameter of orifice, or venturi meter orifice, or flow tube orifice, or cone meter end
diameter, or wedge meter fluid flow height, [m]
m [float] Mass flow rate of fluid through the flow meter, [kg/s]
P1 [float] Static pressure of fluid upstream of differential pressure meter at the cross-section of
the pressure tap, [Pa]
P2 [float] Static pressure of fluid downstream of differential pressure meter or at the prescribed
location (varies by type of meter) [Pa]

2.8. Orifice plates, flow nozzles, Venturi tubes, cone and wedge meters (fluids.flow_meter) 203
Fluids Documentation, Release 1.0.21

rho [float] Density of fluid at P1, [kg/m^3]


mu [float] Viscosity of fluid at P1, [Pa*s]
k [float] Isentropic exponent of fluid, [-]
meter_type [str] One of {‘conical orifice’, ‘orifice’, ‘machined convergent venturi tube’, ‘ISO
5167 orifice’, ‘Miller quarter circle orifice’, ‘Hollingshead venturi sharp’, ‘segmental ori-
fice’, ‘Miller conical orifice’, ‘Miller segmental orifice’, ‘quarter circle orifice’, ‘Holling-
shead v cone’, ‘wedge meter’, ‘eccentric orifice’, ‘venuri nozzle’, ‘rough welded convergent
venturi tube’, ‘ISA 1932 nozzle’, ‘ISO 15377 quarter-circle orifice’, ‘Hollingshead venturi
smooth’, ‘Hollingshead orifice’, ‘cone meter’, ‘Hollingshead wedge’, ‘Miller orifice’, ‘long
radius nozzle’, ‘ISO 15377 conical orifice’, ‘unspecified meter’, ‘as cast convergent venturi
tube’, ‘Miller eccentric orifice’, ‘ISO 15377 eccentric orifice’}, [-]
taps [str, optional] The orientation of the taps; one of ‘corner’, ‘flange’, ‘D’, or ‘D/2’; applies
for orifice meters only, [-]
tap_position [str, optional] The rotation of the taps, used only for the eccentric orifice case
where the pressure profile is are not symmetric; ‘180 degree’ for the normal case where the
taps are opposite the orifice bore, and ‘90 degree’ for the case where, normally for operational
reasons, the taps are near the bore [-]
C_specified [float, optional] If specified, the correlation for the meter type is not used - this
value is returned for C
epsilon_specified [float, optional] If specified, the correlation for the fluid expansibility is not
used - this value is returned for 𝜖, [-]
Returns
C [float] Coefficient of discharge of the specified flow meter type at the specified conditions, [-]
expansibility [float] Expansibility factor (1 for incompressible fluids, less than 1 for real fluids),
[-]

Notes

This function should be called by an outer loop when solving for a variable.
The latest ISO formulations for expansibility are used with the Miller correlations.

Examples

>>> differential_pressure_meter_C_epsilon(D=0.07366, D2=0.05, P1=200000.0,


... P2=183000.0, rho=999.1, mu=0.0011, k=1.33, m=7.702338035732168,
... meter_type='ISO 5167 orifice', taps='D')
(0.6151252900244296, 0.9711026966676307)

fluids.flow_meter.differential_pressure_meter_beta(D, D2, meter_type)


Calculates the beta ratio of a differential pressure meter.
Parameters
D [float] Upstream internal pipe diameter, [m]
D2 [float] Diameter of orifice, or venturi meter orifice, or flow tube orifice, or cone meter end
diameter, or wedge meter fluid flow height, [m]

204 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

meter_type [str] One of {‘conical orifice’, ‘orifice’, ‘machined convergent venturi tube’, ‘ISO
5167 orifice’, ‘Miller quarter circle orifice’, ‘Hollingshead venturi sharp’, ‘segmental ori-
fice’, ‘Miller conical orifice’, ‘Miller segmental orifice’, ‘quarter circle orifice’, ‘Holling-
shead v cone’, ‘wedge meter’, ‘eccentric orifice’, ‘venuri nozzle’, ‘rough welded convergent
venturi tube’, ‘ISA 1932 nozzle’, ‘ISO 15377 quarter-circle orifice’, ‘Hollingshead venturi
smooth’, ‘Hollingshead orifice’, ‘cone meter’, ‘Hollingshead wedge’, ‘Miller orifice’, ‘long
radius nozzle’, ‘ISO 15377 conical orifice’, ‘unspecified meter’, ‘as cast convergent venturi
tube’, ‘Miller eccentric orifice’, ‘ISO 15377 eccentric orifice’}, [-]
Returns
beta [float] Differential pressure meter diameter ratio, [-]

Examples

>>> differential_pressure_meter_beta(D=0.2575, D2=0.184,


... meter_type='cone meter')
0.6995709873957624

fluids.flow_meter.dP_orifice(D, Do, P1, P2, C)


Calculates the non-recoverable pressure drop of an orifice plate based on the pressure drop and the geometry of
the plate and the discharge coefficient.
√︀
1 − 𝛽 4 (1 − 𝐶 2 ) − 𝐶𝛽 2
∆𝑤 ¯ = √︀ (𝑃1 − 𝑃2 )
1 − 𝛽 4 (1 − 𝐶 2 ) + 𝐶𝛽 2

Parameters
D [float] Upstream internal pipe diameter, [m]
Do [float] Diameter of orifice at flow conditions, [m]
P1 [float] Static pressure of fluid upstream of orifice at the cross-section of the pressure tap, [Pa]
P2 [float] Static pressure of fluid downstream of orifice at the cross-section of the pressure tap,
[Pa]
C [float] Coefficient of discharge of the orifice, [-]
Returns
dP [float] Non-recoverable pressure drop of the orifice plate, [Pa]

Notes

This formula can be well approximated by:

¯ = 1 − 𝛽 1.9 (𝑃1 − 𝑃2 )
(︀ )︀
∆𝑤

The recoverable pressure drop should be recovered by 6 pipe diameters downstream of the orifice plate.

2.8. Orifice plates, flow nozzles, Venturi tubes, cone and wedge meters (fluids.flow_meter) 205
Fluids Documentation, Release 1.0.21

References

[1], [2]

Examples

>>> dP_orifice(D=0.07366, Do=0.05, P1=200000.0, P2=183000.0, C=0.61512)


9069.474705745388

2.8.3 Orifice Plate Correlations

fluids.flow_meter.C_Reader_Harris_Gallagher(D, Do, rho, mu, m, taps='corner')


Calculates the coefficient of discharge of the orifice based on the geometry of the plate, measured pressures of
the orifice, mass flow rate through the orifice, and the density and viscosity of the fluid.
)︂0.7
106 𝛽
(︂
2 8
𝐶 = 0.5961 + 0.0261𝛽 − 0.216𝛽 + 0.000521
𝑅𝑒𝐷
)︂0.3
106
(︂
+(0.0188 + 0.0063𝐴)𝛽 3.5
𝑅𝑒𝐷
𝛽4
+(0.043 + 0.080 exp(−10𝐿1 ) − 0.123 exp(−7𝐿1 ))(1 − 0.11𝐴)
1 − 𝛽4
−0.031(𝑀2′ − 0.8𝑀2′1.1 )𝛽 1.3

2𝐿′2
𝑀2′ =
1−𝛽
(︂ )︂0.8
19000𝛽
𝐴=
𝑅𝑒𝐷
𝜌𝑣𝐷
𝑅𝑒𝐷 =
𝜇
If D < 71.12 mm (2.8 in.) (Note this is a continuous addition; there is no discontinuity):
(︂ )︂
𝐷
𝐶+ = 0.11(0.75 − 𝛽) 2.8 −
0.0254
If the orifice has corner taps:

𝐿1 = 𝐿′2 = 0

If the orifice has D and D/2 taps:

𝐿1 = 1

𝐿′2 = 0.47
If the orifice has Flange taps:
0.0254
𝐿1 = 𝐿′2 =
𝐷
Parameters
D [float] Upstream internal pipe diameter, [m]

206 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

Do [float] Diameter of orifice at flow conditions, [m]


rho [float] Density of fluid at P1, [kg/m^3]
mu [float] Viscosity of fluid at P1, [Pa*s]
m [float] Mass flow rate of fluid through the orifice, [kg/s]
taps [str] The orientation of the taps; one of ‘corner’, ‘flange’, ‘D’, or ‘D/2’, [-]
Returns
C [float] Coefficient of discharge of the orifice, [-]

Notes

The following limits apply to the orifice plate standard [1]:


The measured pressure difference for the orifice plate should be under 250 kPa.
There are roughness limits as well; the roughness should be under 6 micrometers, although there are many more
conditions to that given in [1].
For orifice plates with D and D/2 or corner pressure taps:
• Orifice bore diameter muse be larger than 12.5 mm (0.5 inches)
• Pipe diameter between 50 mm and 1 m (2 to 40 inches)
• Beta between 0.1 and 0.75 inclusive
• Reynolds number larger than 5000 (for 0.10 ≤ 𝛽 ≤ 0.56) or for 𝛽 ≥ 0.56, 𝑅𝑒𝐷 ≥ 16000𝛽 2
For orifice plates with flange pressure taps:
• Orifice bore diameter muse be larger than 12.5 mm (0.5 inches)
• Pipe diameter between 50 mm and 1 m (2 to 40 inches)
• Beta between 0.1 and 0.75 inclusive
• Reynolds number larger than 5000 and also larger than 170000𝛽 2 𝐷.
This is also presented in Crane’s TP410 (2009) publication, whereas the 1999 and 1982 editions showed only a
graph for discharge coefficients.

References

[1], [2], [3], [4]

Examples

>>> C_Reader_Harris_Gallagher(D=0.07391, Do=0.0222, rho=1.165, mu=1.85E-5,


... m=0.12, taps='flange')
0.5990326277163659

fluids.flow_meter.C_eccentric_orifice_ISO_15377_1998(D, Do)
Calculates the coefficient of discharge of an eccentric orifice based on the geometry of the plate according to ISO
15377, first introduced in 1998 and also presented in the second 2007 edition. It also appears in BS 1042-1.2:

2.8. Orifice plates, flow nozzles, Venturi tubes, cone and wedge meters (fluids.flow_meter) 207
Fluids Documentation, Release 1.0.21

1989.

𝐶 = 0.9355 − 1.6889𝛽 + 3.0428𝛽 2 − 1.7989𝛽 3

This type of plate is normally used to avoid obstructing entrained gas, liquid, or sediment.
Parameters
D [float] Upstream internal pipe diameter, [m]
Do [float] Diameter of orifice at flow conditions, [m]
Returns
C [float] Coefficient of discharge of the eccentric orifice, [-]

Notes

No correction for where the orifice bore is located is included.


The following limits apply to the orifice plate standard [1]:
• Bore diameter above 50 mm.
• Pipe diameter between 10 cm and 1 m.
• Beta ratio between 0.46 and 0.84
• 2 × 105 𝛽 2 ≤ 𝑅𝑒𝐷 ≤ 106 𝛽
The uncertainty of this equation for C is said to be 1% if beta is under 0.75, otherwise 2%.
The orifice_expansibility function should be used with this method as well.
Additional specifications are:
• The thickness of the orifice should be between 0.005`D` and 0.02`D`.
• Corner tappings should be used, with hole diameter between 3 and 10 mm. The angular orientation of
the tappings matters because the flow meter is not symmetrical. The angle should ideally be at the top or
bottom of the plate, opposite which side the bore is on - but this can cause issues with deposition if the taps
are on the bottom or gas bubbles if the taps are on the taps. The taps are often placed 30 degrees away from
the ideal position to counteract this effect, with under an extra 2% error.
Some comparisons with CFD results can be found in [2].

References

[1], [2]

Examples

>>> C_eccentric_orifice_ISO_15377_1998(.2, .075)


0.6351923828125

fluids.flow_meter.C_quarter_circle_orifice_ISO_15377_1998(D, Do)
Calculates the coefficient of discharge of a quarter circle orifice based on the geometry of the plate according
to ISO 15377, first introduced in 1998 and also presented in the second 2007 edition. It also appears in BS
1042-1.2: 1989.

𝐶 = 0.73823 + 0.3309𝛽 − 1.1615𝛽 2 + 1.5084𝛽 3

208 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

Parameters
D [float] Upstream internal pipe diameter, [m]
Do [float] Diameter of orifice at flow conditions, [m]
Returns
C [float] Coefficient of discharge of the quarter circle orifice, [-]

Notes

The discharge coefficient of this type of orifice plate remains constant down to a lower than normal Re, as occurs
in highly viscous applications.
The following limits apply to the orifice plate standard [1]:
• Bore diameter >= 1.5 cm
• Pipe diameter <= 50 cm
• Beta ratio between 0.245 and 0.6
• 𝑅𝑒𝑑 ≤ 105 𝛽
There is also a table in [1] which lists increased minimum upstream pipe diameters for pipes of different rough-
nesses; the higher the roughness, the larger the pipe diameter required, and the table goes up to 20 cm for rusty
cast iron.
Corner taps should be used up to pipe diameters of 40 mm; for larger pipes, corner or flange taps can be used.
No impact on the flow coefficient is included in the correlation.
The recommended expansibility method for this type of orifice is orifice_expansibility.

References

[1]

Examples

>>> C_quarter_circle_orifice_ISO_15377_1998(.2, .075)


0.77851484375000

fluids.flow_meter.C_Miller_1996(D, Do, rho, mu, m, subtype='orifice', taps='corner', tap_position='180


degree')
Calculates the coefficient of discharge of any of the orifice types supported by the Miller (1996) [1] correlation
set. These correlations cover a wide range of industrial applications and sizes. Most of them are functions of
beta ratio and Reynolds number. Unlike the ISO standards, these correlations do not come with well defined
ranges of validity, so caution should be applied using there correlations.
The base equation is as follows, and each orifice type and range has different values or correlations for 𝐶∞ , b,
and n.
𝑏
𝐶 = 𝐶∞ +
𝑅𝑒𝑛𝐷

Parameters
D [float] Upstream internal pipe diameter, [m]

2.8. Orifice plates, flow nozzles, Venturi tubes, cone and wedge meters (fluids.flow_meter) 209
Fluids Documentation, Release 1.0.21

Do [float] Diameter of orifice at flow conditions, [m]


rho [float] Density of fluid at P1, [kg/m^3]
mu [float] Viscosity of fluid at P1, [Pa*s]
m [float] Mass flow rate of fluid through the orifice, [kg/s]
subtype [str, optional] One of ‘orifice’, ‘eccentric orifice’, ‘segmental orifice’, ‘conical orifice’,
or ‘quarter circle orifice’, [-]
taps [str, optional] The orientation of the taps; one of ‘corner’, ‘flange’, ‘D and D/2’, ‘pipe’, or
‘vena contracta’; not all orifice subtypes support the all tap types [-]
tap_position [str, optional] The rotation of the taps, used only for the eccentric orifice case
where the pressure profile is are not symmetric; ‘180 degree’ for the normal case where the
taps are opposite the orifice bore, and ‘90 degree’ for the case where, normally for operational
reasons, the taps are near the bore [-]
Returns
C [float] Coefficient of discharge of the orifice, [-]

Notes

Many of the correlations transition at a pipe diameter of 100 mm to different equations, which will lead to
discontinuous behavior.
It should also be noted the author of these correlations developed a commercial flow meter rating software pack-
age, at [2]. He passed away in 2014, but contributed massively to the field of flow measurement.
The numerous equations for the different cases are as follows:
For all regular (concentric) orifices, the b equation is as follows and n = 0.75:

𝑏 = 91.706𝛽 2.5

Regular (concentric) orifice, corner taps:

𝐶∞ = 0.5959 + 0.0312𝛽 2 .1 − 0.184𝛽 8

Regular (concentric) orifice, flange taps, D > 58.4 mm:

2.286𝛽 4 0.856𝛽 3
𝐶∞ = 0.5959 + 0.0312𝛽 2.1 − 0.184𝛽 8 + −
(𝐷𝑚𝑚 (1.0 − 𝛽 4 )) 𝐷𝑚𝑚

Regular (concentric) orifice, flange taps, D < 58.4 mm:

0.039𝛽 4 0.856𝛽 3
𝐶∞ = 0.5959 + 0.0312𝛽 2.1 − 0.184𝛽 8 + 4

(1.0 − 𝛽 ) 𝐷𝑚𝑚

Regular (concentric) orifice, ‘D and D/2’ taps:

0.039𝛽 4
𝐶∞ = 0.5959 + 0.0312𝛽 2.1 − 0.184𝛽 8 + − 0.01584
(1.0 − 𝛽 4 )

Regular (concentric) orifice, ‘pipe’ taps:

0.039𝛽 4
𝐶∞ = 0.5959 + 0.461𝛽 2.1 + 0.48𝛽 8 +
(1.0 − 𝛽 4 )

210 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

For the case of a conical orifice, there is no tap dependence and one equation (b = 0, n = 0):

𝐶∞ = 0.734 if 250𝛽 ≤ 𝑅𝑒 ≤ 500𝛽 else 0.730

For the case of a quarter circle orifice, corner and flange taps have the same dependence (b = 0, n = 0):

0.0675𝛽 4
𝐶∞ = (0.7746 − 0.1334𝛽 2.1 + 1.4098𝛽 8 + + 0.3865𝛽 3 )
(1 − 𝛽 4 )

For all segmental orifice types, b = 0 and n = 0


Segmental orifice, ‘flange’ taps, D < 10 cm:

0.2603𝛽 4
𝐶∞ = 0.6284 + 0.1462𝛽 2.1 − 0.8464𝛽 8 + − 0.2886𝛽 3
(1 − 𝛽 4 )
Segmental orifice, ‘flange’ taps, D > 10 cm:

0.0934𝛽 4
𝐶∞ = 0.6276 + 0.0828𝛽 2.1 + 0.2739𝛽 8 − − 0.1132𝛽 3
(1 − 𝛽 4 )
Segmental orifice, ‘vena contracta’ taps, D < 10 cm:

0.1170𝛽 4
𝐶∞ = 0.6261 + 0.1851𝛽 2.1 − 0.2879𝛽 8 + − 0.2845𝛽 3
(1 − 𝛽 4 )
Segmental orifice, ‘vena contracta’ taps, D > 10 cm:

0.0934𝛽 4
𝐶∞ = 0.6276 + 0.0828𝛽 2.1 + 0.2739𝛽 8 − − 0.1132𝛽 3
(1 − 𝛽 4 )

For all eccentric orifice types, n = 0.75 and b is fit to a polynomial of beta.
Eccentric orifice, ‘flange’ taps, 180 degree opposite taps, D < 10 cm:

.1019𝛽 4
𝐶∞ = 0.5917 + 0.3061𝛽 2.1 + .3406𝛽 8 − − 0.2715𝛽 3
(1 − 𝛽 4 )

𝑏 = 7.3 − 15.7𝛽 + 170.8𝛽 2 − 399.7𝛽 3 + 332.2𝛽 4


Eccentric orifice, ‘flange’ taps, 180 degree opposite taps, D > 10 cm:

0.6510𝛽 4
𝐶∞ = 0.6016 + 0.3312𝛽 2.1 − 1.5581𝛽 8 + − 0.7308𝛽 3
(1 − 𝛽 4 )

𝑏 = −139.7 + 1328.8𝛽 − 4228.2𝛽 2 + 5691.9𝛽 3 − 2710.4𝛽 4


Eccentric orifice, ‘flange’ taps, 90 degree side taps, D < 10 cm:

.2273𝛽 4
𝐶∞ = 0.5866 + 0.3917𝛽 2.1 + .7586𝛽 8 − − .3343𝛽 3
(1 − 𝛽 4 )

𝑏 = 69.1 − 469.4𝛽 + 1245.6𝛽 2 − 1287.5𝛽 3 + 486.2𝛽 4


Eccentric orifice, ‘flange’ taps, 90 degree side taps, D > 10 cm:

0.0244𝛽 4
𝐶∞ = 0.6037 + 0.1598𝛽 2.1 − .2918𝛽 8 + − 0.0790𝛽 3
(1 − 𝛽 4 )

𝑏 = −103.2 + 898.3𝛽 − 2557.3𝛽 2 + 2977.0𝛽 3 − 1131.3𝛽 4

2.8. Orifice plates, flow nozzles, Venturi tubes, cone and wedge meters (fluids.flow_meter) 211
Fluids Documentation, Release 1.0.21

Eccentric orifice, ‘vena contracta’ taps, 180 degree opposite taps, D < 10 cm:
.1046𝛽 4
𝐶∞ = 0.5925 + 0.3380𝛽 2.1 + 0.4016𝛽 8 − − 0.3212𝛽 3
(1 − 𝛽 4 )
𝑏 = 23.3 − 207.0𝛽 + 821.5𝛽 2 − 1388.6𝛽 3 + 900.3𝛽 4
Eccentric orifice, ‘vena contracta’ taps, 180 degree opposite taps, D > 10 cm:
.0569𝛽 4
𝐶∞ = 0.5922 + 0.3932𝛽 2.1 + .3412𝛽 8 − − 0.4628𝛽 3
(1 − 𝛽 4 )
𝑏 = 55.7 − 471.4𝛽 + 1721.8𝛽 2 − 2722.6𝛽 3 + 1569.4𝛽 4
Eccentric orifice, ‘vena contracta’ taps, 90 degree side taps, D < 10 cm:
0.1963𝛽 4
𝐶∞ = 0.5875 + 0.3813𝛽 2.1 + 0.6898𝛽 8 − − 0.3366𝛽 3
(1 − 𝛽 4 )
𝑏 = −69.3 + 556.9𝛽 − 1332.2𝛽 2 + 1303.7𝛽 3 − 394.8𝛽 4
Eccentric orifice, ‘vena contracta’ taps, 90 degree side taps, D > 10 cm:
0.0955𝛽 4
𝐶∞ = 0.5949 + 0.4078𝛽 2.1 + 0.0547𝛽 8 + − 0.5608𝛽 3
(1 − 𝛽 4 )
𝑏 = 52.8 − 434.2𝛽 + 1571.2𝛽 2 − 2460.9𝛽 3 + 1420.2𝛽 4

References

[1], [2]

Examples

>>> C_Miller_1996(D=0.07391, Do=0.0222, rho=1.165, mu=1.85E-5, m=0.12, taps='flange


˓→', subtype='orifice')

0.599065557156788

fluids.flow_meter.orifice_expansibility(D, Do, P1, P2, k)


Calculates the expansibility factor for orifice plate calculations based on the geometry of the plate, measured
pressures of the orifice, and the isentropic exponent of the fluid.
[︃ (︂ )︂1/𝜅 ]︃
4 8 𝑃2
𝜖 = 1 − (0.351 + 0.256𝛽 + 0.93𝛽 ) 1 −
𝑃1
Parameters
D [float] Upstream internal pipe diameter, [m]
Do [float] Diameter of orifice at flow conditions, [m]
P1 [float] Static pressure of fluid upstream of orifice at the cross-section of the pressure tap, [Pa]
P2 [float] Static pressure of fluid downstream of orifice at the cross-section of the pressure tap,
[Pa]
k [float] Isentropic exponent of fluid, [-]
Returns
expansibility [float, optional] Expansibility factor (1 for incompressible fluids, less than 1 for
real fluids), [-]

212 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

Notes

This formula was determined for the range of P2/P1 >= 0.80, and for fluids of air, steam, and natural gas. However,
there is no objection to using it for other fluids.
It is said in [1] that for liquids this should not be used. The result can be forced by setting k to a really high
number like 1E20.

References

[1], [2]

Examples

>>> orifice_expansibility(D=0.0739, Do=0.0222, P1=1E5, P2=9.9E4, k=1.4)


0.9974739057343425

fluids.flow_meter.orifice_expansibility_1989(D, Do, P1, P2, k)


Calculates the expansibility factor for orifice plate calculations based on the geometry of the plate, measured
pressures of the orifice, and the isentropic exponent of the fluid.

𝜖 = 1 − (0.41 + 0.35𝛽 4 )∆𝑃/𝜅/𝑃1

Parameters
D [float] Upstream internal pipe diameter, [m]
Do [float] Diameter of orifice at flow conditions, [m]
P1 [float] Static pressure of fluid upstream of orifice at the cross-section of the pressure tap, [Pa]
P2 [float] Static pressure of fluid downstream of orifice at the cross-section of the pressure tap,
[Pa]
k [float] Isentropic exponent of fluid, [-]
Returns
expansibility [float] Expansibility factor (1 for incompressible fluids, less than 1 for real fluids),
[-]

Notes

This formula was determined for the range of P2/P1 >= 0.75, and for fluids of air, steam, and natural gas. However,
there is no objection to using it for other fluids.
This is an older formula used to calculate expansibility factors for orifice plates.
In this standard, an expansibility factor formula transformation in terms of the pressure after the orifice is pre-
sented as well. This is the more standard formulation in terms of the upstream conditions. The other formula is
below for reference only:
√︂
∆𝑃 ∆𝑃
𝜖2 = 1 + − (0.41 + 0.35𝛽 4 ) √︁
𝑃2 𝜅𝑃2 1 + Δ𝑃 𝑃2

[2] recommends this formulation for wedge meters as well.

2.8. Orifice plates, flow nozzles, Venturi tubes, cone and wedge meters (fluids.flow_meter) 213
Fluids Documentation, Release 1.0.21

References

[1], [2]

Examples

>>> orifice_expansibility_1989(D=0.0739, Do=0.0222, P1=1E5, P2=9.9E4, k=1.4)


0.9970510687411718

fluids.flow_meter.ISO_15377_CONICAL_ORIFICE_C = 0.734
Constant loss coefficient for conical orifice plates according to ISO 15377

2.8.4 Nozzle Flow Meters

fluids.flow_meter.C_long_radius_nozzle(D, Do, rho, mu, m)


Calculates the coefficient of discharge of a long radius nozzle used for measuring flow rate of fluid, based on the
geometry of the nozzle, mass flow rate through the nozzle, and the density and viscosity of the fluid.
)︂0.5
106
(︂
𝐶 = 0.9965 − 0.00653𝛽 0.5
𝑅𝑒𝐷

Parameters
D [float] Upstream internal pipe diameter, [m]
Do [float] Diameter of long radius nozzle orifice at flow conditions, [m]
rho [float] Density of fluid at P1, [kg/m^3]
mu [float] Viscosity of fluid at P1, [Pa*s]
m [float] Mass flow rate of fluid through the nozzle, [kg/s]
Returns
C [float] Coefficient of discharge of the long radius nozzle orifice, [-]

References

[1], [2]

Examples

>>> C_long_radius_nozzle(D=0.07391, Do=0.0422, rho=1.2, mu=1.8E-5, m=0.1)


0.9805503704679863

fluids.flow_meter.C_ISA_1932_nozzle(D, Do, rho, mu, m)


Calculates the coefficient of discharge of an ISA 1932 style nozzle used for measuring flow rate of fluid, based
on the geometry of the nozzle, mass flow rate through the nozzle, and the density and viscosity of the fluid.
)︂1.15
106
(︂
𝐶 = 0.9900 − 0.2262𝛽 4.1 − (0.00175𝛽 2 − 0.0033𝛽 4.15 )
𝑅𝑒𝐷

Parameters

214 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

D [float] Upstream internal pipe diameter, [m]


Do [float] Diameter of nozzle orifice at flow conditions, [m]
rho [float] Density of fluid at P1, [kg/m^3]
mu [float] Viscosity of fluid at P1, [Pa*s]
m [float] Mass flow rate of fluid through the nozzle, [kg/s]
Returns
C [float] Coefficient of discharge of the nozzle orifice, [-]

References

[1], [2]

Examples

>>> C_ISA_1932_nozzle(D=0.07391, Do=0.0422, rho=1.2, mu=1.8E-5, m=0.1)


0.9635849973250495

fluids.flow_meter.C_venturi_nozzle(D, Do)
Calculates the coefficient of discharge of an Venturi style nozzle used for measuring flow rate of fluid, based on
the geometry of the nozzle.

𝐶 = 0.9858 − 0.196𝛽 4.5

Parameters
D [float] Upstream internal pipe diameter, [m]
Do [float] Diameter of nozzle orifice at flow conditions, [m]
Returns
C [float] Coefficient of discharge of the nozzle orifice, [-]

References

[1], [2]

Examples

>>> C_venturi_nozzle(D=0.07391, Do=0.0422)


0.9698996454169576

fluids.flow_meter.nozzle_expansibility(D, Do, P1, P2, k, beta=None)


Calculates the expansibility factor for a nozzle or venturi nozzle, based on the geometry of the plate, measured
pressures of the orifice, and the isentropic exponent of the fluid.
]︂}︂0.5
𝜅𝜏 2/𝜅 1 − 𝛽4 1 − 𝜏 (𝜅−1)/𝜅
{︂(︂ )︂ (︂ )︂ [︂
𝜖=
𝜅−1 1 − 𝛽 4 𝜏 2/𝜅 1−𝜏

Parameters

2.8. Orifice plates, flow nozzles, Venturi tubes, cone and wedge meters (fluids.flow_meter) 215
Fluids Documentation, Release 1.0.21

D [float] Upstream internal pipe diameter, [m]


Do [float] Diameter of orifice of the venturi or nozzle, [m]
P1 [float] Static pressure of fluid upstream of orifice at the cross-section of the pressure tap, [Pa]
P2 [float] Static pressure of fluid downstream of orifice at the cross-section of the pressure tap,
[Pa]
k [float] Isentropic exponent of fluid, [-]
beta [float, optional] Optional beta ratio, which is useful to specify for wedge meters or flow
meters which have a different beta ratio calculation, [-]
Returns
expansibility [float] Expansibility factor (1 for incompressible fluids, less than 1 for real fluids),
[-]

Notes

This formula was determined for the range of P2/P1 >= 0.75.
Mathematically the equation cannot be evaluated at k = 1, but if the limit of the equation is taken the following
equation is obtained and is implemented:
⎯ (︁ )︁ (︁ )︁

⎸ −𝐷4 𝑃1 𝑃 2 log 𝑃2 + 𝐷𝑜4 𝑃1 𝑃 2 log 𝑃2
⎷ 2 𝑃1 2 𝑃1
𝜖=
𝐷4 𝑃13 − 𝐷4 𝑃12 𝑃2 − 𝐷𝑜4 𝑃1 𝑃22 + 𝐷𝑜4 𝑃23

Note also there is a small amount of floating-point error around the range of k ~1+1e-5 to ~1-1e-5, starting with
1e-7 and increasing to the point of giving values larger than 1 or zero in the k ~1+1e-12 to ~1-1e-12 range.

References

[1], [2]

Examples

>>> nozzle_expansibility(D=0.0739, Do=0.0222, P1=1E5, P2=9.9E4, k=1.4)


0.994570234456

2.8.5 Venturi Tube Meters

fluids.flow_meter.ROUGH_WELDED_CONVERGENT_VENTURI_TUBE_C = 0.985
Constant loss coefficient for rough-welded convergent venturi tubes
fluids.flow_meter.MACHINED_CONVERGENT_VENTURI_TUBE_C = 0.995
Constant loss coefficient for machined convergent venturi tubes
fluids.flow_meter.AS_CAST_VENTURI_TUBE_C = 0.984
Constant loss coefficient for as-cast venturi tubes

216 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

fluids.flow_meter.dP_venturi_tube(D, Do, P1, P2)


Calculates the non-recoverable pressure drop of a venturi tube differential pressure meter based on the pressure
drop and the geometry of the venturi meter.

∆𝑤
¯
𝜖=
∆𝑃
The 𝜖 value is looked up in a table of values as a function of beta ratio and upstream pipe diameter (roughness
impact).
Parameters
D [float] Upstream internal pipe diameter, [m]
Do [float] Diameter of venturi tube at flow conditions, [m]
P1 [float] Static pressure of fluid upstream of venturi tube at the cross-section of the pressure
tap, [Pa]
P2 [float]
Static pressure of fluid downstream of venturi tube at the cross-section of the pressure
tap, [Pa]
Returns
dP [float] Non-recoverable pressure drop of the venturi tube, [Pa]

Notes

The recoverable pressure drop should be recovered by 6 pipe diameters downstream of the venturi tube.
Note there is some information on the effect of Reynolds number as well in [1] and [2], with a curve showing
an increased pressure drop from 1E5-6E5 to with a decreasing multiplier from 1.75 to 1; the multiplier is 1 for
higher Reynolds numbers. This is not currently included in this implementation.

References

[1], [2]

Examples

>>> dP_venturi_tube(D=0.07366, Do=0.05, P1=200000.0, P2=183000.0)


1788.5717754177406

fluids.flow_meter.C_Reader_Harris_Gallagher_wet_venturi_tube(mg, ml, rhog, rhol, D, Do, H=1)


Calculates the coefficient of discharge of the wet gas venturi tube based on the geometry of the tube, mass flow
rates of liquid and vapor through the tube, the density of the liquid and gas phases, and an adjustable coefficient
H.
(︃ √︂ )︃
𝑋
𝐶 = 1 − 0.0463 exp(−0.05𝐹 𝑟𝑔𝑎𝑠,𝑡ℎ ) · min 1,
0.016

𝐹 𝑟gas, densionetric
𝐹 𝑟𝑔𝑎𝑠,𝑡ℎ =
𝛽 2.5
√︀
𝜑= 1 + 𝐶𝐶ℎ 𝑋 + 𝑋 2

2.8. Orifice plates, flow nozzles, Venturi tubes, cone and wedge meters (fluids.flow_meter) 217
Fluids Documentation, Release 1.0.21

(︂ )︂𝑛 (︂ )︂𝑛
𝜌𝑙 𝜌1,𝑔
𝐶𝐶ℎ = +
𝜌1,𝑔 𝜌𝑙
[︂ (︂ )︂ ]︂
−0.8𝐹 𝑟gas, densiometric
𝑛 = max 0.583 − 0.18𝛽 2 − 0.578 exp , 0.392 − 0.18𝛽 2
𝐻
(︂ )︂ √︂
𝑚𝑙 𝜌1,𝑔
𝑋=
𝑚𝑔 𝜌𝑙
𝑣𝑔𝑎𝑠 𝜌1,𝑔 4𝑚𝑔 𝜌1,𝑔
√︂ √︂
𝐹 𝑟gas, densiometric = √ = √
𝑔𝐷 𝜌𝑙 − 𝜌1,𝑔 𝜌1,𝑔 𝜋𝐷2 𝑔𝐷 𝜌𝑙 − 𝜌1,𝑔
Parameters
mg [float] Mass flow rate of gas through the venturi tube, [kg/s]
ml [float] Mass flow rate of liquid through the venturi tube, [kg/s]
rhog [float] Density of gas at P1, [kg/m^3]
rhol [float] Density of liquid at P1, [kg/m^3]
D [float] Upstream internal pipe diameter, [m]
Do [float] Diameter of venturi tube at flow conditions, [m]
H [float, optional] A surface-tension effect coefficient used to adjust for different fluids, (1 for a
hydrocarbon liquid, 1.35 for water, 0.79 for water in steam) [-]
Returns
C [float] Coefficient of discharge of the wet gas venturi tube flow meter (includes flow rate of
gas ONLY), [-]

Notes

This model has more error than single phase differential pressure meters. The model was first published in [1],
and became ISO 11583 later.
The limits of this correlation according to [2] are as follows:

0.4 ≤ 𝛽 ≤ 0.75

0 < 𝑋 ≤ 0.3

𝐹 𝑟𝑔𝑎𝑠,𝑡ℎ > 3
𝜌𝑔
> 0.02
𝜌𝑙
𝐷 ≥ 50 mm

References

[1], [2]

218 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

Examples

>>> C_Reader_Harris_Gallagher_wet_venturi_tube(mg=5.31926, ml=5.31926/2,


... rhog=50.0, rhol=800., D=.1, Do=.06, H=1)
0.9754210845876333

fluids.flow_meter.dP_Reader_Harris_Gallagher_wet_venturi_tube(D, Do, P1, P2, ml, mg, rhol, rhog,


H=1.0)
Calculates the non-recoverable pressure drop of a wet gas venturi nozzle based on the pressure drop and the
geometry of the venturi nozzle, the mass flow rates of liquid and gas through it, the densities of the vapor and
liquid phase, and an adjustable coefficient H.

∆¯ 𝜔
𝑌 = − 0.0896 − 0.48𝛽 9
∆𝑃
[︂ ]︂
𝜌1,𝑔 𝐹 𝑟𝑔𝑎𝑠
𝑌𝑚𝑎𝑥 = 0.61 exp −11 − 0.045
𝜌𝑙 𝐻
[︂ (︂ )︂]︂
𝑌 −0.28𝐹 𝑟𝑔𝑎𝑠
= 1 − exp −35𝑋 0.75 exp
𝑌𝑚𝑎𝑥 𝐻
(︂ )︂ √︂
𝑚𝑙 𝜌1,𝑔
𝑋=
𝑚𝑔 𝜌𝑙
𝑣𝑔𝑎𝑠 𝜌1,𝑔 4𝑚𝑔 𝜌1,𝑔
√︂ √︂
𝐹 𝑟gas, densiometric = √ = √
𝑔𝐷 𝜌𝑙 − 𝜌1,𝑔 𝜌1,𝑔 𝜋𝐷 𝑔𝐷 𝜌𝑙 − 𝜌1,𝑔
2

Parameters
D [float] Upstream internal pipe diameter, [m]
Do [float] Diameter of venturi tube at flow conditions, [m]
P1 [float] Static pressure of fluid upstream of venturi tube at the cross-section of the pressure
tap, [Pa]
P2 [float] Static pressure of fluid downstream of venturi tube at the cross- section of the pressure
tap, [Pa]
ml [float] Mass flow rate of liquid through the venturi tube, [kg/s]
mg [float] Mass flow rate of gas through the venturi tube, [kg/s]
rhol [float] Density of liquid at P1, [kg/m^3]
rhog [float] Density of gas at P1, [kg/m^3]
H [float, optional] A surface-tension effect coefficient used to adjust for different fluids, (1 for a
hydrocarbon liquid, 1.35 for water, 0.79 for water in steam) [-]
Returns
C [float] Coefficient of discharge of the wet gas venturi tube flow meter (includes flow rate of
gas ONLY), [-]

2.8. Orifice plates, flow nozzles, Venturi tubes, cone and wedge meters (fluids.flow_meter) 219
Fluids Documentation, Release 1.0.21

Notes

The model was first published in [1], and became ISO 11583 later.

References

[1], [2]

Examples

>>> dP_Reader_Harris_Gallagher_wet_venturi_tube(D=.1, Do=.06, H=1,


... P1=6E6, P2=6E6-5E4, ml=5.31926/2, mg=5.31926, rhog=50.0, rhol=800.,)
16957.43843129572

2.8.6 Cone Meters

fluids.flow_meter.CONE_METER_C = 0.82
Constant loss coefficient for flow cone meters
fluids.flow_meter.diameter_ratio_cone_meter(D, Dc)
Calculates the diameter ratio beta used to characterize a cone flow meter.
√︂
𝑑2
𝛽 = 1 − 𝑐2
𝐷
Parameters
D [float] Upstream internal pipe diameter, [m]
Dc [float] Diameter of the largest end of the cone meter, [m]
Returns
beta [float] Cone meter diameter ratio, [-]

Notes

A mathematically equivalent formula often written is:


√︀
𝐷2 − 𝑑2𝑐
𝛽=
𝐷

References

[1]

220 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

Examples

>>> diameter_ratio_cone_meter(D=0.2575, Dc=0.184)


0.6995709873957624

fluids.flow_meter.cone_meter_expansibility_Stewart(D, Dc, P1, P2, k)


Calculates the expansibility factor for a cone flow meter, based on the geometry of the cone meter, measured
pressures of the orifice, and the isentropic exponent of the fluid. Developed in [1], also shown in [2].

∆𝑃
𝜖 = 1 − (0.649 + 0.696𝛽 4 )
𝜅𝑃1
Parameters
D [float] Upstream internal pipe diameter, [m]
Dc [float] Diameter of the largest end of the cone meter, [m]
P1 [float] Static pressure of fluid upstream of cone meter at the cross-section of the pressure tap,
[Pa]
P2 [float] Static pressure of fluid at the end of the center of the cone pressure tap, [Pa]
k [float] Isentropic exponent of fluid, [-]
Returns
expansibility [float] Expansibility factor (1 for incompressible fluids, less than 1 for real fluids),
[-]

Notes

This formula was determined for the range of P2/P1 >= 0.75; the only gas used to determine the formula is air.

References

[1], [2]

Examples

>>> cone_meter_expansibility_Stewart(D=1, Dc=0.9, P1=1E6, P2=8.5E5, k=1.2)


0.9157343

fluids.flow_meter.dP_cone_meter(D, Dc, P1, P2)


Calculates the non-recoverable pressure drop of a cone meter based on the measured pressures before and at the
cone end, and the geometry of the cone meter according to [1].

𝜔 = (1.09 − 0.813𝛽)∆𝑃
∆¯

Parameters
D [float] Upstream internal pipe diameter, [m]
Dc [float] Diameter of the largest end of the cone meter, [m]
P1 [float] Static pressure of fluid upstream of cone meter at the cross-section of the pressure tap,
[Pa]

2.8. Orifice plates, flow nozzles, Venturi tubes, cone and wedge meters (fluids.flow_meter) 221
Fluids Documentation, Release 1.0.21

P2 [float] Static pressure of fluid at the end of the center of the cone pressure tap, [Pa]
Returns
dP [float] Non-recoverable pressure drop of the orifice plate, [Pa]

Notes

The recoverable pressure drop should be recovered by 6 pipe diameters downstream of the cone meter.

References

[1]

Examples

>>> dP_cone_meter(1, .7, 1E6, 9.5E5)


25470.093437973323

2.8.7 Wedge Meters

fluids.flow_meter.C_wedge_meter_ISO_5167_6_2017(D, H)
Calculates the coefficient of discharge of an wedge flow meter used for measuring flow rate of fluid, based on the
geometry of the differential pressure flow meter according to the ISO 5167-6 standard (draft 2017).

𝐶 = 0.77 − 0.09𝛽

Parameters
D [float] Upstream internal pipe diameter, [m]
H [float] Portion of the diameter of the clear segment of the pipe up to the wedge blocking flow;
the height of the pipe up to the wedge, [m]
Returns
C [float] Coefficient of discharge of the wedge flow meter, [-]

Notes

This standard applies for wedge meters in line sizes between 50 and 600 mm; and height ratios between 0.2
and 0.6. The range of allowable Reynolds numbers is large; between 1E4 and 9E6. The uncertainty of the flow
coefficient is approximately 4%. Usually a 10:1 span of flow can be measured accurately. The discharge and
entry length of the meters must be at least half a pipe diameter. The wedge angle must be 90 degrees, plus or
minus two degrees.
The orientation of the wedge meter does not change the accuracy of this model.
There should be a straight run of 10 pipe diameters before the wedge meter inlet, and two of the same pipe
diameters after it.

222 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

References

[1]

Examples

>>> C_wedge_meter_ISO_5167_6_2017(D=0.1524, H=0.3*0.1524)


0.724792059539853

fluids.flow_meter.C_wedge_meter_Miller(D, H)
Calculates the coefficient of discharge of an wedge flow meter used for measuring flow rate of fluid, based on the
geometry of the differential pressure flow meter.
For half-inch lines:

𝐶 = 0.7883 + 0.107(1 − 𝛽 2 )

For 1 to 1.5 inch lines:

𝐶 = 0.6143 + 0.718(1 − 𝛽 2 )

For 1.5 to 24 inch lines:

𝐶 = 0.5433 + 0.2453(1 − 𝛽 2 )

Parameters
D [float] Upstream internal pipe diameter, [m]
H [float] Portion of the diameter of the clear segment of the pipe up to the wedge blocking flow;
the height of the pipe up to the wedge, [m]
Returns
C [float] Coefficient of discharge of the wedge flow meter, [-]

Notes

There is an ISO standard being developed to cover wedge meters as of 2018.


Wedge meters can have varying angles; 60 and 90 degree wedge meters have been reported. Tap locations 1 or
2 diameters (upstream and downstream), and 2D upstream/1D downstream have been used. Some wedges are
sharp; some are smooth. [2] gives some experimental values.

References

[1], [2]

2.8. Orifice plates, flow nozzles, Venturi tubes, cone and wedge meters (fluids.flow_meter) 223
Fluids Documentation, Release 1.0.21

Examples

>>> C_wedge_meter_Miller(D=0.1524, H=0.3*0.1524)


0.7267069372687651

fluids.flow_meter.diameter_ratio_wedge_meter(D, H)
Calculates the diameter ratio beta used to characterize a wedge flow meter as given in [1] and [2].

[︂ ]︂2 )︃0.5 ⎬ 0.5


⎛⎧ ⎫⎞
[︂ ]︂ [︂ ]︂ (︃
1 ⎨ 2𝐻 2𝐻 𝐻 𝐻
𝛽=⎝ arccos 1 − −2 1− − ⎠
𝜋⎩ 𝐷 𝐷 𝐷 𝐷 ⎭

Parameters
D [float] Upstream internal pipe diameter, [m]
H [float] Portion of the diameter of the clear segment of the pipe up to the wedge blocking flow;
the height of the pipe up to the wedge, [m]
Returns
beta [float] Wedge meter diameter ratio, [-]

References

[1], [2]

Examples

>>> diameter_ratio_wedge_meter(D=0.2027, H=0.0608)


0.5022531424646643

fluids.flow_meter.dP_wedge_meter(D, H, P1, P2)


Calculates the non-recoverable pressure drop of a wedge meter based on the measured pressures before and at
the wedge meter, and the geometry of the wedge meter according to [1].

𝜔 = (1.09 − 0.79𝛽)∆𝑃
∆¯

Parameters
D [float] Upstream internal pipe diameter, [m]
H [float] Portion of the diameter of the clear segment of the pipe up to the wedge blocking flow;
the height of the pipe up to the wedge, [m]
P1 [float] Static pressure of fluid upstream of wedge meter at the cross-section of the pressure
tap, [Pa]
P2 [float] Static pressure of fluid at the end of the wedge meter pressure tap, [ Pa]
Returns
dP [float] Non-recoverable pressure drop of the wedge meter, [Pa]

224 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

Notes

The recoverable pressure drop should be recovered by 5 pipe diameters downstream of the wedge meter.

References

[1]

Examples

>>> dP_wedge_meter(1, .7, 1E6, 9.5E5)


20344.849697483587

2.8.8 Flow Meter Utilities

fluids.flow_meter.discharge_coefficient_to_K(D, Do, C)
Converts a discharge coefficient to a standard loss coefficient, for use in computation of the actual pressure drop
of an orifice or other device.
[︃ √︀ ]︃2
1 − 𝛽 4 (1 − 𝐶 2 )
𝐾= −1
𝐶𝛽 2

Parameters
D [float] Upstream internal pipe diameter, [m]
Do [float] Diameter of orifice at flow conditions, [m]
C [float] Coefficient of discharge of the orifice, [-]
Returns
K [float] Loss coefficient with respect to the velocity and density of the fluid just upstream of
the orifice, [-]

Notes

If expansibility is used in the orifice calculation, the result will not match with the specified pressure drop formula
in [1]; it can almost be matched by dividing the calculated mass flow by the expansibility factor and using that
mass flow with the loss coefficient.

References

[1], [2]

2.8. Orifice plates, flow nozzles, Venturi tubes, cone and wedge meters (fluids.flow_meter) 225
Fluids Documentation, Release 1.0.21

Examples

>>> discharge_coefficient_to_K(D=0.07366, Do=0.05, C=0.61512)


5.2314291729754

fluids.flow_meter.K_to_discharge_coefficient(D, Do, K)
Converts a standard loss coefficient to a discharge coefficient.
√︃
1 𝛽4
𝐶= √ − √
2 𝐾𝛽 4 + 𝐾𝛽 4 2 𝐾𝛽 4 + 𝐾𝛽 4

Parameters
D [float] Upstream internal pipe diameter, [m]
Do [float] Diameter of orifice at flow conditions, [m]
K [float] Loss coefficient with respect to the velocity and density of the fluid just upstream of
the orifice, [-]
Returns
C [float] Coefficient of discharge of the orifice, [-]

Notes

If expansibility is used in the orifice calculation, the result will not match with the specified pressure drop formula
in [1]; it can almost be matched by dividing the calculated mass flow by the expansibility factor and using that
mass flow with the loss coefficient.
This expression was derived with SymPy, and checked numerically. There were three other, incorrect roots.

References

[1], [2]

Examples

>>> K_to_discharge_coefficient(D=0.07366, Do=0.05, K=5.2314291729754)


0.6151200000000001

fluids.flow_meter.velocity_of_approach_factor(D, Do)
Calculates a factor for orifice plate design called the velocity of approach.
1
Velocity of approach = √︀
1 − 𝛽4

Parameters
D [float] Upstream internal pipe diameter, [m]
Do [float] Diameter of orifice at flow conditions, [m]
Returns
velocity_of_approach [float] Coefficient of discharge of the orifice, [-]

226 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

References

[1]

Examples

>>> velocity_of_approach_factor(D=0.0739, Do=0.0222)


1.0040970074165514

fluids.flow_meter.flow_coefficient(D, Do, C)
Calculates a factor for differential pressure flow meter design called the flow coefficient. This should not be
confused with the flow coefficient often used when discussing valves.

𝐶
Flow coefficient = √︀
1 − 𝛽4

Parameters
D [float] Upstream internal pipe diameter, [m]
Do [float] Diameter of flow meter characteristic dimension at flow conditions, [m]
C [float] Coefficient of discharge of the flow meter, [-]
Returns
flow_coefficient [float] Differential pressure flow meter flow coefficient, [-]

Notes

This measure is used not just for orifices but for other differential pressure flow meters [2].
It is sometimes given the symbol K. It is also equal to the product of the diacharge coefficient and the velocity
of approach factor [2].

References

[1], [2]

Examples

>>> flow_coefficient(D=0.0739, Do=0.0222, C=0.6)


0.6024582044499308

fluids.flow_meter.flow_meter_discharge(D, Do, P1, P2, rho, C, expansibility=1.0)


Calculates the flow rate of an orifice plate based on the geometry of the plate, measured pressures of the orifice,
and the density of the fluid.
)︂ √
𝜋𝐷𝑜2
(︂
2∆𝑃 𝜌1
𝑚= 𝐶 √︀ ·𝜖
4 1 − 𝛽4

Parameters
D [float] Upstream internal pipe diameter, [m]

2.8. Orifice plates, flow nozzles, Venturi tubes, cone and wedge meters (fluids.flow_meter) 227
Fluids Documentation, Release 1.0.21

Do [float] Diameter of orifice at flow conditions, [m]


P1 [float] Static pressure of fluid upstream of orifice at the cross-section of the pressure tap, [Pa]
P2 [float] Static pressure of fluid downstream of orifice at the cross-section of the pressure tap,
[Pa]
rho [float] Density of fluid at P1, [kg/m^3]
C [float] Coefficient of discharge of the orifice, [-]
expansibility [float, optional] Expansibility factor (1 for incompressible fluids, less than 1 for
real fluids), [-]
Returns
m [float] Mass flow rate of fluid, [kg/s]

Notes

This is formula 1-12 in [1] and also [2].

References

[1], [2]

Examples

>>> flow_meter_discharge(D=0.0739, Do=0.0222, P1=1E5, P2=9.9E4, rho=1.1646,


... C=0.5988, expansibility=0.9975)
0.01120390943807026

fluids.flow_meter.all_meters = frozenset({'Hollingshead orifice', 'Hollingshead v cone',


'Hollingshead venturi sharp', 'Hollingshead venturi smooth', 'Hollingshead wedge', 'ISA
1932 nozzle', 'ISO 15377 conical orifice', 'ISO 15377 eccentric orifice', 'ISO 15377
quarter-circle orifice', 'ISO 5167 orifice', 'Miller conical orifice', 'Miller eccentric
orifice', 'Miller orifice', 'Miller quarter circle orifice', 'Miller segmental orifice',
'as cast convergent venturi tube', 'cone meter', 'conical orifice', 'eccentric orifice',
'long radius nozzle', 'machined convergent venturi tube', 'orifice', 'quarter circle
orifice', 'rough welded convergent venturi tube', 'segmental orifice', 'unspecified
meter', 'venuri nozzle', 'wedge meter'})
Set of string inputs representing all of the different supported flow meters and their correlations.

2.9 Friction factor and pipe roughness (fluids.friction)

This module contains correlations for single-phase friction factor in a range of geometries. It also contains several
tables of reported material roughnesses, and some basic functionality showing how to calculate single-phase pressure
drop.
For reporting bugs, adding feature requests, or submitting pull requests, please use the GitHub issue tracker or contact
the author at Caleb.Andrew.Bell@gmail.com.

228 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

• Friction Factor Interfaces


• Pipe Friction Factor Correlations
• Curved Pipe Friction Factor Correlations
• Other Geometry Friction Factor Correlations
• Experimental Friction Data
• Roughness
• Pressure Drop Calculation
• Utilities

2.9.1 Friction Factor Interfaces

fluids.friction.friction_factor(Re, eD=0.0, Method='Clamond', Darcy=True)


Calculates friction factor. Uses a specified method, or automatically picks one from the dictionary of available
methods. 29 approximations are available as well as the direct solution, described in the table below. The default
is to use the exact solution.
For Re < 2040, [1] the laminar solution is always returned, regardless of selected method.
Parameters
Re [float] Reynolds number, [-]
eD [float, optional] Relative roughness of the wall, [-]
Returns
f [float] Friction factor, [-]
Other Parameters
Method [string, optional] A string of the function name to use
Darcy [bool, optional] If False, will return fanning friction factor, 1/4 of the Darcy value
See also:

Colebrook
Clamond

Notes

A table of the supposed limits of each correlation is as follows. Note that the spaces in the method names are
placed by underscores in the actual function names and when provided as the Method argument. The default
method is likely to be sufficient.

2.9. Friction factor and pipe roughness (fluids.friction) 229


Fluids Documentation, Release 1.0.21

Nice name Re min Re max 𝜖/𝐷 Min 𝜖/𝐷 Max


Clamond 0 None 0 None
Rao Kumar 2007 None None None None
Eck 1973 None None None None
Jain 1976 5000 1.0E+7 4.0E-5 0.05
Avci Karagoz 2009 None None None None
Swamee Jain 1976 5000 1.0E+8 1.0E-6 0.05
Churchill 1977 None None None None
Brkic 2011 1 None None None None
Chen 1979 4000 4.0E+8 1.0E-7 0.05
Round 1980 4000 4.0E+8 0 0.05
Papaevangelo 2010 10000 1.0E+7 1.0E-5 0.001
Fang 2011 3000 1.0E+8 0 0.05
Shacham 1980 4000 4.0E+8 None None
Barr 1981 None None None None
Churchill 1973 None None None None
Moody 4000 1.0E+8 0 1
Zigrang Sylvester 1 4000 1.0E+8 4.0E-5 0.05
Zigrang Sylvester 2 4000 1.0E+8 4.0E-5 0.05
Buzzelli 2008 None None None None
Haaland 4000 1.0E+8 1.0E-6 0.05
Serghides 1 None None None None
Serghides 2 None None None None
Tsal 1989 4000 1.0E+8 0 0.05
Alshul 1952 None None None None
Wood 1966 4000 5.0E+7 1.0E-5 0.04
Manadilli 1997 5245 1.0E+8 0 0.05
Brkic 2011 2 None None None None
Romeo 2002 3000 1.5E+8 0 0.05
Sonnad Goudar 2006 4000 1.0E+8 1.0E-6 0.05

References

[1]

Examples

>>> friction_factor(Re=1E5, eD=1E-4)


0.01851386607747165
>>> friction_factor(Re=2.9E5, eD=1E-5, Method='Serghides_2')
0.0146199041093456

fluids.friction.friction_factor_methods(Re, eD=0.0, check_ranges=True)


Returns a list of correlation names for calculating friction factor for internal pipe flow.
Parameters
Re [float] Reynolds number, [-]
eD [float, optional] Relative roughness of the wall, [-]

230 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

check_ranges [bool, optional] Whether to filter the list for correlations which claim to be valid
for the given values, [-]
Returns
methods [list] List of methods which claim to be valid for the range of Re and eD given, [-]

Examples

>>> len(friction_factor_methods(Re=1E5, eD=1E-4))


30

fluids.friction.friction_factor_curved(Re, Di, Dc, roughness=0.0, Method=None,


Rec_method='Schmidt', laminar_method='Schmidt laminar',
turbulent_method='Schmidt turbulent', Darcy=True)
Calculates friction factor fluid flowing in a curved pipe or helical coil, supporting both laminar and turbulent
regimes. Selects the appropriate regime by default, and has default correlation choices. Optionally, a specific
correlation can be specified with the Method keyword.
The default correlations are those recommended in [1], and are believed to be the best publicly available.
Parameters
Re [float] Reynolds number with D=Di, [-]
Di [float] Inner diameter of the tube making up the coil, [m]
Dc [float] Diameter of the helix/coil measured from the center of the tube on one side to the
center of the tube on the other side, [m]
roughness [float, optional] Roughness of pipe wall [m]
Returns
f [float] Friction factor, [-]
Other Parameters
Method [string, optional] A string of the function name to use, overriding the default turbulent/
laminar selection.
Rec_method [str, optional] Critical Reynolds number transition criteria; one of [‘Seth Stahel’,
‘Ito’, ‘Kubair Kuloor’, ‘Kutateladze Borishanskii’, ‘Schmidt’, ‘Srinivasan’]; the default is
‘Schmidt’.
laminar_method [str, optional] Friction factor correlation for the laminar regime; one of
[‘White’, ‘Mori Nakayama laminar’, ‘Schmidt laminar’]; the default is ‘Schmidt laminar’.
turbulent_method [str, optional] Friction factor correlation for the turbulent regime; one of
[‘Guo’, ‘Ju’, ‘Schmidt turbulent’, ‘Prasad’, ‘Mandel Nigam’, ‘Mori Nakayama turbulent’,
‘Czop’]; the default is ‘Schmidt turbulent’.
Darcy [bool, optional] If False, will return fanning friction factor, 1/4 of the Darcy value
See also:

fluids.geometry.HelicalCoil
helical_turbulent_fd_Schmidt
helical_turbulent_fd_Srinivasan
helical_turbulent_fd_Mandal_Nigam

2.9. Friction factor and pipe roughness (fluids.friction) 231


Fluids Documentation, Release 1.0.21

helical_turbulent_fd_Ju
helical_turbulent_fd_Guo
helical_turbulent_fd_Czop
helical_turbulent_fd_Prasad
helical_turbulent_fd_Mori_Nakayama
helical_laminar_fd_Schmidt
helical_laminar_fd_Mori_Nakayama
helical_laminar_fd_White
helical_transition_Re_Schmidt
helical_transition_Re_Srinivasan
helical_transition_Re_Kutateladze_Borishanskii
helical_transition_Re_Kubair_Kuloor
helical_transition_Re_Ito
helical_transition_Re_Seth_Stahel

Notes

The range of accuracy of these correlations is much than that in a straight pipe.

References

[1]

Examples

>>> friction_factor_curved(Re=1E5, Di=0.02, Dc=0.5)


0.022961996738387523

fluids.friction.friction_factor_curved_methods(Re, Di, Dc, roughness=0.0, check_ranges=True)


Returns a list of correlation names for calculating friction factor of fluid flowing in a curved pipe or helical coil,
supporting both laminar and turbulent regimes.
Parameters
Re [float] Reynolds number with D=Di, [-]
Di [float] Inner diameter of the tube making up the coil, [m]
Dc [float] Diameter of the helix/coil measured from the center of the tube on one side to the
center of the tube on the other side, [m]
roughness [float, optional] Roughness of pipe wall [m]
check_ranges [bool, optional] Whether or not to return only correlations suitable for the pro-
vided data, [-]
Returns
methods [list] List of methods in the regime the specified Re is in at the given Di and Dc.

232 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

Examples

>>> friction_factor_curved_methods(Re=1E5, Di=0.02, Dc=0.5)[0]


'Schmidt turbulent'

fluids.friction.helical_Re_crit(Di, Dc, Method='Schmidt')


Calculates the transition Reynolds number for fluid flowing in a curved pipe or helical coil. Selects the appropriate
regime by default. Optionally, a specific correlation can be specified with the Method keyword.
The default correlations are those recommended in [1], and are believed to be the best publicly available.
Parameters
Di [float] Inner diameter of the tube making up the coil, [m]
Dc [float] Diameter of the helix/coil measured from the center of the tube on one side to the
center of the tube on the other side, [m]
Method [str, optional] Critical Reynolds number transition criteria correlation; one of [‘Seth
Stahel’, ‘Ito’, ‘Kubair Kuloor’, ‘Kutateladze Borishanskii’, ‘Schmidt’, ‘Srinivasan’]; the de-
fault is ‘Schmidt’.
Returns
Re_crit [float] Reynolds number for critical transition between laminar and turbulent flow, [-]
See also:

fluids.geometry.HelicalCoil
helical_transition_Re_Schmidt
helical_transition_Re_Srinivasan
helical_transition_Re_Kutateladze_Borishanskii
helical_transition_Re_Kubair_Kuloor
helical_transition_Re_Ito
helical_transition_Re_Seth_Stahel

References

[1]

Examples

>>> helical_Re_crit(Di=0.02, Dc=0.5)


6946.792538856203

2.9. Friction factor and pipe roughness (fluids.friction) 233


Fluids Documentation, Release 1.0.21

2.9.2 Pipe Friction Factor Correlations

fluids.friction.ft_Crane(D)
Calculates the Crane fully turbulent Darcy friction factor for flow in commercial pipe, as used in the Crane
formulas for loss coefficients in various fittings. Note that this is not generally applicable to loss due to friction
in pipes, as it does not take into account the roughness of various pipe materials. But for fittings in any type of
pipe, this is the friction factor to use in the Crane [1] method to get their loss coefficients.
Parameters
D [float] Pipe inner diameter, [m]
Returns
fd [float] Darcy Crane friction factor for fully turbulent flow, [-]

Notes

There is confusion and uncertainty regarding the friction factor table given in Crane TP 410M [1]. This function
does not help: it implements a new way to obtain Crane friction factors, so that it can better be based in theory
and give more precision (not accuracy) and trend better with diameters not tabulated in [1].
The data in [1] was digitized, and nominal pipe diameters were converted to actual pipe diameters. An ob-
jective function was sought which would produce the exact same values as in [1] when rounded to the same
decimal place. One was found fairly easily by using the standard Colebrook friction factor formula, and using
the diameter-dependent roughness values calculated with the roughness_Farshad method for bare Carbon steel.
A diameter-dependent Reynolds number was required to match the values; the 𝜌𝑉 /𝜇 term is set to 7.5E6.
The formula given in [1] is:
0.25
𝑓𝑇 = [︁ (︁ )︁]︁2
𝜖/𝐷
log10 3.7

However, this function does not match the rounded values in [1] well and it is not very clear which rough-
ness to use. Using both the value for new commercial steel (.05 mm) or a diameter-dependent value (rough-
ness_Farshad), values were found to be too high and too low respectively. That function is based in theory - the
limit of the Colebrook equation when Re goes to infinity - but in the end real pipe flow is not infinity, and so a
large error occurs from that use.
The following plot shows all these options, and that the method implemented here matches perfectly the rounded
values in [1].

References

[1]

234 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

Comparison of implementation options


Crane data
0.026 Cubic spline
Crane formula
0.024 Crane formula (rounded)
Colebrook
Darcy friction factor, [-]

0.022 Colebrook (rounded)


0.020
0.018
0.016
0.014
0.012
0.010
0.0 0.2 0.4 0.6 0.8
Pipe actual diameter, [m]

2.9. Friction factor and pipe roughness (fluids.friction) 235


Fluids Documentation, Release 1.0.21

Examples

>>> ft_Crane(.1)
0.01628845962146481

Explicitly spelling out the function (note the exact same answer is not returned; it is accurate to 5-8 decimals
however, for increased speed):

>>> Di = 0.1
>>> Colebrook(7.5E6*Di, eD=roughness_Farshad(ID='Carbon steel, bare', D=Di)/Di)
0.0162884254312

fluids.friction.Colebrook(Re, eD, tol=None)


Calculates Darcy friction factor using the Colebrook equation originally published in [1]. Normally, this function
uses an exact solution to the Colebrook equation, derived with a CAS. A numerical can also be used.
(︂ )︂
1 𝜖/𝐷 2.51
√ = −2 log10 + √
𝑓 3.7 Re 𝑓

Parameters
Re [float] Reynolds number, [-]
eD [float] Relative roughness, [-]
tol [float, optional] None for analytical solution (default); user specified value to use the nu-
merical solution; 0 to use mpmath and provide a bit-correct exact solution to the maximum
fidelity of the system’s float; -1 to apply the Clamond solution where appropriate for greater
speed (Re > 10), [-]
Returns
fd [float] Darcy friction factor [-]

Notes

The solution is as follows:


ln(10)2 · 3.72 · 2.512
𝑓𝑑 = (︂

[︂ √︁ ]︂)︂
ln(10)𝜖/𝐷 · Re − 2 · 2.51 · 3.7 · lambertW ln( 10) 10( 2.51·3.7𝐷 ) · Re2 /2.512
𝜖Re

Some effort to optimize this function has been made. The lambertw function from scipy is used, and is defined
to solve the specific function:

𝑦 = 𝑥 exp(𝑥)
lambertW(𝑦) = 𝑥

This is relatively slow despite its explicit form as it uses the mathematical function lambertw which is expensive
to compute.
For high relative roughness and Reynolds numbers, an OverflowError can be encountered in the solution of this
equation. The numerical solution is then used.
The numerical solution provides values which are generally within an rtol of 1E-12 to the analytical solution;
however, due to the different rounding order, it is possible for them to be as different as rtol 1E-5 or higher. The
1E-5 accuracy regime has been tested and confirmed numerically for hundreds of thousand of points within the
region 1E-12 < Re < 1E12 and 0 < eD < 0.1.

236 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

The numerical solution attempts the secant method using scipy’s newton solver, and in the event of nonconver-
gence, attempts the fsolve solver as well. An initial guess is provided via the Clamond function.
The numerical and analytical solution take similar amounts of time; the mpmath solution used when tol=0 is
approximately 45 times slower. This function takes approximately 8 us normally.

References

[1]

Examples

>>> Colebrook(1E5, 1E-4)


0.018513866077471

fluids.friction.Clamond(Re, eD, fast=False)


Calculates Darcy friction factor using a solution accurate to almost machine precision. Recommended very
strongly. For details of the algorithm, see [1].
Parameters
Re [float] Reynolds number, [-]
eD [float] Relative roughness, [-]
fast [bool, optional] If true, performs only one iteration, which gives roughly half the number
of decimals of accuracy, [-]
Returns
fd [float] Darcy friction factor [-]

Notes

This is a highly optimized function, 4 times faster than the solution using the LambertW function, and faster than
many other approximations which are much less accurate.
The code used here is only slightly modified than that in [1], for further performance improvements.
For 10 < Re < 1E12, and 0 < eD < 0.01, this equation has been confirmed numerically to provide a solution to the
Colebrook equation accurate to an rtol of 1E-9 or better - the same level of accuracy as the analytical solution to
the Colebrook equation due to floating point precision.
Comparing this to the numerical solution of the Colebrook equation, identical values are given accurate to an
rtol of 1E-9 for 10 < Re < 1E100, and 0 < eD < 1 and beyond.
However, for values of Re under 10, different answers from the Colebrook equation appear and then quickly a
ValueError is raised.

2.9. Friction factor and pipe roughness (fluids.friction) 237


Fluids Documentation, Release 1.0.21

References

[1]

Examples

>>> Clamond(1E5, 1E-4)


0.01851386607747165

fluids.friction.friction_laminar(Re)
Calculates Darcy friction factor for laminar flow, as shown in [1] or anywhere else.
64
𝑓𝑑 =
𝑅𝑒
Parameters
Re [float] Reynolds number, [-]
Returns
fd [float] Darcy friction factor [-]

Notes

For round pipes, this valid for 𝑅𝑒 ≈< 2040.


Results in [2] show that this theoretical solution calculates too low of friction factors from Re = 10 and up, with
an average deviation of 4%.

References

[1], [2]

Examples

>>> friction_laminar(128)
0.5

fluids.friction.Moody(Re, eD)
Calculates Darcy friction factor using the method in Moody (1947) as shown in [1] and originally in [2].
[︃ )︂1/3 ]︃
106
(︂
−3 4 𝜖
𝑓𝑓 = 1.375 × 10 1 + 2 × 10 +
𝐷 𝑅𝑒

Parameters
Re [float] Reynolds number, [-]
eD [float] Relative roughness, [-]
Returns
fd [float] Darcy friction factor [-]

238 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

Notes

Range is Re >= 4E3 and Re <= 1E8; eD >= 0 < 0.01.

References

[1], [2]

Examples

>>> Moody(1E5, 1E-4)


0.01809185666808665

fluids.friction.Blasius(Re)
Calculates Darcy friction factor according to the Blasius formulation, originally presented in [1] and described
more recently in [2].
0.3164
𝑓𝑑 =
𝑅𝑒0.25
Parameters
Re [float] Reynolds number, [-]
Returns
fd [float] Darcy friction factor [-]

Notes

Developed for 3000 < Re < 200000.

References

[1], [2]

Examples

>>> Blasius(10000)
0.03164

fluids.friction.von_Karman(eD)
Calculates Darcy friction factor for rough pipes at infinite Reynolds number from the von Karman equation (as
given in [1] and [2]:
(︂ )︂
1 𝜖/𝐷
√ = −2 log10
𝑓𝑑 3.7
Parameters
eD [float] Relative roughness, [-]
Returns
fd [float] Darcy friction factor [-]

2.9. Friction factor and pipe roughness (fluids.friction) 239


Fluids Documentation, Release 1.0.21

Notes

This case does not actually occur; Reynolds number is always finite. It is normally applied as a “limiting” value
when a pipe’s roughness is so high it has a friction factor curve effectively independent of Reynods number.

References

[1], [2]

Examples

>>> von_Karman(1E-4)
0.01197365149564789

fluids.friction.Prandtl_von_Karman_Nikuradse(Re)
Calculates Darcy friction factor for smooth pipes as a function of Reynolds number from the Prandtl-von Karman
Nikuradse equation as given in [1] and [2]:
(︂ )︂
1 2.51
√ = −2 log10 √
𝑓 𝑅𝑒 𝑓

Parameters
Re [float] Reynolds number, [-]
Returns
fd [float] Darcy friction factor [-]

Notes

This equation is often stated as follows; the correct constant is not 0.8, but 2log10(2.51) or approximately
0.7993474:
1 √︀
√ ≈ 2 log10 (Re 𝑓 ) − 0.8
𝑓
This function is calculable for all Reynolds numbers between 1E151 and 1E-151. It is solved with the LambertW
function from SciPy. The solution is:

log210
1
4
𝑓𝑑 = (︁ (︁ )︁)︁2
(10)𝑅𝑒
lambertW 2(2.51)

References

[1], [2]

240 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

Examples

>>> Prandtl_von_Karman_Nikuradse(1E7)
0.008102669430

fluids.friction.Alshul_1952(Re, eD)
Calculates Darcy friction factor using the method in Alshul (1952) as shown in [1].
(︂ )︂0.25
68 𝜖
𝑓𝑑 = 0.11 +
𝑅𝑒 𝐷

Parameters
Re [float] Reynolds number, [-]
eD [float] Relative roughness, [-]
Returns
fd [float] Darcy friction factor [-]

Notes

No range of validity specified for this equation.

References

[1]

Examples

>>> Alshul_1952(1E5, 1E-4)


0.018382997825686878

fluids.friction.Wood_1966(Re, eD)
Calculates Darcy friction factor using the method in Wood (1966) [2] as shown in [1].
𝜖 0.225 𝜖 𝜖
𝑓𝑑 = 0.094( ) + 0.53( ) + 88( )0.4 𝑅𝑒−𝐴1
𝐷 𝐷 𝐷
𝜖 0.134
𝐴1 = 1.62( )
𝐷
Parameters
Re [float] Reynolds number, [-]
eD [float] Relative roughness, [-]
Returns
fd [float] Darcy friction factor [-]

2.9. Friction factor and pipe roughness (fluids.friction) 241


Fluids Documentation, Release 1.0.21

Notes

Range is 4E3 <= Re <= 5E7; 1E-5 <= eD <= 4E-2.

References

[1], [2]

Examples

>>> Wood_1966(1E5, 1E-4)


0.021587570560090762

fluids.friction.Churchill_1973(Re, eD)
Calculates Darcy friction factor using the method in Churchill (1973) [2] as shown in [1]
[︂ ]︂
1 𝜖 7
√ = −2 log10 + ( )0.9
𝑓𝑑 3.7𝐷 𝑅𝑒
Parameters
Re [float] Reynolds number, [-]
eD [float] Relative roughness, [-]
Returns
fd [float] Darcy friction factor [-]

Notes

No range of validity specified for this equation.

References

[1], [2]

Examples

>>> Churchill_1973(1E5, 1E-4)


0.01846708694482294

fluids.friction.Eck_1973(Re, eD)
Calculates Darcy friction factor using the method in Eck (1973) [2] as shown in [1].
[︂ ]︂
1 𝜖 15
√ = −2 log10 +
𝑓𝑑 3.715𝐷 𝑅𝑒
Parameters
Re [float] Reynolds number, [-]
eD [float] Relative roughness, [-]
Returns
fd [float] Darcy friction factor [-]

242 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

Notes

No range of validity specified for this equation.

References

[1], [2]

Examples

>>> Eck_1973(1E5, 1E-4)


0.01775666973488564

fluids.friction.Jain_1976(Re, eD)
Calculates Darcy friction factor using the method in Jain (1976) [2] as shown in [1].
[︃ (︂ )︂0.9 ]︃
1 𝜖 29.843
√︀ = 2.28 − 4 log10 +
𝑓𝑓 𝐷 𝑅𝑒

Parameters
Re [float] Reynolds number, [-]
eD [float] Relative roughness, [-]
Returns
fd [float] Darcy friction factor [-]

Notes

Range is 5E3 <= Re <= 1E7; 4E-5 <= eD <= 5E-2.

References

[1], [2]

Examples

>>> Jain_1976(1E5, 1E-4)


0.018436560312693327

fluids.friction.Swamee_Jain_1976(Re, eD)
Calculates Darcy friction factor using the method in Swamee and Jain (1976) [2] as shown in [1].
[︃(︂ )︂0.9 ]︃
1 6.97 𝜖
√︀ = −4 log10 +( )
𝑓𝑓 𝑅𝑒 3.7𝐷

Parameters
Re [float] Reynolds number, [-]
eD [float] Relative roughness, [-]

2.9. Friction factor and pipe roughness (fluids.friction) 243


Fluids Documentation, Release 1.0.21

Returns
fd [float] Darcy friction factor [-]

Notes

Range is 5E3 <= Re <= 1E8; 1E-6 <= eD <= 5E-2.

References

[1], [2]

Examples

>>> Swamee_Jain_1976(1E5, 1E-4)


0.018452424431901808

fluids.friction.Churchill_1977(Re, eD)
Calculates Darcy friction factor using the method in Churchill and (1977) [2] as shown in [1].
[︂ ]︂1/12
8
𝑓𝑓 = 2 ( )12 + (𝐴2 + 𝐴3 )−1.5
𝑅𝑒
{︂ [︂ ]︂}︂16
7 𝜖
𝐴2 = 2.457 ln ( )0.9 + 0.27
𝑅𝑒 𝐷
(︂ )︂16
37530
𝐴3 =
𝑅𝑒
Parameters
Re [float] Reynolds number, [-]
eD [float] Relative roughness, [-]
Returns
fd [float] Darcy friction factor [-]

Notes

No range of validity specified for this equation.

References

[1], [2]

244 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

Examples

>>> Churchill_1977(1E5, 1E-4)


0.018462624566280075

fluids.friction.Chen_1979(Re, eD)
Calculates Darcy friction factor using the method in Chen (1979) [2] as shown in [1].
[︂ ]︂
1 𝜖 5.0452
√︀ = −4 log10 − log10 𝐴4
𝑓𝑓 3.7065𝐷 𝑅𝑒
)︂0.8981
(𝜖/𝐷)1.1098
(︂
7.149
𝐴4 = +
2.8257 𝑅𝑒
Parameters
Re [float] Reynolds number, [-]
eD [float] Relative roughness, [-]
Returns
fd [float] Darcy friction factor [-]

Notes

Range is 4E3 <= Re <= 4E8; 1E-7 <= eD <= 5E-2.

References

[1], [2]

Examples

>>> Chen_1979(1E5, 1E-4)


0.018552817507472126

fluids.friction.Round_1980(Re, eD)
Calculates Darcy friction factor using the method in Round (1980) [2] as shown in [1].
[︂ ]︂
1 𝑅𝑒
√︀ = −3.6 log10
𝑓𝑓 0.135𝑅𝑒 𝐷𝜖 + 6.5

Parameters
Re [float] Reynolds number, [-]
eD [float] Relative roughness, [-]
Returns
fd [float] Darcy friction factor [-]

2.9. Friction factor and pipe roughness (fluids.friction) 245


Fluids Documentation, Release 1.0.21

Notes

Range is 4E3 <= Re <= 4E8; 0 <= eD <= 5E-2.

References

[1], [2]

Examples

>>> Round_1980(1E5, 1E-4)


0.01831475391244354

fluids.friction.Shacham_1980(Re, eD)
Calculates Darcy friction factor using the method in Shacham (1980) [2] as shown in [1].
[︂ (︂ )︂]︂
1 𝜖 5.02 𝜖 14.5
√︀ = −4 log10 − log10 +
𝑓𝑓 3.7𝐷 𝑅𝑒 3.7𝐷 𝑅𝑒

Parameters
Re [float] Reynolds number, [-]
eD [float] Relative roughness, [-]
Returns
fd [float] Darcy friction factor [-]

Notes

Range is 4E3 <= Re <= 4E8

References

[1], [2]

Examples

>>> Shacham_1980(1E5, 1E-4)


0.01860641215097828

fluids.friction.Barr_1981(Re, eD)
Calculates Darcy friction factor using the method in Barr (1981) [2] as shown in [1].
⎧ ⎫
1 ⎨ 𝜖 4.518 log10 ( 𝑅𝑒
7 ) ⎬
√ = −2 log10 + [︁ ]︁
𝑓𝑑 ⎩ 3.7𝐷 𝑅𝑒 1 + 𝑅𝑒0.52 (︀ 𝜖 )︀0.7 ⎭
29 𝐷

Parameters
Re [float] Reynolds number, [-]
eD [float] Relative roughness, [-]

246 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

Returns
fd [float] Darcy friction factor [-]

Notes

No range of validity specified for this equation.

References

[1], [2]

Examples

>>> Barr_1981(1E5, 1E-4)


0.01849836032779929

fluids.friction.Zigrang_Sylvester_1(Re, eD)

Calculates Darcy friction factor using the method in Zigrang and Sylvester (1982) [2] as shown in [1].
[︂ ]︂
1 𝜖 5.02
√︀ = −4 log10 − log10 𝐴5
𝑓𝑓 3.7𝐷 𝑅𝑒
𝜖 13
𝐴5 = +
3.7𝐷 𝑅𝑒
Parameters
Re [float] Reynolds number, [-]
eD [float] Relative roughness, [-]
Returns
fd [float] Darcy friction factor [-]

Notes

Range is 4E3 <= Re <= 1E8; 4E-5 <= eD <= 5E-2.

References

[1], [2]

2.9. Friction factor and pipe roughness (fluids.friction) 247


Fluids Documentation, Release 1.0.21

Examples

>>> Zigrang_Sylvester_1(1E5, 1E-4)


0.018646892425980794

fluids.friction.Zigrang_Sylvester_2(Re, eD)

Calculates Darcy friction factor using the second method in Zigrang and Sylvester (1982) [2] as shown in
[1].
[︂ ]︂
1 𝜖 5.02
√︀ = −4 log10 − log10 𝐴6
𝑓𝑓 3.7𝐷 𝑅𝑒
𝜖 5.02
𝐴6 = − log10 𝐴5
3.7𝐷 𝑅𝑒
𝜖 13
𝐴5 = +
3.7𝐷 𝑅𝑒
Parameters
Re [float] Reynolds number, [-]
eD [float] Relative roughness, [-]
Returns
fd [float] Darcy friction factor [-]

Notes

Range is 4E3 <= Re <= 1E8; 4E-5 <= eD <= 5E-2

References

[1], [2]

Examples

>>> Zigrang_Sylvester_2(1E5, 1E-4)


0.01850021312358548

fluids.friction.Haaland(Re, eD)

Calculates Darcy friction factor using the method in Haaland (1983) [2] as shown in [1].
(︃ [︃(︂ )︂1.11 ]︃)︃−2
𝜖/𝐷 6.9
𝑓𝑓 = −1.8 log10 +
3.7 𝑅𝑒
Parameters
Re [float] Reynolds number, [-]
eD [float] Relative roughness, [-]
Returns
fd [float] Darcy friction factor [-]

248 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

Notes

Range is 4E3 <= Re <= 1E8; 1E-6 <= eD <= 5E-2

References

[1], [2]

Examples

>>> Haaland(1E5, 1E-4)


0.018265053014793857

fluids.friction.Serghides_1(Re, eD)
Calculates Darcy friction factor using the method in Serghides (1984) [2] as shown in [1].
]︂−2
(𝐵 − 𝐴)2
[︂
𝑓 = 𝐴−
𝐶 − 2𝐵 + 𝐴
[︂ ]︂
𝜖/𝐷 12
𝐴 = −2 log10 +
3.7 𝑅𝑒
[︂ ]︂
𝜖/𝐷 2.51𝐴
𝐵 = −2 log10 +
3.7 𝑅𝑒
[︂ ]︂
𝜖/𝐷 2.51𝐵
𝐶 = −2 log10 +
3.7 𝑅𝑒
Parameters
Re [float] Reynolds number, [-]
eD [float] Relative roughness, [-]
Returns
fd [float] Darcy friction factor [-]

Notes

No range of validity specified for this equation.

References

[1], [2]

2.9. Friction factor and pipe roughness (fluids.friction) 249


Fluids Documentation, Release 1.0.21

Examples

>>> Serghides_1(1E5, 1E-4)


0.01851358983180063

fluids.friction.Serghides_2(Re, eD)
Calculates Darcy friction factor using the method in Serghides (1984) [2] as shown in [1].
]︂−2
(𝐴 − 4.781)2
[︂
𝑓𝑑 = 4.781 −
𝐵 − 2𝐴 + 4.781
[︂ ]︂
𝜖/𝐷 12
𝐴 = −2 log10 +
3.7 𝑅𝑒
[︂ ]︂
𝜖/𝐷 2.51𝐴
𝐵 = −2 log10 +
3.7 𝑅𝑒
Parameters
Re [float] Reynolds number, [-]
eD [float] Relative roughness, [-]
Returns
fd [float] Darcy friction factor [-]

Notes

No range of validity specified for this equation.

References

[1], [2]

Examples

>>> Serghides_2(1E5, 1E-4)


0.018486377560664482

fluids.friction.Tsal_1989(Re, eD)
Calculates Darcy friction factor using the method in Tsal (1989) [2] as shown in [1].
68 𝜖
𝐴 = 0.11( + )0.25
𝑅𝑒 𝐷
if 𝐴 >= 0.018 then fd = A;
if 𝐴 < 0.018 then 𝑓 𝑑 = 0.0028 + 0.85𝐴.
Parameters
Re [float] Reynolds number, [-]
eD [float] Relative roughness, [-]
Returns
fd [float] Darcy friction factor [-]

250 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

Notes

Range is 4E3 <= Re <= 1E8; 0 <= eD <= 5E-2

References

[1], [2]

Examples

>>> Tsal_1989(1E5, 1E-4)


0.018382997825686878

fluids.friction.Manadilli_1997(Re, eD)
Calculates Darcy friction factor using the method in Manadilli (1997) [2] as shown in [1].
[︂ ]︂
1 𝜖 95 96.82
√ = −2 log10 + −
𝑓𝑑 3.7𝐷 𝑅𝑒0.983 𝑅𝑒

Parameters
Re [float] Reynolds number, [-]
eD [float] Relative roughness, [-]
Returns
fd [float] Darcy friction factor [-]

Notes

Range is 5.245E3 <= Re <= 1E8; 0 <= eD <= 5E-2

References

[1], [2]

Examples

>>> Manadilli_1997(1E5, 1E-4)


0.01856964649724108

fluids.friction.Romeo_2002(Re, eD)
Calculates Darcy friction factor using the method in Romeo (2002) [2] as shown in [1].
{︃ [︃ (︃ (︂ )︂0.9345 )︃]︃}︃
1 𝜖 5.0272 𝜖 4.567 𝜖 0.9924 5.3326
√ = −2 log10 × × log10 − × log10 +
𝑓𝑑 3.7065𝐷 𝑅𝑒 3.827𝐷 𝑅𝑒 7.7918𝐷 208.815 + 𝑅𝑒

Parameters
Re [float] Reynolds number, [-]
eD [float] Relative roughness, [-]

2.9. Friction factor and pipe roughness (fluids.friction) 251


Fluids Documentation, Release 1.0.21

Returns
fd [float] Darcy friction factor [-]

Notes

Range is 3E3 <= Re <= 1.5E8; 0 <= eD <= 5E-2

References

[1], [2]

Examples

>>> Romeo_2002(1E5, 1E-4)


0.018530291219676177

fluids.friction.Sonnad_Goudar_2006(Re, eD)
Calculates Darcy friction factor using the method in Sonnad and Goudar (2006) [2] as shown in [1].
(︂ )︂
1 0.4587𝑅𝑒
√ = 0.8686 ln
𝑓𝑑 𝑆 𝑆/(𝑆+1)
𝜖
𝑆 = 0.1240 × × 𝑅𝑒 + ln(0.4587𝑅𝑒)
𝐷
Parameters
Re [float] Reynolds number, [-]
eD [float] Relative roughness, [-]
Returns
fd [float] Darcy friction factor [-]

Notes

Range is 4E3 <= Re <= 1E8; 1E-6 <= eD <= 5E-2

References

[1], [2]

Examples

>>> Sonnad_Goudar_2006(1E5, 1E-4)


0.0185971269898162

252 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

fluids.friction.Rao_Kumar_2007(Re, eD)
Calculates Darcy friction factor using the method in Rao and Kumar (2007) [2] as shown in [1].
(︃ )︃
1 (2 𝐷𝜖 )−1
√ = 2 log10 (︀ 0.444+0.135𝑅𝑒 )︀
𝑓𝑑 𝑅𝑒 𝛽
[︂ ]︂2
𝑅𝑒
𝛽 = 1 − 0.55 exp(−0.33 ln )
6.5
Parameters
Re [float] Reynolds number, [-]
eD [float] Relative roughness, [-]
Returns
fd [float] Darcy friction factor [-]

Notes

No range of validity specified for this equation. This equation is fit to original experimental friction factor data.
Accordingly, this equation should not be used unless appropriate consideration is given.

References

[1], [2]

Examples

>>> Rao_Kumar_2007(1E5, 1E-4)


0.01197759334600925

fluids.friction.Buzzelli_2008(Re, eD)
Calculates Darcy friction factor using the method in Buzzelli (2008) [2] as shown in [1].
[︃ ]︃
1 𝐵1 + 2 log10 ( 𝐵
𝑅𝑒 )
2

√ = 𝐵1 −
𝑓𝑑 1 + 2.18
𝐵2

0.774 ln(𝑅𝑒) − 1.41


𝐵1 =
1 + 1.32 𝐷𝜖
√︀

𝜖
𝐵2 = 𝑅𝑒 + 2.51 × 𝐵1
3.7𝐷
Parameters
Re [float] Reynolds number, [-]
eD [float] Relative roughness, [-]
Returns
fd [float] Darcy friction factor [-]

2.9. Friction factor and pipe roughness (fluids.friction) 253


Fluids Documentation, Release 1.0.21

Notes

No range of validity specified for this equation.

References

[1], [2]

Examples

>>> Buzzelli_2008(1E5, 1E-4)


0.018513948401365277

fluids.friction.Avci_Karagoz_2009(Re, eD)
Calculates Darcy friction factor using the method in Avci and Karagoz (2009) [2] as shown in [1].
6.4
𝑓𝐷 = {︀ )︀]︀}︀2.4
ln(𝑅𝑒) − ln 1 + 0.01𝑅𝑒 𝐷𝜖 1 + 10( 𝐷𝜖 )0.5
[︀ (︀

Parameters
Re [float] Reynolds number, [-]
eD [float] Relative roughness, [-]
Returns
fd [float] Darcy friction factor [-]

Notes

No range of validity specified for this equation.

References

[1], [2]

Examples

>>> Avci_Karagoz_2009(1E5, 1E-4)


0.01857058061066499

fluids.friction.Papaevangelo_2010(Re, eD)
Calculates Darcy friction factor using the method in Papaevangelo (2010) [2] as shown in [1].

0.2479 − 0.0000947(7 − ln 𝑅𝑒)4


𝑓𝐷 = (︀ 𝜖 )︀]︀2
+ 𝑅𝑒7.366
[︀
log10 3.615𝐷 0.9142

Parameters
Re [float] Reynolds number, [-]
eD [float] Relative roughness, [-]

254 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

Returns
fd [float] Darcy friction factor [-]

Notes

Range is 1E4 <= Re <= 1E7; 1E-5 <= eD <= 1E-3

References

[1], [2]

Examples

>>> Papaevangelo_2010(1E5, 1E-4)


0.015685600818488177

fluids.friction.Brkic_2011_1(Re, eD)
Calculates Darcy friction factor using the method in Brkic (2011) [2] as shown in [1].
𝜖
𝑓𝑑 = [−2 log10 (10−0.4343𝛽 + )]−2
3.71𝐷
𝑅𝑒
𝛽 = ln (︁ )︁
1.1𝑅𝑒
1.816 ln ln(1+1.1𝑅𝑒)

Parameters
Re [float] Reynolds number, [-]
eD [float] Relative roughness, [-]
Returns
fd [float] Darcy friction factor [-]

Notes

No range of validity specified for this equation.

References

[1], [2]

Examples

>>> Brkic_2011_1(1E5, 1E-4)


0.01812455874141297

2.9. Friction factor and pipe roughness (fluids.friction) 255


Fluids Documentation, Release 1.0.21

fluids.friction.Brkic_2011_2(Re, eD)
Calculates Darcy friction factor using the method in Brkic (2011) [2] as shown in [1].

2.18𝛽 𝜖
𝑓𝑑 = [−2 log10 ( + )]−2
𝑅𝑒 3.71𝐷
𝑅𝑒
𝛽 = ln (︁ )︁
1.1𝑅𝑒
1.816 ln ln(1+1.1𝑅𝑒)

Parameters
Re [float] Reynolds number, [-]
eD [float] Relative roughness, [-]
Returns
fd [float] Darcy friction factor [-]

Notes

No range of validity specified for this equation.

References

[1], [2]

Examples

>>> Brkic_2011_2(1E5, 1E-4)


0.018619745410688716

fluids.friction.Fang_2011(Re, eD)
Calculates Darcy friction factor using the method in Fang (2011) [2] as shown in [1].
{︂
[︂ ]︂}︂−2
𝜖 1.1007 60.525 56.291
𝑓𝐷 = 1.613 ln 0.234 − +
𝐷 𝑅𝑒1.1105 𝑅𝑒1.0712

Parameters
Re [float] Reynolds number, [-]
eD [float] Relative roughness, [-]
Returns
fd [float] Darcy friction factor [-]

256 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

Notes

Range is 3E3 <= Re <= 1E8; 0 <= eD <= 5E-2

References

[1], [2]

Examples

>>> Fang_2011(1E5, 1E-4)


0.018481390682985432

fluids.friction.LAMINAR_TRANSITION_PIPE = 2040.0
Believed to be the most accurate result to date. Accurate to +/- 10. Avila, Kerstin, David Moxey, Alberto de
Lozar, Marc Avila, Dwight Barkley, and Björn Hof. “The Onset of Turbulence in Pipe Flow.” Science 333, no.
6039 (July 8, 2011): 192-196. doi:10.1126/science.1203223.

2.9.3 Curved Pipe Friction Factor Correlations

fluids.friction.helical_laminar_fd_White(Re, Di, Dc)


Calculates Darcy friction factor for a fluid flowing inside a curved pipe such as a helical coil under laminar
conditions, using the method of White [1] as shown in [2].
⎡ (︃ 1 ⎤−1
(︂ )︂0.45 )︃ 0.45
11.6
𝑓𝑐𝑢𝑟𝑣𝑒𝑑 = 𝑓straight,laminar ⎣1 − 1− ⎦
𝐷𝑒

Parameters
Re [float] Reynolds number with D=Di, [-]
Di [float] Inner diameter of the coil, [m]
Dc [float] Diameter of the helix/coil measured from the center of the tube on one side to the
center of the tube on the other side, [m]
Returns
fd [float] Darcy friction factor for a curved pipe [-]

Notes

The range of validity of this equation is 11.6 < 𝐷𝑒 < 2000, 3.878 × 10−4 < 𝐷𝑖 /𝐷𝑐 < 0.066.
The form of the equation means it yields nonsense results for De < 11.6; at De < 11.6, the equation is modified
to return the straight pipe value.
This model is recommended in [3], with a slight modification for Dean numbers larger than 2000.

2.9. Friction factor and pipe roughness (fluids.friction) 257


Fluids Documentation, Release 1.0.21

References

[1], [2], [3]

Examples

>>> helical_laminar_fd_White(250, .02, .1)


0.4063281817830202

fluids.friction.helical_laminar_fd_Mori_Nakayama(Re, Di, Dc)


Calculates Darcy friction factor for a fluid flowing inside a curved pipe such as a helical coil under laminar
conditions, using the method of Mori and Nakayama [1] as shown in [2] and [3].
(︃ √ )︃
0.108 𝐷𝑒
𝑓𝑐𝑢𝑟𝑣𝑒𝑑 = 𝑓straight,laminar
1 − 3.253𝐷𝑒−0.5

Parameters
Re [float] Reynolds number with D=Di, [-]
Di [float] Inner diameter of the coil, [m]
Dc [float] Diameter of the helix/coil measured from the center of the tube on one side to the
center of the tube on the other side, [m]
Returns
fd [float] Darcy friction factor for a curved pipe [-]

Notes

The range of validity of this equation is 100 < 𝐷𝑒 < 2000.


The form of the equation means it yields nonsense results for De < 42.328; under that, the equation is modified
to return the value at De=42.328, which is a multiplier of 1.405296 on the straight pipe friction factor.

References

[1], [2], [3]

Examples

>>> helical_laminar_fd_Mori_Nakayama(250, .02, .1)


0.42224582857795434

fluids.friction.helical_laminar_fd_Schmidt(Re, Di, Dc)


Calculates Darcy friction factor for a fluid flowing inside a curved pipe such as a helical coil under laminar
conditions, using the method of Schmidt [1] as shown in [2] and [3].
[︃ (︂ )︂0.97 [︁ ]︃
0.312
𝐷𝑖
]︁
𝐷
1−0.644( 𝐷𝑐𝑖 )
𝑓𝑐𝑢𝑟𝑣𝑒𝑑 = 𝑓straight,laminar 1 + 0.14 𝑅𝑒
𝐷𝑐

Parameters

258 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

Re [float] Reynolds number with D=Di, [-]


Di [float] Inner diameter of the coil, [m]
Dc [float] Diameter of the helix/coil measured from the center of the tube on one side to the
center of the tube on the other side, [m]
Returns
fd [float] Darcy friction factor for a curved pipe [-]

Notes

The range of validity of this equation is specified only for Re, 100 < 𝑅𝑒 < 𝑅𝑒𝑐𝑟𝑖𝑡𝑖𝑐𝑎𝑙 .
The form of the equation is such that as the curvature becomes negligible, straight tube result is obtained.

References

[1], [2], [3]

Examples

>>> helical_laminar_fd_Schmidt(250, .02, .1)


0.47460725672835236

fluids.friction.helical_turbulent_fd_Schmidt(Re, Di, Dc, roughness=0)


Calculates Darcy friction factor for a fluid flowing inside a curved pipe such as a helical coil under turbulent
conditions, using the method of Schmidt [1], also shown in [2].
For 𝑅𝑒𝑐𝑟𝑖𝑡 < 𝑅𝑒 < 2.2 × 104 :
[︃ )︂0.62 ]︃
2.88 × 104
(︂
𝐷𝑖
𝑓𝑐𝑢𝑟𝑣 = 𝑓str,turb 1+
𝑅𝑒 𝐷𝑐

For 2.2 × 104 < 𝑅𝑒 < 1.5 × 105 :


[︃ (︂ )︂ (︂ )︂0.53 ]︃
𝐷𝑖 𝐷𝑖
𝑓𝑐𝑢𝑟𝑣 = 𝑓str,turb 1 + 0.0823 1 + 𝑅𝑒0.25
𝐷𝑐 𝐷𝑐

Parameters
Re [float] Reynolds number with D=Di, [-]
Di [float] Inner diameter of the coil, [m]
Dc [float] Diameter of the helix/coil measured from the center of the tube on one side to the
center of the tube on the other side, [m]
roughness [float, optional] Roughness of pipe wall [m]
Returns
fd [float] Darcy friction factor for a curved pipe [-]

2.9. Friction factor and pipe roughness (fluids.friction) 259


Fluids Documentation, Release 1.0.21

Notes

Valid from the transition to turbulent flow up to 𝑅𝑒 = 1.5 × 105 . At very low curvatures, converges on the
straight pipe result.

References

[1], [2]

Examples

>>> helical_turbulent_fd_Schmidt(1E4, 0.01, .02)


0.08875550767040916

fluids.friction.helical_turbulent_fd_Mori_Nakayama(Re, Di, Dc)


Calculates Darcy friction factor for a fluid flowing inside a curved pipe such as a helical coil under turbulent
conditions, using the method of Mori and Nakayama [1], also shown in [2] and [3].
⎡ [︃ (︂ )︂ ]︃−0.2 ⎤
(︂ )︂0.5 [︃ (︂ )︂2 ]︃−0.2 2
𝐷𝑖 𝐷𝑖 ⎣1 + 0.112 𝑅𝑒 𝐷𝑖
𝑓𝑐𝑢𝑟𝑣 = 0.3 𝑅𝑒 ⎦
𝐷𝑐 𝐷𝑐 𝐷𝑐

Parameters
Re [float] Reynolds number with D=Di, [-]
Di [float] Inner diameter of the coil, [m]
Dc [float] Diameter of the helix/coil measured from the center of the tube on one side to the
center of the tube on the other side, [m]
Returns
fd [float] Darcy friction factor for a curved pipe [-]

Notes

Valid from the transition to turbulent flow up to 𝑅𝑒 = 6.5×105 𝐷𝑖 /𝐷𝑐 . Does not use a straight pipe correlation,
√︀

and so will not converge on the straight pipe result at very low curvature.

References

[1], [2], [3]

Examples

>>> helical_turbulent_fd_Mori_Nakayama(1E4, 0.01, .2)


0.037311802071379796

260 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

fluids.friction.helical_turbulent_fd_Prasad(Re, Di, Dc, roughness=0)


Calculates Darcy friction factor for a fluid flowing inside a curved pipe such as a helical coil under turbulent
conditions, using the method of Prasad [1], also shown in [2].
⎡ [︃ (︂ )︂ ]︃0.25 ⎤
2
𝐷𝑖
𝑓𝑐𝑢𝑟𝑣 = 𝑓str,turb ⎣1 + 0.18 𝑅𝑒 ⎦
𝐷𝑐

Parameters
Re [float] Reynolds number with D=Di, [-]
Di [float] Inner diameter of the coil, [m]
Dc [float] Diameter of the helix/coil measured from the center of the tube on one side to the
center of the tube on the other side, [m]
roughness [float, optional] Roughness of pipe wall [m]
Returns
fd [float] Darcy friction factor for a curved pipe [-]

Notes

No range of validity was specified, but the experiments used were with coil/tube diameter ratios of 17.24 and
34.9, hot water in the tube, and 1780 < 𝑅𝑒 < 59500. At very low curvatures, converges on the straight pipe
result.

References

[1], [2]

Examples

>>> helical_turbulent_fd_Prasad(1E4, 0.01, .2)


0.043313098093994626

fluids.friction.helical_turbulent_fd_Czop(Re, Di, Dc)


Calculates Darcy friction factor for a fluid flowing inside a curved pipe such as a helical coil under turbulent
conditions, using the method of Czop [1], also shown in [2].

𝑓𝑐𝑢𝑟𝑣 = 0.096𝐷𝑒−0.1517

Parameters
Re [float] Reynolds number with D=Di, [-]
Di [float] Inner diameter of the coil, [m]
Dc [float] Diameter of the helix/coil measured from the center of the tube on one side to the
center of the tube on the other side, [m]
Returns
fd [float] Darcy friction factor for a curved pipe [-]

2.9. Friction factor and pipe roughness (fluids.friction) 261


Fluids Documentation, Release 1.0.21

Notes

Valid for 2 × 104 < 𝑅𝑒 < 1.5 × 105 . Does not use a straight pipe correlation, and so will not converge on the
straight pipe result at very low curvature.

References

[1], [2]

Examples

>>> helical_turbulent_fd_Czop(1E4, 0.01, .2)


0.02979575250574106

fluids.friction.helical_turbulent_fd_Guo(Re, Di, Dc)


Calculates Darcy friction factor for a fluid flowing inside a curved pipe such as a helical coil under turbulent
conditions, using the method of Guo [1], also shown in [2].
(︂ )︂0.51
𝐷𝑖
𝑓𝑐𝑢𝑟𝑣 = 0.638𝑅𝑒−0.15
𝐷𝑐
Parameters
Re [float] Reynolds number with D=Di, [-]
Di [float] Inner diameter of the coil, [m]
Dc [float] Diameter of the helix/coil measured from the center of the tube on one side to the
center of the tube on the other side, [m]
Returns
fd [float] Darcy friction factor for a curved pipe [-]

Notes

Valid for 2 × 104 < 𝑅𝑒 < 1.5 × 105 . Does not use a straight pipe correlation, and so will not converge on the
straight pipe result at very low curvature.

References

[1], [2]

Examples

>>> helical_turbulent_fd_Guo(2E5, 0.01, .2)


0.022189161013253147

fluids.friction.helical_turbulent_fd_Ju(Re, Di, Dc, roughness=0.0)


Calculates Darcy friction factor for a fluid flowing inside a curved pipe such as a helical coil under turbulent
conditions, using the method of Ju et al. [1], also shown in [2].
[︃ (︂ )︂0.14 ]︃
𝐷𝑖
𝑓𝑐𝑢𝑟𝑣 = 𝑓str,turb 1 + 0.11𝑅𝑒0.23
𝐷𝑐

262 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

Parameters
Re [float] Reynolds number with D=Di, [-]
Di [float] Inner diameter of the coil, [m]
Dc [float] Diameter of the helix/coil measured from the center of the tube on one side to the
center of the tube on the other side, [m]
roughness [float, optional] Roughness of pipe wall [m]
Returns
fd [float] Darcy friction factor for a curved pipe [-]

Notes

Claimed to be valid for all turbulent conditions with 𝐷𝑒 > 11.6. At very low curvatures, converges on the
straight pipe result.

References

[1], [2]

Examples

>>> helical_turbulent_fd_Ju(1E4, 0.01, .2)


0.04945959480770937

fluids.friction.helical_turbulent_fd_Srinivasan(Re, Di, Dc)


Calculates Darcy friction factor for a fluid flowing inside a curved pipe such as a helical coil under turbulent
conditions, using the method of Srinivasan [1], as shown in [2] and [3].
0.336
𝑓𝑑 = [︁ √︁ ]︁0.2
𝐷𝑖
𝑅𝑒 𝐷 𝑐

Parameters
Re [float] Reynolds number with D=Di, [-]
Di [float] Inner diameter of the coil, [m]
Dc [float] Diameter of the helix/coil measured from the center of the tube on one side to the
center of the tube on the other side, [m]
Returns
fd [float] Darcy friction factor for a curved pipe [-]

2.9. Friction factor and pipe roughness (fluids.friction) 263


Fluids Documentation, Release 1.0.21

Notes

Valid for 0.01 < Di/Dc < 0.15, with no Reynolds number criteria given in [2] or [3].
[2] recommends this method, using the transition criteria of Srinivasan as well. [3] recommends using either this
method or the Ito method. This method did not make it into the popular review articles on curved flow.

References

[1], [2], [3]

Examples

>>> helical_turbulent_fd_Srinivasan(1E4, 0.01, .02)


0.0570745212117107

fluids.friction.helical_turbulent_fd_Mandal_Nigam(Re, Di, Dc, roughness=0)


Calculates Darcy friction factor for a fluid flowing inside a curved pipe such as a helical coil under turbulent
conditions, using the method of Mandal and Nigam [1], also shown in [2].

𝑓𝑐𝑢𝑟𝑣 = 𝑓str,turb [1 + 0.03𝐷𝑒0.27 ]

Parameters
Re [float] Reynolds number with D=Di, [-]
Di [float] Inner diameter of the coil, [m]
Dc [float] Diameter of the helix/coil measured from the center of the tube on one side to the
center of the tube on the other side, [m]
roughness [float, optional] Roughness of pipe wall [m]
Returns
fd [float] Darcy friction factor for a curved pipe [-]

Notes

Claimed to be valid for all turbulent conditions with 2500 < 𝐷𝑒 < 15000. At very low curvatures, converges
on the straight pipe result.

References

[1], [2]

264 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

Examples

>>> helical_turbulent_fd_Mandal_Nigam(1E4, 0.01, .2)


0.03831658117115902

fluids.friction.helical_transition_Re_Seth_Stahel(Di, Dc)
Calculates the transition Reynolds number for flow inside a curved or helical coil between laminar and turbulent
flow, using the method of [1].
[︃ √︂ ]︃
𝐷𝑖
𝑅𝑒𝑐𝑟𝑖𝑡 = 1900 1 + 8
𝐷𝑐

Parameters
Di [float] Inner diameter of the coil, [m]
Dc [float] Diameter of the helix/coil measured from the center of the tube on one side to the
center of the tube on the other side, [m]
Returns
Re_crit [float] Transition Reynolds number between laminar and turbulent [-]

Notes

At very low curvatures, converges to Re = 1900.

References

[1]

Examples

>>> helical_transition_Re_Seth_Stahel(1, 7.)


7645.0599897402535

fluids.friction.helical_transition_Re_Ito(Di, Dc)
Calculates the transition Reynolds number for flow inside a curved or helical coil between laminar and turbulent
flow, using the method of [1], as shown in [2] and in [3].
(︂ )︂0.32
𝐷𝑖
𝑅𝑒𝑐𝑟𝑖𝑡 = 20000
𝐷𝑐

Parameters
Di [float] Inner diameter of the coil, [m]
Dc [float] Diameter of the helix/coil measured from the center of the tube on one side to the
center of the tube on the other side, [m]
Returns
Re_crit [float] Transition Reynolds number between laminar and turbulent [-]

2.9. Friction factor and pipe roughness (fluids.friction) 265


Fluids Documentation, Release 1.0.21

Notes

At very low curvatures, converges to Re = 0. Recommended for 0.00116 < 𝑑𝑖 /𝐷𝑐 < 0.067

References

[1], [2], [3]

Examples

>>> helical_transition_Re_Ito(1, 7.)


10729.972844697186

fluids.friction.helical_transition_Re_Kubair_Kuloor(Di, Dc)
Calculates the transition Reynolds number for flow inside a curved or helical coil between laminar and turbulent
flow, using the method of [1], as shown in [2].
(︂ )︂0.2
𝐷𝑖
𝑅𝑒𝑐𝑟𝑖𝑡 = 12730
𝐷𝑐

Parameters
Di [float] Inner diameter of the coil, [m]
Dc [float] Diameter of the helix/coil measured from the center of the tube on one side to the
center of the tube on the other side, [m]
Returns
Re_crit [float] Transition Reynolds number between laminar and turbulent [-]

Notes

At very low curvatures, converges to Re = 0. Recommended for 0.0005 < 𝑑𝑖 /𝐷𝑐 < 0.103

References

[1], [2]

Examples

>>> helical_transition_Re_Kubair_Kuloor(1, 7.)


8625.986927588123

fluids.friction.helical_transition_Re_Kutateladze_Borishanskii(Di, Dc)
Calculates the transition Reynolds number for flow inside a curved or helical coil between laminar and turbulent
flow, using the method of [1], also shown in [2].
(︂ )︂0.3
4 𝐷𝑖
𝑅𝑒𝑐𝑟𝑖𝑡 = 2300 + 1.05 × 10
𝐷𝑐

Parameters

266 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

Di [float] Inner diameter of the coil, [m]


Dc [float] Diameter of the helix/coil measured from the center of the tube on one side to the
center of the tube on the other side, [m]
Returns
Re_crit [float] Transition Reynolds number between laminar and turbulent [-]

Notes

At very low curvatures, converges to Re = 2300. Recommended for 0.0417 < 𝑑𝑖 /𝐷𝑐 < 0.1667

References

[1], [2]

Examples

>>> helical_transition_Re_Kutateladze_Borishanskii(1, 7.)


7121.143774574058

fluids.friction.helical_transition_Re_Schmidt(Di, Dc)
Calculates the transition Reynolds number for flow inside a curved or helical coil between laminar and turbulent
flow, using the method of [1], also shown in [2] and [3]. Correlation recommended in [3].
[︃ (︂ )︂0.45 ]︃
𝐷𝑖
𝑅𝑒𝑐𝑟𝑖𝑡 = 2300 1 + 8.6
𝐷𝑐

Parameters
Di [float] Inner diameter of the coil, [m]
Dc [float] Diameter of the helix/coil measured from the center of the tube on one side to the
center of the tube on the other side, [m]
Returns
Re_crit [float] Transition Reynolds number between laminar and turbulent [-]

Notes

At very low curvatures, converges to Re = 2300. Recommended for 𝑑𝑖 /𝐷𝑐 < 0.14

References

[1], [2], [3]

2.9. Friction factor and pipe roughness (fluids.friction) 267


Fluids Documentation, Release 1.0.21

Examples

>>> helical_transition_Re_Schmidt(1, 7.)


10540.094061770815

fluids.friction.helical_transition_Re_Srinivasan(Di, Dc)
Calculates the transition Reynolds number for flow inside a curved or helical coil between laminar and turbulent
flow, using the method of [1], also shown in [2] and [3]. Correlation recommended in [3].
[︃ (︂ )︂0.5 ]︃
𝐷𝑖
𝑅𝑒𝑐𝑟𝑖𝑡 = 2100 1 + 12
𝐷𝑐

Parameters
Di [float] Inner diameter of the coil, [m]
Dc [float] Diameter of the helix/coil measured from the center of the tube on one side to the
center of the tube on the other side, [m]
Returns
Re_crit [float] Transition Reynolds number between laminar and turbulent [-]

Notes

At very low curvatures, converges to Re = 2100. Recommended for 0.004 < 𝑑𝑖 /𝐷𝑐 < 0.1.

References

[1], [2], [3]

Examples

>>> helical_transition_Re_Srinivasan(1, 7.)


11624.704719832524

2.9.4 Other Geometry Friction Factor Correlations

fluids.friction.friction_plate_Martin_1999(Re, plate_enlargement_factor)
Calculates Darcy friction factor for single-phase flow in a Chevron-style plate heat exchanger according to [1].
1 cos 𝜑 1 − cos 𝜑
√︀ = √︀ + √
𝑓𝑓 0.045 tan 𝜑 + 0.09 sin 𝜑 + 𝑓0 / cos(𝜑) 3.8𝑓1

𝑓0 = 16/𝑅𝑒 for 𝑅𝑒 < 2000

𝑓0 = (1.56 ln 𝑅𝑒 − 3)−2 for 𝑅𝑒 ≥ 2000


149
𝑓1 = + 0.9625 for 𝑅𝑒 < 2000
𝑅𝑒
9.75
𝑓1 = for 𝑅𝑒 ≥ 2000
𝑅𝑒0.289
Parameters

268 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

Re [float] Reynolds number with respect to the hydraulic diameter of the channels, [-]
plate_enlargement_factor [float] The extra surface area multiplier as compared to a flat plate
caused the corrugations, [-]
Returns
fd [float] Darcy friction factor [-]

Notes

Based on experimental data from Re from 200 - 10000 and enhancement factors calculated with chevron angles
of 0 to 80 degrees. See PlateExchanger for further clarification on the definitions.
The length the friction factor gets multiplied by is not the flow path length, but rather the straight path length
from port to port as if there were no chevrons.
Note there is a discontinuity at Re = 2000 for the transition from laminar to turbulent flow, although the literature
suggests the transition is actually smooth.
This was first developed in [2] and only minor modifications by the original author were made before its repub-
lication in [1]. This formula is also suggested in [3]

References

[1], [2], [3]

Examples

>>> friction_plate_Martin_1999(Re=20000, plate_enlargement_factor=1.15)


2.284018089834135

fluids.friction.friction_plate_Martin_VDI(Re, plate_enlargement_factor)
Calculates Darcy friction factor for single-phase flow in a Chevron-style plate heat exchanger according to [1].
1 cos 𝜑 1 − cos 𝜑
√ = √︀ + √
𝑓𝑑 0.28 tan 𝜑 + 0.36 sin 𝜑 + 𝑓0 / cos(𝜑) 3.8𝑓1
𝑓0 = 64/𝑅𝑒 for 𝑅𝑒 < 2000
𝑓0 = (1.56 ln 𝑅𝑒 − 3)−2 for 𝑅𝑒 ≥ 2000
597
𝑓1 = + 3.85 for 𝑅𝑒 < 2000
𝑅𝑒
39
𝑓1 = for 𝑅𝑒 ≥ 2000
𝑅𝑒0.289
Parameters
Re [float] Reynolds number with respect to the hydraulic diameter of the channels, [-]
plate_enlargement_factor [float] The extra surface area multiplier as compared to a flat plate
caused the corrugations, [-]
Returns
fd [float] Darcy friction factor [-]
See also:

friction_plate_Martin_1999

2.9. Friction factor and pipe roughness (fluids.friction) 269


Fluids Documentation, Release 1.0.21

Notes

Based on experimental data from Re from 200 - 10000 and enhancement factors calculated with chevron angles
of 0 to 80 degrees. See PlateExchanger for further clarification on the definitions.
The length the friction factor gets multiplied by is not the flow path length, but rather the straight path length
from port to port as if there were no chevrons.
Note there is a discontinuity at Re = 2000 for the transition from laminar to turbulent flow, although the literature
suggests the transition is actually smooth.
This is a revision of the Martin’s earlier model, adjusted to predidct higher friction factors.
There are three parameters in this model, a, b and c; it is posisble to adjust them to better fit a know exchanger’s
pressure drop.

References

[1]

Examples

>>> friction_plate_Martin_VDI(Re=20000, plate_enlargement_factor=1.15)


2.702534119024076

fluids.friction.friction_plate_Kumar(Re, chevron_angle)
Calculates Darcy friction factor for single-phase flow in a well-designed Chevron-style plate heat exchanger
according to [1]. The data is believed to have been developed by APV International Limited, since acquired by
SPX Corporation. This uses a curve fit of that data published in [2].

𝐶2
𝑓𝑓 =
𝑅𝑒𝑝
C2 and p are coefficients looked up in a table, with varying ranges of Re validity and chevron angle validity. See
the source for their exact values.
Parameters
Re [float] Reynolds number with respect to the hydraulic diameter of the channels, [-]
chevron_angle [float] Angle of the plate corrugations with respect to the vertical axis (the di-
rection of flow if the plates were straight), between 0 and 90. Many plate exchangers use two
alternating patterns; use their average angle for that situation [degrees]
Returns
fd [float] Darcy friction factor [-]

270 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

Notes

Data on graph from Re=0.1 to Re=10000, with chevron angles 30 to 65 degrees. See PlateExchanger for further
clarification on the definitions.
It is believed the constants used in this correlation were curve-fit to the actual graph in [1] by the author of [2]
as there is no
The length the friction factor gets multiplied by is not the flow path length, but rather the straight path length
from port to port as if there were no chevrons.
As the coefficients change, there are numerous small discontinuities, although the data on the graphs is continuous
with sharp transitions of the slope.
The author of [1] states clearly this correlation is “applicable only to well designed Chevron PHEs”.

References

[1], [2]

Examples

>>> friction_plate_Kumar(Re=2000, chevron_angle=30)


2.9760669055634517

fluids.friction.friction_plate_Muley_Manglik(Re, chevron_angle, plate_enlargement_factor)


Calculates Darcy friction factor for single-phase flow in a Chevron-style plate heat exchanger according to [1],
also shown and recommended in [2].

𝑓𝑓 = [2.917 − 0.1277𝛽 + 2.016 × 10−3 𝛽 2 ] × [20.78 − 19.02𝜑 + 18.93𝜑2 − 5.341𝜑3 ] × 𝑅𝑒−[0.2+0.0577 sin[(𝜋𝛽/45)+2.1]]

Parameters
Re [float] Reynolds number with respect to the hydraulic diameter of the channels, [-]
chevron_angle [float] Angle of the plate corrugations with respect to the vertical axis (the di-
rection of flow if the plates were straight), between 0 and 90. Many plate exchangers use two
alternating patterns; use their average angle for that situation [degrees]
plate_enlargement_factor [float] The extra surface area multiplier as compared to a flat plate
caused the corrugations, [-]
Returns
fd [float] Darcy friction factor [-]

Notes

Based on experimental data of plate enacement factors up to 1.5, and valid for Re > 1000 and chevron angles
from 30 to 60 degrees with sinusoidal shape. See PlateExchanger for further clarification on the definitions.
The length the friction factor gets multiplied by is not the flow path length, but rather the straight path length
from port to port as if there were no chevrons.
This is a continuous model with no discontinuities.

2.9. Friction factor and pipe roughness (fluids.friction) 271


Fluids Documentation, Release 1.0.21

References

[1], [2]

Examples

>>> friction_plate_Muley_Manglik(Re=2000, chevron_angle=45, plate_enlargement_


˓→factor=1.2)

1.0880870804075413

2.9.5 Experimental Friction Data

fluids.friction.oregon_smooth_data = ([11.21, 20.22, 29.28, 43.19, 57.73, 64.58, 86.05,


113.3, 135.3, 157.5, 179.4, 206.4, 228.0, 270.9, 315.2, 358.9, 402.9, 450.2, 522.5,
583.1, 671.8, 789.8, 891.0, 1013.0, 1197.0, 1300.0, 1390.0, 1669.0, 1994.0, 2227.0,
2554.0, 2868.0, 2903.0, 2926.0, 2955.0, 2991.0, 2997.0, 3047.0, 3080.0, 3264.0, 3980.0,
4835.0, 5959.0, 8162.0, 10900.0, 13650.0, 18990.0, 29430.0, 40850.0, 59220.0, 84760.0,
120000.0, 176000.0, 237700.0, 298200.0, 467800.0, 587500.0, 824200.0, 1050000.0], [5.537,
3.492, 2.329, 1.523, 1.173, 0.9863, 0.7826, 0.5709, 0.4815, 0.4182, 0.3655, 0.3237,
0.2884, 0.2433, 0.2077, 0.1834, 0.1656, 0.1475, 0.1245, 0.1126, 0.09917, 0.08501,
0.07722, 0.06707, 0.0588, 0.05328, 0.04815, 0.04304, 0.03739, 0.03405, 0.03091, 0.02804,
0.03182, 0.03846, 0.03363, 0.04124, 0.035, 0.03875, 0.04285, 0.0426, 0.03995, 0.03797,
0.0361, 0.03364, 0.03088, 0.02903, 0.0267, 0.02386, 0.02086, 0.02, 0.01805, 0.01686,
0.01594, 0.01511, 0.01462, 0.01365, 0.01313, 0.01244, 0.01198])
Holds a tuple of experimental results from the smooth pipe flow experiments presented in McKEON, B. J., C. J.
SWANSON, M. V. ZAGAROLA, R. J. DONNELLY, and A. J. SMITS. “Friction Factors for Smooth Pipe Flow.”
Journal of Fluid Mechanics 511 (July 1, 2004): 41-44. doi:10.1017/S0022112004009796.

2.9.6 Roughness

fluids.friction.material_roughness(ID, D=None, optimism=None)


Searches through either a dict of clean pipe materials or used pipe materials and conditions and returns the ID
of the nearest material. Search is performed with either the standard library’s difflib or with the fuzzywuzzy
module if available.
Parameters
ID [str] Search terms for matching pipe materials, [-]
D [float, optional] Diameter of desired pipe; used only if ID is in [2], [m]
optimism [bool, optional] For values in [1], a minimum, maximum, and average value is nor-
mally given; if True, returns the minimum roughness; if False, the maximum roughness; and
if None, returns the average roughness. Most entries do not have all three values, so fallback
logic to return the closest entry is used, [-]
Returns
roughness [float] Retrieved or calculated roughness, [m]

272 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

References

[1], [2]

Examples

>>> material_roughness('condensate pipes')


0.0005

fluids.friction.nearest_material_roughness(name, clean=None)
Searches through either a dict of clean pipe materials or used pipe materials and conditions and returns the ID
of the nearest material. Search is performed with either the standard library’s difflib or with the fuzzywuzzy
module if available.
Parameters
name [str] Search term for matching pipe materials
clean [bool, optional] If True, search only clean pipe database; if False, search only the dirty
database; if None, search both
Returns
ID [str] String for lookup of roughness of a pipe, in either roughness_clean_names or
HHR_roughness depending on if clean is True, [-]

References

[1]

Examples

>>> nearest_material_roughness('condensate pipes', clean=False)


'Seamless steel tubes, Condensate pipes in open systems or periodically operated␣
˓→steam pipelines'

fluids.friction.roughness_Farshad(ID=None, D=None, coeffs=None)


Calculates of retrieves the roughness of a pipe based on the work of [1]. This function will return an average
value for pipes of a given material, or if diameter is provided, will calculate one specifically for the pipe inner
diameter according to the following expression with constants A and B:

𝜖 = 𝐴 · 𝐷𝐵+1

Please not that A has units of inches, and B requires D to be in inches as well.
The list of supported materials is as follows:
• ‘Plastic coated’
• ‘Carbon steel, honed bare’
• ‘Cr13, electropolished bare’
• ‘Cement lining’
• ‘Carbon steel, bare’

2.9. Friction factor and pipe roughness (fluids.friction) 273


Fluids Documentation, Release 1.0.21

• ‘Fiberglass lining’
• ‘Cr13, bare’
If coeffs and D are given, the custom coefficients for the equation as given by the user will be used and ID is not
required.
Parameters
ID [str, optional] Name of pipe material from above list
D [float, optional] Actual inner diameter of pipe, [m]
coeffs [tuple, optional] (A, B) Coefficients to use directly, instead of looking them up; they are
actually dimensional, in the forms (inch^-B, -) but only coefficients with those dimensions
are available [-]
Returns
epsilon [float] Roughness of pipe [m]

Notes

The diameter-dependent form provides lower roughness values for larger diameters.
The measurements were based on DIN 4768/1 (1987), using both a “Dektak ST Surface Profiler” and a “Hommel
Tester T1000”. Both instruments were found to be in agreement. A series of flow tests, in which pressure drop
directly measured, were performed as well, with nitrogen gas as an operating fluid. The accuracy of the data
from these tests is claimed to be within 1%.
Using those results, the authors back-calculated what relative roughness values would be necessary to produce
the observed pressure drops. The average difference between this back-calculated roughness and the measured
roughness was 6.75%.
For microchannels, this model will predict roughness much larger than the actual channel diameter.

References

[1]

Examples

>>> roughness_Farshad('Cr13, bare', 0.05)


5.3141677781137006e-05

274 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

fluids.friction.HHR_roughness = {'Asbestos cement tubes, Average': (0.0006, None, None),


'Asbestos cement tubes, New': (5e-05, 0.0001, None), 'Cast-iron tubes, Cleaned after
extensive use': (0.0003, 0.0015, None), 'Cast-iron tubes, Coated with asphalt': (0.00012,
0.0003, None), 'Cast-iron tubes, Deposits visible': (0.001, 0.0015, None), 'Cast-iron
tubes, New, bituminized': (0.0001, 0.00015, None), 'Cast-iron tubes, Severely corroded':
(None, 0.003, None), 'Cast-iron tubes, Substantial deposits': (0.002, 0.004, None),
'Cast-iron tubes, Used and corroded': (0.001, 0.0015, None), 'Cast-iron tubes, Used water
pipelines': (None, None, 0.0014), 'Cement tubes, Joints, non smoothed': (0.0019, 0.0064,
None), 'Cement tubes, Non processed': (0.001, 0.002, None), 'Cement tubes, Smoothed':
(0.0003, 0.0008, None), 'Cement-mortar plaster channels, Plaster, cement, smoothed joints
and protrusions, and a casing': (5e-05, 0.00022, None), 'Cement-mortar plaster channels,
Steel trowled': (None, None, 0.0005), 'Concrete water conduits, no finish, Brushed
air-placed, either sprayed concrete or concrete on more concrete': (None, None, 0.0023),
'Concrete water conduits, no finish, Conduits for water, sprayed surface of concrete':
(0.0005, 0.001, None), 'Concrete water conduits, no finish, Hand-smoothed cement finish
and smoothed joints': (0.00015, 0.00035, None), 'Concrete water conduits, no finish, New
and finished with plater; excellent manufacture (joints aligned, prime coated and
smoothed)': (5e-05, 0.00015, None), 'Concrete water conduits, no finish, New, very well
manufactured, hand smoothed, prime-coated joints': (0.0001, 0.0002, None), 'Concrete
water conduits, no finish, Non-smoothed air-placed, either sprayed concrete or concrete
on more concrete': (0.003, 0.006, None), 'Concrete water conduits, no finish, Old, poor
fitting and manufacture; with an overgrown surface and deposits of sand and gravel':
(0.001, 0.004, None), 'Concrete water conduits, no finish, Smoothed air-placed, either
sprayed concrete or concrete on more concrete': (0.006, 0.017, None), 'Concrete water
conduits, no finish, Used and corroded; with a wavy surface and wood framework': (0.001,
0.004, None), 'Concrete water conduits, no finish, Used, no deposits, moderately smooth,
steel or wooden casing, joints prime coated but not smoothed': (0.0003, 0.0006, None),
'Concrete water conduits, no finish, Used, prefabricated monoliths, cement plaster (wood
floated), rough joints': (0.0005, 0.001, None), 'Concrete water conduits, no finish, Very
old; damaged surface, very overgrown': (0.005, None, None), 'Concrete water conduits, no
finish, Water conduit, finished with smoothed plaster': (0.005, None, None), 'Galzanized
sheet steel, New': (None, None, 0.00015), 'Galzanized sheet steel, Used previously for
water': (None, None, 0.00018), 'Galzanized steel tubes, Bright galvanization; new':
(7e-05, 0.0001, None), 'Galzanized steel tubes, Ordinary galvanization': (0.0001,
0.00015, None), 'Glass tubes, Glass': (1.5e-06, 1e-05, None), 'Other, Plaster over a
screen': (0.01, 0.015, None), 'Other, Salt-glazed ceramic': (None, None, 0.0014), 'Other,
Slag and alabaster-filling': (0.001, 0.0015, None), 'Other, Slag-concrete': (None, None,
0.0015), 'Plywood tubes, Birch plywood, longitudal grain, good quality': (3e-05, 5e-05,
None), 'Plywood tubes, Birch plywood, transverse grain, good quality': (None, None,
0.00012), 'Reinforced concrete tubes, New': (0.00025, 0.00034, None), 'Reinforced
concrete tubes, Nonprocessed': (0.0025, None, None), 'Riveted steel tubes, Extremely poor
surface; overlapping and uneven joints': (0.005, None, None), 'Riveted steel tubes,
Riveted laterally and longitudinally with one line; lacquered on the inside': (0.0003,
0.0004, None), 'Riveted steel tubes, Riveted laterally and longitudinally with two lines;
with or without lacquer on the inside and without corrosion': (0.0006, 0.0007, None),
'Riveted steel tubes, Riveted laterally with four line and longitudinally with six lines;
overlapping joints inside': (None, None, 0.004), 'Riveted steel tubes, Riveted laterally
with one line and longitudinally with two lines; thickly lacquered or torred on the
inside': (0.0012, 0.0014, None), 'Riveted steel tubes, Riveted longitudinally with six
lines, after extensive use': (None, None, 0.002), 'Roofing steel sheets, Not Oiled':
(2e-05, 4e-05, None), 'Roofing steel sheets, Oiled': (0.00015, 0.0011, None), 'Rough
channels in rock, Blast-hewed, little jointing': (0.1, 0.14, None), 'Rough channels in
rock, Blast-hewed, substantial jointing': (0.13, 0.5, None), 'Rough channels in rock,
Roughly cut or very uneven surface': (0.5, 1.5, None), 'Seamless steel tubes,
Bituminized': (None, 4e-05, None), 'Seamless steel tubes, Casings in gas wells, different
conditions, several years of use': (6e-05, 0.00022, None), 'Seamless steel tubes,
2.9. Friction
Cleaned, factor and
following pipeof
years roughness 4e-05, None), 'Seamless steel tubes, Compressed
(fluids.friction)
use': (None, 275
air piping': (None, None, 0.0008), 'Seamless steel tubes, Condensate pipes in open
systems or periodically operated steam pipelines': (None, None, 0.0005), 'Seamless steel
tubes, Corroded, moderately ': (None, None, 0.0004), 'Seamless steel tubes, Following
Fluids Documentation, Release 1.0.21

2.9.7 Pressure Drop Calculation

fluids.friction.one_phase_dP(m, rho, mu, D, roughness=0.0, L=1.0, Method=None)


Calculates single-phase pressure drop. This is a wrapper around other methods.
Parameters
m [float] Mass flow rate of fluid, [kg/s]
rho [float] Density of fluid, [kg/m^3]
mu [float] Viscosity of fluid, [Pa*s]
D [float] Diameter of pipe, [m]
roughness [float, optional] Roughness of pipe for use in calculating friction factor, [m]
L [float, optional] Length of pipe, [m]
Method [string, optional] A string of the function name to use
Returns
dP [float] Pressure drop of the single-phase flow, [Pa]

References

[1]

Examples

>>> one_phase_dP(10.0, 1000, 1E-5, .1, L=1)


63.43447321097365

fluids.friction.one_phase_dP_gravitational(angle, rho, L=1.0, g=9.80665)


This function handles calculation of one-phase liquid-gas pressure drop due to gravitation for flow inside chan-
nels. This is either a differential calculation for a segment with an infinitesimal difference in elevation L = 1 or
a discrete calculation.
(︂ )︂
𝑑𝑃
− = 𝜌𝑔 sin 𝜃
𝑑𝑧 𝑔𝑟𝑎𝑣

− (∆𝑃 )𝑔𝑟𝑎𝑣 = 𝐿𝜌𝑔 sin 𝜃


Parameters
angle [float] The angle of the pipe with respect to the horizontal, [degrees]
rho [float] Fluid density, [kg/m^3]
L [float, optional] Length of pipe, [m]
g [float, optional] Acceleration due to gravity, [m/s^2]
Returns
dP [float] Gravitational component of pressure drop for one-phase flow, [Pa/m] or [Pa]

276 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

Examples

>>> one_phase_dP_gravitational(angle=90, rho=2.6)


25.49729
>>> one_phase_dP_gravitational(angle=90, rho=2.6, L=4)
101.98916

fluids.friction.one_phase_dP_dz_acceleration(m, D, rho, dv_dP, dP_dL, dA_dL)


This function handles calculation of one-phase fluid pressure drop due to acceleration for flow inside channels.
This is a continuous calculation, providing the differential in pressure per unit length and should be called as part
of an integration routine [1].
𝐺2 1 𝜕𝐴
(︂ )︂ [︂ ]︂
𝜕𝑃 2 𝜕𝑃 𝜕(1/𝜌)
− =𝐺 −
𝜕𝐿 𝐴 𝜕𝐿 𝜕𝑃 𝜌 𝐴 𝜕𝐿
Parameters
m [float] Mass flow rate of fluid, [kg/s]
D [float] Diameter of pipe, [m]
rho [float] Fluid density, [kg/m^3]
dv_dP [float] Derivative of mass specific volume of the fluid with respect to pressure,
[m^3/(kg*Pa)]
dP_dL [float] Pressure drop per unit length of pipe, [Pa/m]
dA_dL [float] Change in area of pipe per unit length of pipe, [m^2/m]
Returns
dP_dz [float] Acceleration component of pressure drop for one-phase flow, [Pa/m]

Notes

The value returned here is positive for pressure loss and negative for pressure increase.
As dP_dL is not known, this equation is normally used in a more complicated way than this function provides;
this method can be used to check the consistency of that routine.

References

[1]

Examples

>>> one_phase_dP_dz_acceleration(m=1, D=0.1, rho=827.1, dv_dP=-1.1E-5,


... dP_dL=5E5, dA_dL=0.0001)
89162.89116373913

fluids.friction.one_phase_dP_acceleration(m, D, rho_o, rho_i)


This function handles calculation of one-phase fluid pressure drop due to acceleration for flow inside channels.
This is a discrete calculation, providing the total differential in pressure for a given length and should be called
as part of a segment solver routine.
(︂ )︂ [︂ ]︂
𝑑𝑃 𝑑 1 1
− = 𝐺2 −
𝑑𝑧 𝑎𝑐𝑐 𝑑𝑧 𝜌𝑜 𝜌𝑖

2.9. Friction factor and pipe roughness (fluids.friction) 277


Fluids Documentation, Release 1.0.21

Parameters
m [float] Mass flow rate of fluid, [kg/s]
D [float] Diameter of pipe, [m]
rho_o [float] Fluid density out, [kg/m^3]
rho_i [float] Fluid density int, [kg/m^3]
Returns
dP [float] Acceleration component of pressure drop for one-phase flow, [Pa]

Examples

>>> one_phase_dP_acceleration(m=1, D=0.1, rho_o=827.1, rho_i=830)


0.06848289670840459

2.9.8 Utilities

fluids.friction.transmission_factor(fd=None, F=None)
Calculates either transmission factor from Darcy friction factor, or Darcy friction factor from the transmission
factor. Raises an exception if neither input is given.
Transmission factor is a term used in compressible gas flow in pipelines.
2
𝐹 =√
𝑓𝑑
4
𝑓𝑑 =
𝐹2
Parameters
fd [float, optional] Darcy friction factor, [-]
F [float, optional] Transmission factor, [-]
Returns
fd or F [float] Darcy friction factor or transmission factor [-]

References

[1]

Examples

>>> transmission_factor(fd=0.0185)
14.704292441876154

>>> transmission_factor(F=20)
0.01

278 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

2.10 Tank and Heat Exchanger Design (fluids.geometry)

This module contains functionality for calculating parameters about different geometrical forms that come up in engi-
neering practice.
Implemented geometry objects are tanks, helical coils, cooling towers, air coolers, compact heat exchangers, and plate
and frame heat exchangers.
Additional functionality for typical catalyst/adsorbent pellet shapes is also included.
For reporting bugs, adding feature requests, or submitting pull requests, please use the GitHub issue tracker or contact
the author at Caleb.Andrew.Bell@gmail.com.

• Main Interfaces
• Tank Volume Functions
• Tank Surface Area Functions
• Miscellaneous Geometry Functions
• Pellet Properties

2.10.1 Main Interfaces

class fluids.geometry.TANK(D=None, L=None, horizontal=True, sideA=None, sideB=None, sideA_a=None,


sideB_a=None, sideA_f=None, sideA_k=None, sideB_f=None, sideB_k=None,
sideA_a_ratio=None, sideB_a_ratio=None, L_over_D=None, V=None)
Bases: object
Class representing tank volumes and levels. All parameters are also attributes.
Parameters
D [float] Diameter of the cylindrical section of the tank, [m]
L [float] Length of the main cylindrical section of the tank, [m]
horizontal [bool, optional] Whether or not the tank is a horizontal or vertical tank
sideA [string, optional] The left (or bottom for vertical) head of the tank’s type; one of [None,
‘conical’, ‘ellipsoidal’, ‘torispherical’, ‘guppy’, ‘spherical’, ‘same’].
sideB [string, optional] The right (or top for vertical) head of the tank’s type; one of [None,
‘conical’, ‘ellipsoidal’, ‘torispherical’, ‘guppy’, ‘spherical’, ‘same’].
sideA_a [float, optional] The distance the head as specified by sideA extends down or to the left
from the main cylindrical section, [m]
sideB_a [float, optional] The distance the head as specified by sideB extends up or to the right
from the main cylindrical section, [m]
sideA_f [float, optional] Dimensionless dish-radius parameter for side A; also commonly given
as the product of f and D (fD), which is called dish radius and has units of length, [-]
sideA_k [float, optional] Dimensionless knuckle-radius parameter for side A; also commonly
given as the product of k and D (kD), which is called the knuckle radius and has units of
length, [-]

2.10. Tank and Heat Exchanger Design (fluids.geometry) 279


Fluids Documentation, Release 1.0.21

sideB_f [float, optional] Dimensionless dish-radius parameter for side B; also commonly given
as the product of f and D (fD), which is called dish radius and has units of length, [-]
sideB_k [float, optional] Dimensionless knuckle-radius parameter for side B; also commonly
given as the product of k and D (kD), which is called the knuckle radius and has units of
length, [-]
sideA_a_ratio [float, optional] Ratio for a parameter; can be used instead of specifying an ab-
solute value, [-]
sideB_a_ratio [float, optional] Ratio for a parameter; can be used instead of specifying an ab-
solute value, [-]
L_over_D [float, optional] Ratio of length over diameter, used only when D and L are both
unspecified but V is, [-]
V [float, optional] Volume of the tank; solved for if specified, using
sideA_a_ratio/sideB_a_ratio, sideA, sideB, horizontal, and one of L_over_D, L, or D,
[m^3]

Notes

For torpsherical tank heads, the following f and k parameters are used in standards. The default is ASME F&D.

f k
2:1 semi-elliptical 0.9 0.17
ASME F&D 1 0.06
ASME 80/6 0.8 0.06
ASME 80/10 F&D 0.8 0.1
DIN 28011 1 0.1
DIN 28013 0.8 0.154

For the following cases, numerical integrals are used.


V_horiz_spherical V_horiz_torispherical SA_partial_horiz_spherical_head SA_partial_horiz_ellipsoidal_head
SA_partial_horiz_guppy_head SA_partial_horiz_torispherical_head

Examples

Total volume of a tank:

>>> TANK(D=1.2, L=4, horizontal=False).V_total


4.523893421169302

Volume of a tank at a given height:

>>> TANK(D=1.2, L=4, horizontal=False).V_from_h(.5)


0.5654866776461628

Height of liquid for a given volume:

>>> TANK(D=1.2, L=4, horizontal=False).h_from_V(.5)


0.442097064

Surface area of a tank with a conical head:

280 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

>>> T1 = TANK(V=10, L_over_D=0.7, sideB='conical', sideB_a=0.5)


>>> T1.A, T1.A_sideA, T1.A_sideB, T1.A_lateral
(24.94775907, 5.118555, 5.497246, 14.331956)

Solving for tank volumes, first horizontal, then vertical:

>>> TANK(D=10., horizontal=True, sideA='conical', sideB='conical', V=500).L


4.699531
>>> TANK(L=4.69953105701, horizontal=True, sideA='conical', sideB='conical', V=500).
˓→D

9.9999999
>>> TANK(L_over_D=0.469953105701, horizontal=True, sideA='conical', sideB='conical',
˓→ V=500).L

4.6995310

>>> TANK(D=10., horizontal=False, sideA='conical', sideB='conical', V=500).L


4.699531
>>> TANK(L=4.69953105701, horizontal=False, sideA='conical', sideB='conical',␣
˓→V=500).D

9.99999999
>>> TANK(L_over_D=0.469953105701, horizontal=False, sideA='conical', sideB='conical
˓→', V=500).L

4.699531057

Attributes
h_max [float] Height of the tank, [m]
V_total [float] Total volume of the tank as calculated [m^3]
sideA_V [float] Volume of only sideA [m^3]
sideB_V [float] Volume of only sideB [m^3]
lateral_V [float] Volume of cylindrical section of tank [m^3]
A [float] Total surface area of the tank, [m^2]
A_sideA [float] Surface area of sideA, [m^2]
A_sideB [float] Surface area of sideB, [m^2]
A_lateral [float] Surface area of the lateral side, [m^2]
A_sideA_extra [float] Additional surface area of sideA beyond that of a flat disk, [m^2]
A_sideB_extra [float] Additional surface area of sideB beyond that of a flat disk, [m^2]
table [bool] Whether or not a table of heights-volumes has been generated
heights [ndarray] Array of heights between 0 and h_max, [m]
volumes [ndarray] Array of volumes calculated from the heights, [m^3]
c_forward [ndarray] Coefficients for the Chebyshev approximations in calculating V from h, [-]
c_backward [ndarray] Coefficients for the Chebyshev approximations in calculating h from V,
[-]

2.10. Tank and Heat Exchanger Design (fluids.geometry) 281


Fluids Documentation, Release 1.0.21

Methods

A_cross_sectional(h[, method]) Method to calculate the cross-sectional liquid surface


area from which gas can evolve in a fully defined tank
given a specified height h.
SA_from_h (h[, method]) Method to calculate the volume of liquid in a fully
defined tank given a specified height h.
V_from_h (h[, method]) Method to calculate the volume of liquid in a fully
defined tank given a specified height h.
add_thickness(thickness[, sideA_thickness, ...]) Method to create a new tank instance with the same
parameters as itself, except with an added thickness
to it.
from_two_specs(spec0, spec1[, spec0_name, ...]) Method to create a new tank instance according to
two specifications which are not direct geometry pa-
rameters.
h_from_V(V[, method]) Method to calculate the height of liquid in a fully de-
fined tank given a specified volume of liquid in it V.
set_chebyshev_approximators([deg_forward, Method to derive and set coefficients for chebyshev
...]) polynomial function approximation of the height-
volume and volume-height relationship.
set_misc() Set more parameters, after the tank is better defined
than in the __init__ function.
set_table([n, dx]) Method to set an interpolation table of liquids levels
versus volumes in the tank, for a fully defined tank.

A_cross_sectional(h, method='full')
Method to calculate the cross-sectional liquid surface area from which gas can evolve in a fully defined
tank given a specified height h. h must be under the maximum height. This is calculated by numeric
differentiation for most cases.
Parameters
h [float] Height specified, [m]
method [str, optional] ‘full’ (calculated rigorously) or ‘chebyshev’, [-]
Returns
A_cross [float] Surface area of liquid in the tank up to the specified height, [m^2]
SA_from_h(h, method='full')
Method to calculate the volume of liquid in a fully defined tank given a specified height h. h must be under
the maximum height.
Parameters
h [float] Height specified, [m]
method [str, optional] ‘full’ (calculated rigorously) ; nothing else is implemented
Returns
SA [float] Surface area of liquid in the tank up to the specified height, [m^2]
V_from_h(h, method='full')
Method to calculate the volume of liquid in a fully defined tank given a specified height h. h must be under
the maximum height. If the method is ‘chebyshev’, and the coefficients have not yet been calculated, they
are created by calling set_chebyshev_approximators.

282 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

Parameters
h [float] Height specified, [m]
method [str] One of ‘full’ (calculated rigorously) or ‘chebyshev’
Returns
V [float] Volume of liquid in the tank up to the specified height, [m^3]
add_thickness(thickness, sideA_thickness=None, sideB_thickness=None)
Method to create a new tank instance with the same parameters as itself, except with an added thickness to
it. This is useful to obtain ex. the inside of a tank and the outside; their different in volumes is the volume
of the shell, and could be used to determine weight.
Parameters
thickness [float] Thickness to add to the tank diameter, [m]
sideA_thickness [float, optional] The thickness to add to the sideA head; if not specified, it
will be thickness, [m]
sideB_thickness [float, optional] The thickness to add to the sideB head; if not specified, it
will be thickness, [m]
Returns
TANK [TANK] Tank object, [-]

Notes

Be careful not to specify a negative thickness larger than the heads’ lengths, or the head will become
concave! The same applies to adding a thickness to convex heads - they can become convex.
chebyshev = False
static from_two_specs(spec0, spec1, spec0_name='V', spec1_name='A_cross', h=None,
horizontal=True, sideA=None, sideB=None, sideA_a=None, sideB_a=None,
sideA_f=None, sideA_k=None, sideB_f=None, sideB_k=None,
sideA_a_ratio=None, sideB_a_ratio=None)
Method to create a new tank instance according to two specifications which are not direct geometry param-
eters.
The allowable options are ‘V’, ‘SA’, ‘V_partial’, ‘SA_partial’, and ‘A_cross’, the later three of which require
h to be specified.
Parameters
spec0 [float] Goal for spec0_name, [-]
spec1 [float] Goal for spec1_name, [-]
spec0_name [str] One of ‘V’, ‘SA’, ‘V_partial’, ‘SA_partial’, and ‘A_cross’ [-]
spec1_name [str] One of ‘V’, ‘SA’, ‘V_partial’, ‘SA_partial’, and ‘A_cross’ [-]
h [float] Height at which to calculate the specs, [m]
horizontal [bool, optional] Whether or not the tank is a horizontal or vertical tank
sideA [string, optional] The left (or bottom for vertical) head of the tank’s type; one of [None,
‘conical’, ‘ellipsoidal’, ‘torispherical’, ‘guppy’, ‘spherical’, ‘same’].
sideB [string, optional] The right (or top for vertical) head of the tank’s type; one of [None,
‘conical’, ‘ellipsoidal’, ‘torispherical’, ‘guppy’, ‘spherical’, ‘same’].

2.10. Tank and Heat Exchanger Design (fluids.geometry) 283


Fluids Documentation, Release 1.0.21

sideA_a [float, optional] The distance the head as specified by sideA extends down or to the
left from the main cylindrical section, [m]
sideB_a [float, optional] The distance the head as specified by sideB extends up or to the
right from the main cylindrical section, [m]
sideA_f [float, optional] Dimensionless dish-radius parameter for side A; also commonly
given as the product of f and D (fD), which is called dish radius and has units of length, [-]
sideA_k [float, optional] Dimensionless knuckle-radius parameter for side A; also com-
monly given as the product of k and D (kD), which is called the knuckle radius and has
units of length, [-]
sideB_f [float, optional] Dimensionless dish-radius parameter for side B; also commonly
given as the product of f and D (fD), which is called dish radius and has units of length, [-]
sideB_k [float, optional] Dimensionless knuckle-radius parameter for side B; also commonly
given as the product of k and D (kD), which is called the knuckle radius and has units of
length, [-]
Returns
TANK [TANK] Tank object at solved specifications, [-]

Notes

Limited testing has been done on this method. The bounds are D between 0.1 mm and 10 km, with L_D
ratios of 1e-4 to 1e4.
h_from_V(V, method='spline')
Method to calculate the height of liquid in a fully defined tank given a specified volume of liquid in it V. V
must be under the maximum volume. If the method is ‘spline’, and the interpolation table is not yet defined,
creates it by calling the method set_table. If the method is ‘chebyshev’, and the coefficients have not yet
been calculated, they are created by calling set_chebyshev_approximators.
Parameters
V [float] Volume of liquid in the tank up to the desired height, [m^3]
method [str] One of ‘spline’, ‘chebyshev’, or ‘brenth’
Returns
h [float] Height of liquid at which the volume is as desired, [m]
set_chebyshev_approximators(deg_forward=50, deg_backwards=200)
Method to derive and set coefficients for chebyshev polynomial function approximation of the height-
volume and volume-height relationship.
A single set of chebyshev coefficients is used for the entire height- volume and volume-height relationships
respectively.
The forward relationship, V_from_h, requires far fewer coefficients in its fit than the reverse to obtain the
same relative accuracy.
Optionally, deg_forward or deg_backwards can be set to None to try to automatically fit the series to ma-
chine precision.
Parameters
deg_forward [int, optional] The degree of the chebyshev polynomial to be created for the
V_from_h curve, [-]

284 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

deg_backwards [int, optional] The degree of the chebyshev polynomial to be created for the
h_from_V curve, [-]
set_misc()
Set more parameters, after the tank is better defined than in the __init__ function.

Notes

Two of D, L, and L_over_D must be known when this function runs. The other one is set from the other two
first thing in this function. a_ratio parameters are used to calculate a values for the heads here, if applicable.
Radius is calculated here. Maximum tank height is calculated here. V_total is calculated here.
set_table(n=100, dx=None)
Method to set an interpolation table of liquids levels versus volumes in the tank, for a fully defined tank.
Normally run by the h_from_V method, this may be run prior to its use with a custom specification. Either
the number of points on the table, or the vertical distance between steps may be specified.
Parameters
n [float, optional] Number of points in the interpolation table, [-]
dx [float, optional] Vertical distance between steps in the interpolation table, [m]
table = False
fluids.geometry.V_tank(D, L, horizontal=True, sideA=None, sideB=None, sideA_a=0.0, sideB_a=0.0,
sideA_f=None, sideA_k=None, sideB_f=None, sideB_k=None)
Calculates the total volume of a vertical or horizontal tank with different head types.
Parameters
D [float] Diameter of the cylindrical section of the tank, [m]
L [float] Length of the main cylindrical section of the tank, [m]
horizontal [bool, optional] Whether or not the tank is a horizontal or vertical tank
sideA [string, optional] The left (or bottom for vertical) head of the tank’s type; one of [None,
‘conical’, ‘ellipsoidal’, ‘torispherical’, ‘guppy’, ‘spherical’].
sideB [string, optional] The right (or top for vertical) head of the tank’s type; one of [None,
‘conical’, ‘ellipsoidal’, ‘torispherical’, ‘guppy’, ‘spherical’].
sideA_a [float, optional] The distance the head as specified by sideA extends down or to the left
from the main cylindrical section, [m]
sideB_a [float, optional] The distance the head as specified by sideB extends up or to the right
from the main cylindrical section, [m]
sideA_f [float, optional] Dimensionless dish-radius parameter for side A; also commonly given
as the product of f and D (fD), which is called dish radius and has units of length, [-]
sideA_k [float, optional] Dimensionless knuckle-radius parameter for side A; also commonly
given as the product of k and D (kD), which is called the knuckle radius and has units of
length, [-]
sideB_f [float, optional] Dimensionless dish-radius parameter for side B; also commonly given
as the product of f and D (fD), which is called dish radius and has units of length, [-]
sideB_k [float, optional] Dimensionless knuckle-radius parameter for side B; also commonly
given as the product of k and D (kD), which is called the knuckle radius and has units of
length, [-]

2.10. Tank and Heat Exchanger Design (fluids.geometry) 285


Fluids Documentation, Release 1.0.21

Returns
V [float] Total volume [m^3]
sideA_V [float] Volume of only sideA [m^3]
sideB_V [float] Volume of only sideB [m^3]
lateral_V [float] Volume of cylindrical section of tank [m^3]

Examples

>>> V_tank(D=1.5, L=5., horizontal=False, sideA='conical',


... sideB='conical', sideA_a=2., sideB_a=1.)
(10.602875205865551, 1.1780972450961726, 0.5890486225480863, 8.835729338221293)

fluids.geometry.V_from_h(h, D, L, horizontal=True, sideA=None, sideB=None, sideA_a=0, sideB_a=0,


sideA_f=None, sideA_k=None, sideB_f=None, sideB_k=None)
Calculates partially full volume of a vertical or horizontal tank with different head types according to [1].
Parameters
h [float] Height of the liquid in the tank, [m]
D [float] Diameter of the cylindrical section of the tank, [m]
L [float] Length of the main cylindrical section of the tank, [m]
horizontal [bool, optional] Whether or not the tank is a horizontal or vertical tank
sideA [string, optional] The left (or bottom for vertical) head of the tank’s type; one of [None,
‘conical’, ‘ellipsoidal’, ‘torispherical’, ‘guppy’, ‘spherical’].
sideB [string, optional] The right (or top for vertical) head of the tank’s type; one of [None,
‘conical’, ‘ellipsoidal’, ‘torispherical’, ‘guppy’, ‘spherical’].
sideA_a [float, optional] The distance the head as specified by sideA extends down or to the left
from the main cylindrical section, [m]
sideB_a [float, optional] The distance the head as specified by sideB extends up or to the right
from the main cylindrical section, [m]
sideA_f [float, optional] Dimensionless dish-radius parameter for side A; also commonly given
as the product of f and D (fD), which is called dish radius and has units of length, [-]
sideA_k [float, optional] Dimensionless knuckle-radius parameter for side A; also commonly
given as the product of k and D (kD), which is called the knuckle radius and has units of
length, [-]
sideB_f [float, optional] Dimensionless dish-radius parameter for side B; also commonly given
as the product of f and D (fD), which is called dish radius and has units of length, [-]
sideB_k [float, optional] Dimensionless knuckle-radius parameter for side B; also commonly
given as the product of k and D (kD), which is called the knuckle radius and has units of
length, [-]
Returns
V [float] Volume up to h [m^3]

286 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

References

[1]

Examples

>>> V_from_h(h=7, D=1.5, L=5., horizontal=False, sideA='conical',


... sideB='conical', sideA_a=2., sideB_a=1.)
10.013826583317465

fluids.geometry.SA_tank(D, L, sideA=None, sideB=None, sideA_a=0, sideB_a=0, sideA_f=None,


sideA_k=None, sideB_f=None, sideB_k=None)
Calculates the surface are of a cylindrical tank with optional heads. In the degenerate case of being provided
with only D and L, provides the surface area of a cylinder.
Parameters
D [float] Diameter of the cylindrical section of the tank, [m]
L [float] Length of the main cylindrical section of the tank, [m]
sideA [string, optional] The left (or bottom for vertical) head of the tank’s type; one of [None,
‘conical’, ‘ellipsoidal’, ‘torispherical’, ‘guppy’, ‘spherical’].
sideB [string, optional] The right (or top for vertical) head of the tank’s type; one of [None,
‘conical’, ‘ellipsoidal’, ‘torispherical’, ‘guppy’, ‘spherical’].
sideA_a [float, optional] The distance the head as specified by sideA extends down or to the left
from the main cylindrical section, [m]
sideB_a [float, optional] The distance the head as specified by sideB extends up or to the right
from the main cylindrical section, [m]
sideA_f [float, optional] Dish-radius parameter for side A; fD = dish radius [1/m]
sideA_k [float, optional] knuckle-radius parameter for side A; kD = knuckle radius [1/m]
sideB_f [float, optional] Dish-radius parameter for side B; fD = dish radius [1/m]
sideB_k [float, optional] knuckle-radius parameter for side B; kD = knuckle radius [1/m]
Returns
SA [float] Surface area of the tank [m^2]
sideA_SA [float] Surface area of only sideA [m^2]
sideB_SA [float] Surface area of only sideB [m^2]
lateral_SA [float] Surface area of cylindrical section of tank [m^2]

2.10. Tank and Heat Exchanger Design (fluids.geometry) 287


Fluids Documentation, Release 1.0.21

Examples

Cylinder, Spheroid, Long Cones, and spheres. All checked.

>>> SA_tank(D=2, L=2)[0]


18.84955592153876
>>> SA_tank(D=1., L=0, sideA='ellipsoidal', sideA_a=2, sideB='ellipsoidal',
... sideB_a=2)[0]
10.124375616183062
>>> SA_tank(D=1., L=5, sideA='conical', sideA_a=2, sideB='conical',
... sideB_a=2)[0]
22.18452243965656
>>> SA_tank(D=1., L=5, sideA='spherical', sideA_a=0.5, sideB='spherical',
... sideB_a=0.5)[0]
18.84955592153876

fluids.geometry.SA_from_h(h, D, L, horizontal=True, sideA=None, sideB=None, sideA_a=0.0, sideB_a=0.0,


sideA_f=None, sideA_k=None, sideB_f=None, sideB_k=None)
Calculates partially full wetted surface area of a vertical or horizontal tank with different head types according
to [1].
Parameters
h [float] Height of the liquid in the tank, [m]
D [float] Diameter of the cylindrical section of the tank, [m]
L [float] Length of the main cylindrical section of the tank, [m]
horizontal [bool, optional] Whether or not the tank is a horizontal or vertical tank
sideA [string, optional] The left (or bottom for vertical) head of the tank’s type; one of [None,
‘conical’, ‘ellipsoidal’, ‘torispherical’, ‘guppy’, ‘spherical’].
sideB [string, optional] The right (or top for vertical) head of the tank’s type; one of [None,
‘conical’, ‘ellipsoidal’, ‘torispherical’, ‘guppy’, ‘spherical’].
sideA_a [float, optional] The distance the head as specified by sideA extends down or to the left
from the main cylindrical section, [m]
sideB_a [float, optional] The distance the head as specified by sideB extends up or to the right
from the main cylindrical section, [m]
sideA_f [float, optional] Dimensionless dish-radius parameter for side A; also commonly given
as the product of f and D (fD), which is called dish radius and has units of length, [-]
sideA_k [float, optional] Dimensionless knuckle-radius parameter for side A; also commonly
given as the product of k and D (kD), which is called the knuckle radius and has units of
length, [-]
sideB_f [float, optional] Dimensionless dish-radius parameter for side B; also commonly given
as the product of f and D (fD), which is called dish radius and has units of length, [-]
sideB_k [float, optional] Dimensionless knuckle-radius parameter for side B; also commonly
given as the product of k and D (kD), which is called the knuckle radius and has units of
length, [-]
Returns
SA [float] Wetted wall surface area up to h [m^3]

288 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

References

[1]

Examples

>>> SA_from_h(h=7, D=1.5, L=5., horizontal=False, sideA='conical',


... sideB='conical', sideA_a=2., sideB_a=1.)
28.59477853914843

class fluids.geometry.HelicalCoil(Dt, Do=None, pitch=None, H=None, N=None, H_total=None,


Do_total=None, Di=None)
Bases: object
Class representing a helical coiled tube, as are found in many heated tanks and some small nuclear reactors. All
parameters are also attributes.
One set of the following parameters is required; inner tube diameter is optional.
• Tube outer diameter, coil outer diameter, pitch, number of coil turns
• Tube outer diameter, coil outer diameter, pitch, height
• Tube outer diameter, coil outer diameter, number of coil turns, height

Parameters
Dt [float] Outer diameter of the tube wound to make up the helical spiral, [m]
Do [float] Diameter of the spiral as measured from the center of the coil on one side to the center
of the coil on the other side, [m]
Do_total [float, optional] Diameter of the spiral as measured from one edge of the tube to the
other edge; equal to Do + Dt; either Do or Do_total may be specified and the other will be
calculated [m]
pitch [float, optional] Height change from one coil to the next as measured from the middles of
the tube, [m]
H [float, optional] Height of the spiral, as measured from the middle of the bottom of the tube
to the middle of the top of the tube, [m]
H_total [float, optional] Height of the spiral as measured from one edge of the tube to the other
edge; equal to H_total + Dt; either may be specified and the other will be calculated [m]
N [float, optional] Number of coil turns; may be specified along with pitch instead of specifying
H or H_total, [-]
Di [float, optional] Inner diameter of the tube; if specified, inside and annulus properties will be
calculated, [m]

2.10. Tank and Heat Exchanger Design (fluids.geometry) 289


Fluids Documentation, Release 1.0.21

Notes

Do must be larger than Dt.

References

[1]

Examples

>>> C1 = HelicalCoil(Do=30, H=20, pitch=5, Dt=2)


>>> C1.N, C1.tube_length, C1.surface_area
(4.0, 377.5212621504738, 2372.0360474917497)

Same coil, with the inputs one would physically measure from the coil, and a specified inlet diameter:

>>> C1 = HelicalCoil(Do_total=32, H_total=22, pitch=5, Dt=2, Di=1.8)


>>> C1.N, C1.tube_length, C1.surface_area
(4.0, 377.5212621504738, 2372.0360474917497)
>>> C1.inner_surface_area, C1.inlet_area, C1.inner_volume, C1.total_volume, C1.
˓→annulus_volume

(2134.832442742575, 2.5446900494077327, 960.6745992341587, 1186.0180237458749, 225.


˓→3434245117162)

Attributes
tube_circumference [float] Circumference of the tube as measured though its center, not inner
or outer edges; 𝐶 = 𝜋𝐷𝑜 , [m]
tube_length [float] Length of tube used to make the helical coil; 𝐿 = (𝜋𝐷𝑜 · 𝑁 )2 + 𝐻 2 , [m]
√︀

surface_area [float] Surface area of the outer surface of the helical coil; 𝐴𝑡 = 𝜋𝐷𝑡 𝐿, [m^2]
inner_surface_area [float] Surface area of the inner surface of the helical coil; calculated if Di
is supplied; 𝐴𝑖𝑛𝑠𝑖𝑑𝑒 = 𝜋𝐷𝑖 𝐿, [m^2]
inlet_area [float] Area of the inlet to the helical coil; calculated if Di is supplied; 𝐴𝑖𝑛𝑙𝑒𝑡 = 4 𝐷𝑖 ,
𝜋 2

[m^2]
inner_volume [float] Volume of the tube as would be filled by a fluid, useful for weight calcu-
lations; calculated if Di is supplied; 𝑉𝑖𝑛𝑠𝑖𝑑𝑒 = 𝐴𝑖 𝐿, [m^3]
annulus_area [float] Area of the annulus (wall of the pipe); calculated if Di is supplied; 𝐴𝑎 =
4 (𝐷𝑡 − 𝐷𝑖 ), [m^2]
𝜋 2 2

annulus_volume [float] Volume of the annulus (wall of the pipe); calculated if Di is supplied,
useful for weight calculations; 𝑉𝑎 = 𝐴𝑎 𝐿, [m^3]
total_volume [float] Total volume occupied by the pipe and the fluid inside it; 𝑉 = 𝐷𝑡 𝐿, [m^3]
helix_angle(︁ [float]
)︁ Angle between the pitch and coil diameter; used in some calculations; 𝛼 =
arctan 𝜋𝐷 𝑝𝑡
𝑜
, [radians]

curvature [float] Coil curvature, useful in some calculations; 𝛿 = 𝐷𝑜 [1+4𝜋 2 tan2 (𝛼)] ,
𝐷𝑡
[-]

290 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

class fluids.geometry.PlateExchanger(amplitude, wavelength, chevron_angle=45, chevron_angles=None,


width=None, length=None, thickness=None, d_port=None,
plates=None)
Bases: object
Class representing a plate heat exchanger with sinusoidal ridges. All parameters are also attributes.
Parameters
amplitude [float] Half the height of the wave of the ridges, [m]
wavelength [float] Distance between the bottoms of two of the ridges (sometimes called pitch),
[m]
chevron_angle [float, optional] Angle of the plate corrugations with respect to the vertical axis
(the direction of flow if the plates were straight), between 0 and 90, [degrees]
chevron_angles [tuple(2), optional] Many plate exchangers use two alternating patterns; for
those cases provide tuple of the two angles for that situation and the argument chevron_angle
is ignored, [degrees]
width [float, optional] Width of the plates in the heat exchanger, between the gaskets, [m]
length [float, optional] Length of the heat exchanger as measured from one port to the other,
excluding the diameter of the ports themselves (little useful heat transfer happens there), [m]
thickness [float, optional] Thickness of the metal making up the plates, [m]
d_port [float, optional] The diameter of the ports in the plates, [m]
plates [int, optional] The number of plates in the heat exchanger, including the two not used for
heat transfer at the beginning and end [-]

Notes

Only wavelength and amplitude are required as inputs to this function.

References

[1]

Examples

>>> PlateExchanger(amplitude=5E-4, wavelength=3.7E-3, length=1.2, width=.3,


... d_port=.05, plates=51)
<Plate heat exchanger, amplitude=0.0005 m, wavelength=0.0037 m, chevron_angles=45/
˓→45 degrees, area enhancement factor=1.16119, width=0.3 m, length=1.2 m, port␣

˓→diameter=0.05 m, heat transfer area=20.4833 m^2, 51 plates>

Attributes
chevron_angles [tuple(2)] The two specified angles (repeated value if only one specified), [de-
grees]
chevron_angle [float] The averaged angle of the chevrons, [degrees]
inclination_angle [float] 90 - chevron_angle, used in many publications instead of
chevron_angle, [degrees]

2.10. Tank and Heat Exchanger Design (fluids.geometry) 291


Fluids Documentation, Release 1.0.21

plate_corrugation_aspect_ratio [float] The aspect ratio of the corrugations 𝛾 = 𝜆 ,


4𝑎
[-]
plate_enlargement_factor [float] The extra surface area multiplier as compared to a flat plate
caused the corrugations, [-]
D_eq [float] Equivalent diameter of the channels, 𝐷𝑒𝑞 = 4𝑎 [m]
D_hydraulic [float] Hydraulic diameter of the channels, 𝐷ℎ𝑦𝑑 = 4𝑎
𝜑 [m]
length_port [float] Port center to port center along the direction of flow, [m]
A_plate_surface [float] The surface area of one plate in the heat exchanger, including the extra
due to corrugations (excluding the bit between the ports), 𝐴𝑝 = 𝐿 · 𝑊 · 𝜑 [m^2]
A_heat_transfer [float] The total surface area available for heat transfer in the exchanger, the
multiple of A_plate_surface by the number of plates after removing the two on the edges,
[m^2]
A_channel_flow [float] The area for the fluid to flow in one channel, 𝑊 · 𝑏 [m^2]
channels [int] The number of plates minus one, [-]
channels_per_fluid [int] Half the number of total channels, [-]

property plate_exchanger_identifier
Method to create an identifying string in format ‘L’ + wavelength + ‘A’ + amplitude + ‘B’ + chevron angle-
chevron angle.
Wavelength and amplitude are specified in units of mm and rounded to two decimal places.
class fluids.geometry.AirCooledExchanger(tube_rows, tube_passes, tubes_per_row, tube_length,
tube_diameter, fin_thickness, angle=None, pitch=None,
pitch_parallel=None, pitch_normal=None, pitch_ratio=None,
fin_diameter=None, fin_height=None, fin_density=None,
fin_interval=None, parallel_bays=1, bundles_per_bay=1,
fans_per_bay=1, corbels=False, tube_thickness=None,
fan_diameter=None)
Bases: object
Class representing the geometry of an air cooled heat exchanger with one or more tube bays, fans, or bundles.
All parameters are also attributes.
The minimum information required to describe an air cooler is as follows:
• tube_rows
• tube_passes
• tubes_per_row
• tube_length
• tube_diameter
• fin_thickness
Two of angle, pitch, pitch_parallel, and pitch_normal (pitch_ratio may take the place of pitch)
Either fin_diameter or fin_height. Either fin_density or fin_interval.
Parameters
tube_rows [int] Number of tube rows per bundle, [-]
tube_passes [int] Number of tube passes (times the fluid travels across one tube length), [-]

292 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

tubes_per_row [float] Number of tubes per row per bundle, [-]


tube_length [float] Total length of the tube bundle tubes, [m]
tube_diameter [float] Diameter of the bare tube, [m]
fin_thickness [float] Thickness of the fins, [m]
angle [float, optional] Angle of the tube layout, [degrees]
pitch [float, optional] Shortest distance between tube centers; defined in relation to the flow
direction only, [m]
pitch_parallel [float, optional] Distance between tube center along a line parallel to the flow;
has been called longitudinal pitch, pp, s2, SL, and p2, [m]
pitch_normal [float, optional] Distance between tube centers in a line 90° to the line of flow;
has been called the transverse pitch, pn, s1, ST, and p1, [m]
pitch_ratio [float, optional] Ratio of the pitch to bare tube diameter, [-]
fin_diameter [float, optional] Outer diameter of each tube after including the fin on both sides,
[m]
fin_height [float, optional] Height above bare tube of the tube fins, [m]
fin_density [float, optional] Number of fins per meter of tube, [1/m]
fin_interval [float, optional] Space between each fin, including the thickness of one fin at its
base, [m]
parallel_bays [int, optional] Number of bays in the unit, [-]
bundles_per_bay [int, optional] Number of tube bundles per bay, [-]
fans_per_bay [int, optional] Number of fans per bay, [-]
corbels [bool, optional] Whether or not the air cooler has corbels, which increase the air velocity
by adding half a tube to the sides for the case of non-rectangular tube layouts, [-]
tube_thickness [float, optional] Thickness of the bare metal tubes, [m]
fan_diameter [float, optional] Diameter of air cooler fan, [m]

References

[1]

Examples

>>> AC = AirCooledExchanger(tube_rows=4, tube_passes=4, tubes_per_row=56, tube_


˓→length=10.9728,

... tube_diameter=1*inch, fin_thickness=0.013*inch, fin_density=10/inch,


... angle=30, pitch=2.5*inch, fin_height=0.625*inch, tube_thickness=0.00338,
... bundles_per_bay=2, parallel_bays=3, corbels=True)

Attributes
bare_length [float] Length of bare tube between two fins bare length = fin interval − 𝑡𝑓 𝑖𝑛 , [m]
tubes_per_bundle [float] Total number of tubes per bundle 𝑁𝑡𝑢𝑏𝑒𝑠/𝑏𝑢𝑛𝑑𝑙𝑒 = 𝑁𝑡𝑢𝑏𝑒𝑠/𝑟𝑜𝑤 ·
𝑁𝑟𝑜𝑤𝑠 , [-]

2.10. Tank and Heat Exchanger Design (fluids.geometry) 293


Fluids Documentation, Release 1.0.21

tubes_per_bay [float] Total number of tubes per bay 𝑁𝑡𝑢𝑏𝑒𝑠/𝑏𝑎𝑦 = 𝑁𝑡𝑢𝑏𝑒𝑠/𝑏𝑢𝑛𝑑𝑙𝑒 ·𝑁𝑏𝑢𝑛𝑑𝑙𝑒𝑠/𝑏𝑎𝑦 ,
[-]
tubes [float] Total number of tubes in all bundles in all bays combined 𝑁𝑡𝑢𝑏𝑒𝑠 = 𝑁𝑡𝑢𝑏𝑒𝑠/𝑏𝑎𝑦 ·
𝑁𝑏𝑎𝑦𝑠 , [-]
pitch_diagonal [float] Distance between tube centers in a diagonal line between one normal
[︁ (︀ )︀2 ]︁0.5
tube and one parallel tube; 𝑠𝐷 = 𝑠2𝐿 + 𝑠2𝑇 , [m]

A_bare_tube_per_tube [float] Area of the bare tube including the portion hidden by the fin per
tube 𝐴𝑏𝑎𝑟𝑒,𝑡𝑜𝑡𝑎𝑙/𝑡𝑢𝑏𝑒 = 𝜋𝐷𝑡𝑢𝑏𝑒 𝐿𝑡𝑢𝑏𝑒 , [m^2]
A_bare_tube_per_row [float] Area of the bare tube including the portion hidden by the fin per
tube row 𝐴𝑏𝑎𝑟𝑒,𝑡𝑜𝑡𝑎𝑙/𝑟𝑜𝑤 = 𝜋𝐷𝑡𝑢𝑏𝑒 𝐿𝑡𝑢𝑏𝑒 𝑁𝑡𝑢𝑏𝑒𝑠/𝑟𝑜𝑤 , [m^2]
A_bare_tube_per_bundle [float] Area of the bare tube including the portion hidden by the fin
per bundle 𝐴𝑏𝑎𝑟𝑒,𝑡𝑜𝑡𝑎𝑙/𝑏𝑢𝑛𝑑𝑙𝑒 = 𝜋𝐷𝑡𝑢𝑏𝑒 𝐿𝑡𝑢𝑏𝑒 𝑁𝑡𝑢𝑏𝑒𝑠/𝑏𝑢𝑛𝑑𝑙𝑒 , [m^2]
A_bare_tube_per_bay [float] Area of the bare tube including the portion hidden by the fin per
bay 𝐴𝑏𝑎𝑟𝑒,𝑡𝑜𝑡𝑎𝑙/𝑏𝑎𝑦 = 𝜋𝐷𝑡𝑢𝑏𝑒 𝐿𝑡𝑢𝑏𝑒 𝑁𝑡𝑢𝑏𝑒𝑠/𝑏𝑎𝑦 , [m^2]
A_bare_tube [float] Area of the bare tube including the portion hidden by the fin per in all
bundles and bays combined 𝐴𝑏𝑎𝑟𝑒,𝑡𝑜𝑡𝑎𝑙 = 𝜋𝐷𝑡𝑢𝑏𝑒 𝐿𝑡𝑢𝑏𝑒 𝑁𝑡𝑢𝑏𝑒𝑠 , [m^2]
A_tube_showing_per_tube [float] Area(︁ of the bare )︁ tube which is exposed per tube
𝑡𝑓 𝑖𝑛
𝐴𝑏𝑎𝑟𝑒,𝑠ℎ𝑜𝑤𝑖𝑛𝑔/𝑡𝑢𝑏𝑒 = 𝜋𝐷𝑡𝑢𝑏𝑒 𝐿𝑡𝑢𝑏𝑒 1 − fin interval , [m^2]

A_tube_showing_per_row [float] Area of the bare tube which is exposed per tube row, [m^2]
A_tube_showing_per_bundle [float] Area of the bare tube which is exposed per bundle, [m^2]
A_tube_showing_per_bay [float] Area of the bare tube which is exposed per bay, [m^2]
A_tube_showing [float] Area of the bare tube which is exposed in all bundles and bays com-
bined, [m^2]
A_per_fin [float] Surface area per fin 𝐴𝑓 𝑖𝑛 = 2 𝜋4 (𝐷𝑓2 𝑖𝑛 − 𝐷𝑡𝑢𝑏𝑒
2
) + 𝜋𝐷𝑓 𝑖𝑛 𝑡𝑓 𝑖𝑛 , [m^2]
A_fin_per_tube [float] Surface area of all fins per tube 𝐴𝑓 𝑖𝑛/𝑡𝑢𝑏𝑒 = 𝑁𝑓 𝑖𝑛𝑠/𝑚 𝐿𝑡𝑢𝑏𝑒 𝐴𝑓 𝑖𝑛 , [m^2]
A_fin_per_row [float] Surface area of all fins per row, [m^2]
A_fin_per_bundle [float] Surface area of all fins per bundle, [m^2]
A_fin_per_bay [float] Surface area of all fins per bay, [m^2]
A_fin [float] Surface area of all fins in all bundles and bays combined, [m^2]
A_per_tube [float] Surface area of combined finned and non-fined area exposed for heat transfer
per tube 𝐴𝑡𝑢𝑏𝑒 = 𝐴𝑏𝑎𝑟𝑒,𝑠ℎ𝑜𝑤𝑖𝑛𝑔/𝑡𝑢𝑏𝑒 + 𝐴𝑓 𝑖𝑛/𝑡𝑢𝑏𝑒 , [m^2]
A_per_row [float] Surface area of combined finned and non-finned area exposed for heat trans-
fer per tube row, [m^2]
A_per_bundle [float] Surface area of combined finned and non-finned area exposed for heat
transfer per tube bundle, [m^2]
A_per_bay [float] Surface area of combined finned and non-finned area exposed for heat transfer
per bay, [m^2]
A [float] Surface area of combined finned and non-finned area exposed for heat transfer in all
bundles and bays combined, [m^2]
A_increase [float] Ratio of actual surface area to bare tube surface area 𝐴𝑖𝑛𝑐𝑟𝑒𝑎𝑠𝑒 =
𝐴𝑏𝑎𝑟𝑒,𝑡𝑜𝑡𝑎𝑙/𝑡𝑢𝑏𝑒 , [-]
𝐴𝑡𝑢𝑏𝑒

294 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

A_tube_flow [float] The area for the fluid to flow in one tube, 𝜋/4 · 𝐷𝑖2 , [m^2]
channels [int] The number of tubes the fluid flows through at the inlet header, [-]
tube_volume_per_tube [float] Fluid volume per tube inside 𝑉𝑡𝑢𝑏𝑒,𝑓 𝑙𝑜𝑤 = 4 𝐷𝑖 𝐿𝑡𝑢𝑏𝑒 ,
𝜋 2
[m^3]
tube_volume_per_row [float] Fluid volume of tubes per row, [m^3]
tube_volume_per_bundle [float] Fluid volume of tubes per bundle, [m^3]
tube_volume_per_bay [float] Fluid volume of tubes per bay, [m^3]
tube_volume [float] Fluid volume of tubes in all bundles and bays combined, [m^3]
A_diagonal_per_bundle [float] Air flow area along the diagonal plane per bundle 𝐴𝑑 =
2𝑁𝑡𝑢𝑏𝑒𝑠/𝑟𝑜𝑤 𝐿𝑡𝑢𝑏𝑒 (𝑃𝑑 − 𝐷𝑡𝑢𝑏𝑒 − 2𝑁𝑓 𝑖𝑛𝑠/𝑚 ℎ𝑓 𝑖𝑛 𝑡𝑓 𝑖𝑛 ) + 𝐴extra,side , [m^2]
A_normal_per_bundle [float] Air flow area along the normal (transverse) plane; this is
normally the minimum flow area, except for some staggered configurations 𝐴𝑡 =
𝑁𝑡𝑢𝑏𝑒𝑠/𝑟𝑜𝑤 𝐿𝑡𝑢𝑏𝑒 (𝑃𝑡 − 𝐷𝑡𝑢𝑏𝑒 − 2𝑁𝑓 𝑖𝑛𝑠/𝑚 ℎ𝑓 𝑖𝑛 𝑡𝑓 𝑖𝑛 ) + 𝐴extra,side , [m^2]
A_min_per_bundle [float] Minimum air flow area per bundle; this is the characteristic area
for velocity calculation in most finned tube convection correlations 𝐴𝑚𝑖𝑛 = 𝑚𝑖𝑛(𝐴𝑑 , 𝐴𝑡 ),
[m^2]
A_min_per_bay [float] Minimum air flow area per bay, [m^2]
A_min [float] Minimum air flow area, [m^2]
A_face_per_bundle [float] Face area per bundle 𝐴𝑓 𝑎𝑐𝑒 = 𝑃𝑇 (1 + 𝑁𝑡𝑢𝑏𝑒𝑠/𝑟𝑜𝑤 )𝐿𝑡𝑢𝑏𝑒 ; if corbels
are used, add 0.5 to tubes/row instead of 1, [m^2]
A_face_per_bay [float] Face area per bay, [m^2]
A_face [float] Total face area, [m^2]
flow_area_contraction_ratio [float] Ratio of A_min to A_face, [-]

class fluids.geometry.HyperbolicCoolingTower(H_inlet, D_outlet, H_outlet, D_inlet=None,


D_base=None, D_throat=None, H_throat=None,
H_support=None, D_support=None, n_support=None,
inlet_rounding=None)
Bases: object
Class representing the geometry of a hyperbolic cooling tower, as used in many industries especially the poewr
industry. All parameters are also attributes.
H_inlet, D_outlet, and H_outlet are always required. Additionally, one set of the following parameters is required;
H_support, D_support, n_support, and inlet_rounding are all optional as well.
• Inlet diameter
• Inlet diameter and throat diameter
• Inlet diameter and throat height
• Inlet diameter, throat diameter, and throat height
• Base diameter, throat diameter, and throat height
If the inlet diameter is provided but the throat diameter and/or the throat height are missing, two heuristics are
used to estimate them (to avoid these heuristics simply specify the values):
• Assume the throat elevation is 2/3 the elevation of the tower.
• Assume the throat diameter is 63% the diameter of the inlet.

2.10. Tank and Heat Exchanger Design (fluids.geometry) 295


Fluids Documentation, Release 1.0.21

Parameters
H_inlet [float] Height of the inlet zone of the cooling tower (also called rain zone), [m]
D_outlet [float] The inside diameter of the cooling tower outlet (top of the tower; the elevation
the concrete section ends), [m]
H_outlet [float] The height of the cooling tower outlet (top of the tower;the elevation the con-
crete section ends), [m]
D_inlet [float, optional] The inside diameter of the cooling tower inlet at the elevation the con-
crete section begins, [m]
D_base [float, optional] The diameter of the cooling tower at the very base of the tower (the
bottom of the inlet zone, at the elevation of the ground), [m]
D_throat [float, optional] The diameter of the cooling tower at its minimum section, called its
throat; where the two hyperbolas meet, [m]
h_throat [float, optional] The elevation of the cooling tower’s throat (its minimum section;
where the two hyperbolas meet), [m]
inlet_rounding [float, optional] Radius of an optional rounded protrusion from the lip of the
cooling tower shell base, which curves upwards from the lip (used to reduce the dead zone
area rather than having a flat lip), [m]
H_support [float, optional] The height of each support column, [m]
D_support [float, optional] The diameter of each support column, [m]
n_support [int, optional] The number of support columns of the cooling tower, [m]

Notes

Note there are two hyperbolas in a hyperbolic cooling tower - one under the throat and one above it; they are not
necessarily the same.
A hyperbolic cooling tower is not the absolute optimal design, but is is close. The optimality is determined by the
amount of material required to build it while maintaining its rigidity. For thermal design purposes, a hyperbolic
model covers any minor variation quite well.

References

[1], [2]

Examples

>>> ct = HyperbolicCoolingTower(D_outlet=89.0, H_outlet=200, D_inlet=136.18, H_


˓→inlet=14.5)

>>> ct
<Hyperbolic cooling tower, inlet diameter=136.18 m, outlet diameter=89 m, inlet␣
˓→height=14.5 m, outlet height=200 m, throat diameter=85.7934 m, throat height=133.

˓→333 m, base diameter=146.427 m>

>>> ct.diameter(5)
142.84514486126062

Attributes

296 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

b_lower [float] The b parameter in the hyperbolic equation for the lower section of the cooling
tower, [m]
b_upper [float] The b parameter in the hyperbolic equation for the upper section of the cooling
tower, [m]

Methods

diameter(H) Calculates cooling tower diameter at a specified


height, using the formulas for either hyperbola, de-
pending on the height specified.

plot

diameter(H)
Calculates cooling tower diameter at a specified height, using the formulas for either hyperbola, depending
on the height specified.

𝐻 2 + 𝑏2
𝐷 = 𝐷𝑡ℎ𝑟𝑜𝑎𝑡
𝑏
The value of H and b used in the above equation is as follows:
• H_throat - H and b_lower if under the throat
• H - H_throat and b_upper, if above the throat

Parameters
H [float] Height at which to calculate the cooling tower diameter, [m]
Returns
D [float] Diameter of the cooling tower at the specified height, [m]

plot(pts=100)

class fluids.geometry.RectangularFinExchanger(fin_height, fin_thickness, fin_spacing, length=None,


width=None, layers=None, plate_thickness=None,
flow='crossflow')
Bases: object
Class representing a plate-fin heat exchanger with straight rectangular fins. All parameters are also attributes.
Parameters
fin_height [float] The total distance between the two metal plates sandwiching the fins and hold-
ing them together (abbreviated h), [m]
fin_thickness [float] The thickness of the material the fins were formed from (abbreviated t),
[m]
fin_spacing [float] The unit cell spacing from one fin to the next; the space between the sides of
two fins plus one thickness (abbreviated s), [m]
length [float, optional] The total length of the flow passage of the plate-fin exchanger (abbrevi-
ated L), [m]

2.10. Tank and Heat Exchanger Design (fluids.geometry) 297


Fluids Documentation, Release 1.0.21

width [float, optional] The total width of the space the fins are in; this is also 𝑁𝑓 𝑖𝑛𝑠 × 𝑠 (abbre-
viated W ), [m]
layers [int, optional] The number of layers in the plate-fin exchanger; note these HX almost
always single-pass only, [-]
plate_thickness [float, optional] The thickness of the metal separator between layers, [m]
flow [str, optional] One of ‘counterflow’, ‘crossflow’, or ‘parallelflow’

Notes

The only required parameters are the fin geometry itself; fin_height, fin_thickness, and fin_spacing.

References

[1], [2]

Examples

>>> PFE = RectangularFinExchanger(0.03, 0.001, 0.012)


>>> PFE.Dh
0.01595

Attributes
channel_height [float] The height of the channel the fluid flows in channel height =
fin height − fin thickness, [m]
channel_width [float] The width of the channel the fluid flows in channel width = fin spacing−
fin thickness, [m]
fin_count [int] The number of fins per unit length of the layer, fin count = fin spacing ,
1
[1/m]
blockage_ratio [float] The fraction of the layer which is blocked to flow by the fins,
blockage ratio = 𝑠·ℎ−𝑠·𝑡−𝑡(ℎ−𝑡)
𝑠·ℎ , [m]
A_channel [float] Flow area of a single channel in a single layer, channel area = (𝑠 − 𝑡)(ℎ − 𝑡),
[m]
P_channel [float] Wetted perimeter of a single channel in a single layer, channel perimeter =
2(𝑠 − 𝑡) + 2(ℎ − 𝑡), [m]
Dh [float] Hydraulic diameter of a single channel in a single layer, 𝐷ℎ𝑦𝑑𝑟𝑎𝑢𝑙𝑖𝑐 = 𝑃𝑐ℎ𝑎𝑛𝑛𝑒𝑙 ,
4𝐴𝑐ℎ𝑎𝑛𝑛𝑒𝑙
[m]
layer_thickness [float] The thickness of a single layer - the sum of a fin height and a plate thick-
ness, [m]
layer_fin_count [int] The number of fins in a layer; rounded to the nearest whole fin, [-]
A_HX_layer [float] The surface area including fins for heat transfer in one layer of the HX,
[m^2]
A_HX [float] The total surface area of the heat exchanger with all layers combined, [m^2]
height [float] The height of all the layers of the heat exchanger combined, plus one extra plate
thickness, [m]
volume [float] The product of the height, width, and length of the HX, [m^3]

298 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

A_specific_HX [float] The specific surface area of the heat exchanger - square meters per meter
cubed, [m^3]

Methods

set_overall_geometry

set_overall_geometry()

class fluids.geometry.RectangularOffsetStripFinExchanger(fin_length, fin_height, fin_thickness,


fin_spacing, length=None, width=None,
layers=None, plate_thickness=None,
flow='crossflow')
Bases: fluids.geometry.RectangularFinExchanger

Methods

set_overall_geometry

2.10.2 Tank Volume Functions

fluids.geometry.V_partial_sphere(D, h)
Calculates volume of a partial sphere according to [1]. If h is half of D, the shape is half a sphere. No bottom is
considered in this function. Valid inputs are positive values of D and h, with h always smaller or equal to D.
√︀
𝑎= ℎ(2𝑟 − ℎ)

𝑉 = 1/6𝜋ℎ(3𝑎2 + ℎ2 )
Parameters
D [float] Diameter of the sphere, [m]
h [float] Height, as measured up to where the sphere is cut off, [m]
Returns
V [float] Volume [m^3]

References

[1]

2.10. Tank and Heat Exchanger Design (fluids.geometry) 299


Fluids Documentation, Release 1.0.21

Examples

>>> V_partial_sphere(1., 0.7)


0.4105014400690663

fluids.geometry.V_horiz_conical(D, L, a, h, headonly=False)
Calculates volume of a tank with conical ends, according to [1].

2𝑎𝑅2
𝑉𝑓 = 𝐴𝑓 𝐿 + 𝐾, 0 ≤ ℎ < 𝑅
3
2𝑎𝑅2
𝑉𝑓 = 𝐴𝑓 𝐿 + 𝜋/2, ℎ = 𝑅
3
2𝑎𝑅2
𝑉𝑓 = 𝐴𝑓 𝐿 + (𝜋 − 𝐾), 𝑅 < ℎ ≤ 2𝑅
3
1 √︀
𝐾 = cos−1 𝑀 + 𝑀 3 cosh−1 − 2𝑀 1 − 𝑀 2
𝑀
⃒ ⃒
⃒𝑅 − ℎ⃒
𝑀 =⃒ ⃒ ⃒
𝑅 ⃒
𝑅−ℎ √︀
𝐴𝑓 = 𝑅2 cos−1 − (𝑅 − ℎ) 2𝑅ℎ − ℎ2
𝑅
Parameters
D [float] Diameter of the main cylindrical section, [m]
L [float] Length of the main cylindrical section, [m]
a [float] Distance the cone head extends on one side, [m]
h [float] Height, as measured up to where the fluid ends, [m]
headonly [bool, optional] Function returns only the volume of a single head side if True
Returns
V [float] Volume [m^3]

References

[1]

Examples

Matching example from [1], with inputs in inches and volume in gallons.

>>> V_horiz_conical(D=108., L=156., a=42., h=36)/231


2041.1923581273443

fluids.geometry.V_horiz_ellipsoidal(D, L, a, h, headonly=False)
Calculates volume of a tank with ellipsoidal ends, according to [1].
(︂ )︂
2 ℎ
𝑉𝑓 = 𝐴𝑓 𝐿 + 𝜋𝑎ℎ 1 −
3𝑅

𝑅−ℎ √︀
𝐴𝑓 = 𝑅2 cos−1 − (𝑅 − ℎ) 2𝑅ℎ − ℎ2
𝑅

300 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

Parameters
D [float] Diameter of the main cylindrical section, [m]
L [float] Length of the main cylindrical section, [m]
a [float] Distance the ellipsoidal head extends on one side, [m]
h [float] Height, as measured up to where the fluid ends, [m]
headonly [bool, optional] Function returns only the volume of a single head side if True
Returns
V [float] Volume [m^3]

References

[1]

Examples

Matching example from [1], with inputs in inches and volume in gallons.

>>> V_horiz_ellipsoidal(D=108, L=156, a=42, h=36)/231.


2380.9565415578145

fluids.geometry.V_horiz_guppy(D, L, a, h, headonly=False)
Calculates volume of a tank with guppy heads, according to [1].

2𝑎𝑅2
(︂ )︂
−1 ℎ 2𝑎 √︀
𝑉𝑓 = 𝐴𝑓 𝐿 + cos 1− + 2𝑅ℎ − ℎ2 (2ℎ − 3𝑅)(ℎ + 𝑅)
3 𝑅 9𝑅

𝑅−ℎ √︀
𝐴𝑓 = 𝑅2 cos−1 − (𝑅 − ℎ) 2𝑅ℎ − ℎ2
𝑅
Parameters
D [float] Diameter of the main cylindrical section, [m]
L [float] Length of the main cylindrical section, [m]
a [float] Distance the guppy head extends on one side, [m]
h [float] Height, as measured up to where the fluid ends, [m]
headonly [bool, optional] Function returns only the volume of a single head side if True
Returns
V [float] Volume [m^3]

2.10. Tank and Heat Exchanger Design (fluids.geometry) 301


Fluids Documentation, Release 1.0.21

References

[1]

Examples

Matching example from [1], with inputs in inches and volume in gallons.

>>> V_horiz_guppy(D=108., L=156., a=42., h=36)/231.


1931.7208029476762

fluids.geometry.V_horiz_spherical(D, L, a, h, headonly=False)
Calculates volume of a tank with spherical heads, according to [1].
𝜋𝑎
𝑉 𝑓 = 𝐴𝑓 𝐿 + (3𝑅2 + 𝑎2 ), ℎ = 𝑅, |𝑎| ≤ 𝑅
6
𝜋𝑎
𝑉 𝑓 = 𝐴𝑓 𝐿 + (3𝑅2 + 𝑎2 ), ℎ = 𝐷, |𝑎| ≤ 𝑅
3
(︂ )︂

2
𝑉𝑓 = 𝐴𝑓 𝐿 + 𝜋𝑎ℎ 1 − , ℎ = 0, or |𝑎| = 0, 𝑅, −𝑅
3𝑅
{︃ [︃ (︃ (︂ )︂2 )︃ ]︃
𝑎 2𝑟3 2 2
𝑤3
(︂ )︂
−1 𝑅 − 𝑟𝑤 −1 𝑅 + 𝑟𝑤 𝑧 𝑅 −1 𝑤 𝑦 4𝑤
𝑉𝑓 = 𝐴𝑓 𝐿 + cos + cos − 2+ cos − 2 𝑤𝑟2 − tan−1 +
|𝑎| 3 𝑅(𝑤 − 𝑟) 𝑅(𝑤 + 𝑟) 𝑟 𝑟 𝑅 3 𝑧 3
[︃ ∫︁ √︂ ]︃
𝑅
𝑎 2 2 −1 𝑅 2 − 𝑥2
𝑉 𝑓 = 𝐴𝑓 𝐿 + 2 (𝑟 − 𝑥 ) tan 𝑑𝑥 − 𝐴𝑓 𝑧 , ℎ ̸= 𝑅, 𝐷; 𝑎 ̸= 0, 𝑅, −𝑅, |𝑎| < 0.01𝐷
|𝑎| 𝑤 𝑟 2 − 𝑅2
𝑅−ℎ √︀
𝐴𝑓 = 𝑅2 cos−1 − (𝑅 − ℎ) 2𝑅ℎ − ℎ2
𝑅
𝑎2 + 𝑅2
𝑟=
2|𝑎|
𝑤 =𝑅−ℎ
√︀
𝑦 = 2𝑅ℎ − ℎ2
√︀
𝑧 = 𝑟 2 − 𝑅2
Parameters
D [float] Diameter of the main cylindrical section, [m]
L [float] Length of the main cylindrical section, [m]
a [float] Distance the spherical head extends on one side, [m]
h [float] Height, as measured up to where the fluid ends, [m]
headonly [bool, optional] Function returns only the volume of a single head side if True
Returns
V [float] Volume [m^3]

302 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

References

[1]

Examples

Matching example from [1], with inputs in inches and volume in gallons.

>>> V_horiz_spherical(D=108., L=156., a=42., h=36)/231.


2303.9615116986183

fluids.geometry.V_horiz_torispherical(D, L, f, k, h, headonly=False)
Calculates volume of a tank with torispherical heads, according to [1].

𝑉𝑓 = 𝐴𝑓 𝐿 + 2𝑉1 , 0 ≤ ℎ ≤ ℎ1
𝑉𝑓 = 𝐴𝑓 𝐿 + 2(𝑉1,𝑚𝑎𝑥 + 𝑉2 + 𝑉3 ), ℎ1 < ℎ < ℎ2
𝑉𝑓 = 𝐴𝑓 𝐿 + 2[2𝑉1,𝑚𝑎𝑥 − 𝑉1 (ℎ = 𝐷 − ℎ) + 𝑉2,𝑚𝑎𝑥 + 𝑉3,𝑚𝑎𝑥 ], ℎ2 ≤ ℎ ≤ 𝐷

2𝑘𝐷ℎ−ℎ2
[︃ √ ]︃
𝑛2 − 𝑤 2
∫︁ √︀
2 −1
𝑉1 = 𝑛 sin − 𝑤 𝑛2 − 𝑤2 𝑑𝑥
0 𝑛
∫︁ 𝑘𝐷 cos 𝛼 (︁ [︁ 𝑤 𝑔 )︁ √︀ √︀ ]︁
𝑉2 = 𝑛2 cos−1 − cos−1 − 𝑤 𝑛2 − 𝑤2 + 𝑔 𝑛2 − 𝑔 2 𝑑𝑥
0 𝑛 𝑛
∫︁ 𝑔 √︀
𝑔 2 − 𝑥2
(︂ )︂
𝑧 𝑤 √︀
𝑉3 = (𝑟2 − 𝑥2 ) tan−1 𝑑𝑥 − 𝑔 2 cos−1 − 𝑤 2𝑔(ℎ − ℎ1 ) − (ℎ − ℎ1 )2
𝑤 𝑧 2 𝑔
𝑉1,𝑚𝑎𝑥 = 𝑣1 (ℎ = ℎ1 )

𝑣2,𝑚𝑎𝑥 = 𝑣2 (ℎ = ℎ2 )
𝜋𝑎1
𝑣3,𝑚𝑎𝑥 = (3𝑔 2 + 𝑎21 )
6
𝑎1 = 𝑓 𝐷(1 − cos 𝛼)
1 − 2𝑘
𝛼 = sin−1
2(𝑓 − 𝑘)
√︀
𝑛 = 𝑅 − 𝑘𝐷 + 𝑘 2 𝐷2 − 𝑥2
𝑔 = 𝑟 sin 𝛼

𝑟 = 𝑓𝐷

ℎ2 = 𝐷 − ℎ1

𝑤 =𝑅−ℎ
√︀
𝑧 = 𝑟2 − 𝑔2
Parameters
D [float] Diameter of the main cylindrical section, [m]
L [float] Length of the main cylindrical section, [m]
f [float] Dimensionless dish-radius parameter; also commonly given as the product of f and D
(fD), which is called both dish radius and also crown radius and has units of length, [-]

2.10. Tank and Heat Exchanger Design (fluids.geometry) 303


Fluids Documentation, Release 1.0.21

k [float] Dimensionless knuckle-radius parameter; also commonly given as the product of k and
D (kD), which is called the knuckle radius and has units of length, [-]
h [float] Height, as measured up to where the fluid ends, [m]
headonly [bool, optional] Function returns only the volume of a single head side if True
Returns
V [float] Volume [m^3]

References

[1]

Examples

Matching example from [1], with inputs in inches and volume in gallons.

>>> V_horiz_torispherical(D=108., L=156., f=1., k=0.06, h=36)/231.


2028.62667

fluids.geometry.V_vertical_conical(D, a, h)
Calculates volume of a vertical tank with a convex conical bottom, according to [1]. No provision for the top of
the tank is made here.
(︂ )︂2 (︂ )︂
𝜋 𝐷ℎ ℎ
𝑉𝑓 = , ℎ<𝑎
4 𝑎 3

𝜋𝐷2
(︂ )︂
2𝑎
𝑉𝑓 = ℎ− , ℎ≥𝑎
4 3
Parameters
D [float] Diameter of the main cylindrical section, [m]
a [float] Distance the cone head extends under the main cylinder, [m]
h [float] Height, as measured up to where the fluid ends, [m]
Returns
V [float] Volume [m^3]

References

[1]

Examples

Matching example from [1], with inputs in inches and volume in gallons.

>>> V_vertical_conical(132., 33., 24)/231.


250.67461381371024

304 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

fluids.geometry.V_vertical_ellipsoidal(D, a, h)
Calculates volume of a vertical tank with a convex ellipsoidal bottom, according to [1]. No provision for the top
of the tank is made here.
(︂ )︂2 (︂ )︂
𝜋 𝐷ℎ ℎ
𝑉𝑓 = 𝑎− , ℎ<𝑎
4 𝑎 3

𝜋𝐷2 (︁ 𝑎 )︁
𝑉𝑓 = ℎ− , ℎ≥𝑎
4 3
Parameters
D [float] Diameter of the main cylindrical section, [m]
a [float] Distance the ellipsoid head extends under the main cylinder, [m]
h [float] Height, as measured up to where the fluid ends, [m]
Returns
V [float] Volume [m^3]

References

[1]

Examples

Matching example from [1], with inputs in inches and volume in gallons.

>>> V_vertical_ellipsoidal(132., 33., 24)/231.


783.3581681678445

fluids.geometry.V_vertical_spherical(D, a, h)
Calculates volume of a vertical tank with a convex spherical bottom, according to [1]. No provision for the top
of the tank is made here.
𝜋ℎ2 𝐷2
(︂ )︂
4ℎ
𝑉𝑓 = 2𝑎 + − , ℎ<𝑎
4 2𝑎 3

𝜋 2𝑎3 𝑎𝐷2
(︂ )︂
2
𝑉𝑓 = − + ℎ𝐷 , ℎ ≥ 𝑎
4 3 2
Parameters
D [float] Diameter of the main cylindrical section, [m]
a [float] Distance the spherical head extends under the main cylinder, [m]
h [float] Height, as measured up to where the fluid ends, [m]
Returns
V [float] Volume [m^3]

2.10. Tank and Heat Exchanger Design (fluids.geometry) 305


Fluids Documentation, Release 1.0.21

References

[1]

Examples

Matching example from [1], with inputs in inches and volume in gallons.

>>> V_vertical_spherical(132., 33., 24)/231.


583.6018352850442

fluids.geometry.V_vertical_torispherical(D, f, k, h)
Calculates volume of a vertical tank with a convex torispherical bottom, according to [1]. No provision for the
top of the tank is made here.

𝜋ℎ2 𝐷12
(︂ )︂
4ℎ
𝑉𝑓 = 2𝑎1 + − , 0 ≤ ℎ ≤ 𝑎1
4 2𝑎1 3
[︃(︂ )︂2 ]︃ √
𝜋 2𝑎31 𝑎1 𝐷12 𝜋𝑡𝑢2 𝜋𝑢3 𝑡 𝑠 𝑘2 𝐷2
(︂ )︂ [︂ (︂
𝐷 2𝑢 − 𝑡 √︀ 2
𝑉𝑓 = + + 𝜋𝑢 − 𝑘𝐷 + 𝑠 + − + 𝜋𝐷(1 − 2𝑘) 𝑠 + 𝑡𝑢 − 𝑢 + + c
4 3 2 2 2 3 4 4 2
[︃(︂ )︂2 ]︃ [︂ √
𝜋 2𝑎31 𝑎1 𝐷12 𝜋𝑡3 𝑡 𝑠 𝑘2 𝐷2 𝜋𝐷2
(︂ )︂ ]︂
𝜋𝑡 𝐷
𝑉𝑓 = + + − 𝑘𝐷 + 𝑠 + + 𝜋𝐷(1 − 2𝑘) + sin−1 (cos 𝛼) + [ℎ − (𝑎1 + 𝑎2
4 3 2 2 2 12 4 2 4
1 − 2𝑘
𝛼 = sin−1
2(𝑓 − 𝑘)
𝑎1 = 𝑓 𝐷(1 − cos 𝛼)

𝑎2 = 𝑘𝐷 cos 𝛼

𝐷1 = 2𝑓 𝐷 sin 𝛼

𝑠 = (𝑘𝐷 sin 𝛼)2

𝑡 = 2𝑎2

𝑢 = ℎ − 𝑓 𝐷(1 − cos 𝛼)
Parameters
D [float] Diameter of the main cylindrical section, [m]
f [float] Dimensionless dish-radius parameter; also commonly given as the product of f and D
(fD), which is called dish radius and has units of length, [-]
k [float] Dimensionless knuckle-radius parameter; also commonly given as the product of k and
D (kD), which is called the knuckle radius and has units of length, [-]
h [float] Height, as measured up to where the fluid ends, [m]
Returns
V [float] Volume [m^3]

306 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

References

[1]

Examples

Matching example from [1], with inputs in inches and volume in gallons.

>>> V_vertical_torispherical(D=132., f=1.0, k=0.06, h=24)/231.


904.0688283793

fluids.geometry.V_vertical_conical_concave(D, a, h)
Calculates volume of a vertical tank with a concave conical bottom, according to [1]. No provision for the top of
the tank is made here.
𝜋𝐷2 (𝑎 + ℎ)3
(︂ )︂
𝑉 = 3ℎ + 𝑎 − , 0 ≤ ℎ < |𝑎|
12 𝑎2

𝜋𝐷2
𝑉 = (3ℎ + 𝑎), ℎ ≥ |𝑎|
12
Parameters
D [float] Diameter of the main cylindrical section, [m]
a [float] Negative distance the cone head extends inside the main cylinder, [m]
h [float] Height, as measured up to where the fluid ends, [m]
Returns
V [float] Volume [m^3]

References

[1]

Examples

Matching example from [1], with inputs in inches and volume in gallons.

>>> V_vertical_conical_concave(D=113., a=-33, h=15)/231


251.15825565795188

fluids.geometry.V_vertical_ellipsoidal_concave(D, a, h)
Calculates volume of a vertical tank with a concave ellipsoidal bottom, according to [1]. No provision for the
top of the tank is made here.

𝜋𝐷2 (𝑎 + ℎ)2 (2𝑎 − ℎ)


(︂ )︂
𝑉 = 3ℎ + 2𝑎 − , 0 ≤ ℎ < |𝑎|
12 𝑎2

𝜋𝐷2
𝑉 = (3ℎ + 2𝑎), ℎ ≥ |𝑎|
12
Parameters
D [float] Diameter of the main cylindrical section, [m]

2.10. Tank and Heat Exchanger Design (fluids.geometry) 307


Fluids Documentation, Release 1.0.21

a [float] Negative distance the eppilsoid head extends inside the main cylinder, [m]
h [float] Height, as measured up to where the fluid ends, [m]
Returns
V [float] Volume [m^3]

References

[1]

Examples

Matching example from [1], with inputs in inches and volume in gallons.

>>> V_vertical_ellipsoidal_concave(D=113., a=-33, h=15)/231


44.84968851034856

fluids.geometry.V_vertical_spherical_concave(D, a, h)
Calculates volume of a vertical tank with a concave spherical bottom, according to [1]. No provision for the top
of the tank is made here.
3𝐷2 + 12𝑎2
[︂ (︂ )︂]︂
𝜋 𝑎
𝑉 = 3𝐷2 ℎ + (3𝐷2 + 4𝑎2 ) + (𝑎 + ℎ)3 4 − , 0 ≤ ℎ < |𝑎|
12 2 2𝑎(𝑎 + ℎ)
𝜋 [︁ 2 𝑎 ]︁
𝑉 = 3𝐷 ℎ + (3𝐷2 + 4𝑎2 ) , ℎ ≥ |𝑎|
12 2
Parameters
D [float] Diameter of the main cylindrical section, [m]
a [float] Negative distance the spherical head extends inside the main cylinder, [m]
h [float] Height, as measured up to where the fluid ends, [m]
Returns
V [float] Volume [m^3]

References

[1]

Examples

Matching example from [1], with inputs in inches and volume in gallons.

>>> V_vertical_spherical_concave(D=113., a=-33, h=15)/231


112.81405437348528

fluids.geometry.V_vertical_torispherical_concave(D, f, k, h)
Calculates volume of a vertical tank with a concave torispherical bottom, according to [1]. No provision for the
top of the tank is made here.

𝜋𝐷2 ℎ
𝑉 = − 𝑣1 (ℎ = 𝑎1 + 𝑎2 ) + 𝑣1 (ℎ = 𝑎1 + 𝑎2 − ℎ), 0 ≤ ℎ < 𝑎2
4

308 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

𝜋𝐷2 ℎ
𝑉 = − 𝑣1 (ℎ = 𝑎1 + 𝑎2 ) + 𝑣2 (ℎ = 𝑎1 + 𝑎2 − ℎ), 𝑎2 ≤ ℎ < 𝑎1 + 𝑎2
4
𝜋𝐷2 ℎ
𝑉 = − 𝑣1 (ℎ = 𝑎1 + 𝑎2 ) + 0, ℎ ≥ 𝑎1 + 𝑎2
4
[︃(︂ )︂2 ]︃ √
2𝑎31 𝑎1 𝐷12 𝜋𝑡𝑢2 𝜋𝑢3 𝑡 𝑠 𝑘2 𝐷2
(︂ )︂ [︂ (︂
𝜋 𝐷 2𝑢 − 𝑡 √︀
𝑣1 = + + 𝜋𝑢 − 𝑘𝐷 + 𝑠 + − + 𝜋𝐷(1 − 2𝑘) 𝑠 + 𝑡𝑢 − 𝑢2 + + c
4 3 2 2 2 3 4 4 2

𝜋ℎ2 𝐷12
(︂ )︂
4ℎ
𝑣2 = 2𝑎1 + −
4 2𝑎1 3
1 − 2𝑘
𝛼 = sin−1
2(𝑓 − 𝑘)
𝑎1 = 𝑓 𝐷(1 − cos 𝛼)

𝑎2 = 𝑘𝐷 cos 𝛼

𝐷1 = 2𝑓 𝐷 sin 𝛼

𝑠 = (𝑘𝐷 sin 𝛼)2

𝑡 = 2𝑎2

𝑢 = ℎ − 𝑓 𝐷(1 − cos 𝛼)
Parameters
D [float] Diameter of the main cylindrical section, [m]
f [float] Dimensionless dish-radius parameter; also commonly given as the product of f and D
(fD), which is called dish radius and has units of length, [-]
k [float] Dimensionless knuckle-radius parameter; also commonly given as the product of k and
D (kD), which is called the knuckle radius and has units of length, [-]
h [float] Height, as measured up to where the fluid ends, [m]
Returns
V [float] Volume [m^3]

References

[1]

Examples

Matching example from [1], with inputs in inches and volume in gallons.

>>> V_vertical_torispherical_concave(D=113., f=0.71, k=0.081, h=15)/231


103.88569287163769

2.10. Tank and Heat Exchanger Design (fluids.geometry) 309


Fluids Documentation, Release 1.0.21

2.10.3 Tank Surface Area Functions

fluids.geometry.SA_partial_sphere(D, h)
Calculates surface area of a partial sphere according to [1]. If h is half of D, the shape is half a sphere. No bottom
is considered in this function. Valid inputs are positive values of D and h, with h always smaller or equal to D.
√︀
𝑎= ℎ(2𝑟 − ℎ)

𝐴 = 𝜋(𝑎2 + ℎ2 )
Parameters
D [float] Diameter of the sphere, [m]
h [float] Height, as measured from the cap to where the sphere is cut off [m]
Returns
SA [float] Surface area [m^2]

References

[1]

Examples

>>> SA_partial_sphere(1., 0.7)


2.199114857512855

fluids.geometry.SA_ellipsoidal_head(D, a)
Calculates the surface area of an ellipsoidal head according to [1] and [2]. The formula below is for the full
shape, the result of which is halved. The formula is for 𝑎 < 𝑅. In the equations, a is the same and c is D.

𝜋𝑐2
(︂ )︂
1 + 𝑒1
SA = 2𝜋𝑎2 + ln
𝑒1 1 − 𝑒1
√︂
𝑐2
𝑒1 = 1 − 2
𝑎
For the case of 𝑎 ≥ 𝑅 from [2], which is needed to make the tank head volume grow linearly with length:

2𝜋𝑎2 𝑅 𝑅
SA = 2𝜋𝑅2 + √ cos−1
2
𝑎 −𝑅 2 |𝑎|

Parameters
D [float] Diameter of the main cylindrical section, [m]
a [float] Distance the ellipsoidal head extends, [m]
Returns
SA [float] Surface area [m^2]

310 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

References

[1], [2]

Examples

Spherical case

>>> SA_ellipsoidal_head(2, 1)
6.283185307179586
>>> SA_ellipsoidal_head(2, 1.5)
8.459109081729984

fluids.geometry.SA_conical_head(D, a)
Calculates the surface area of a conical head according to [1].
√︃ (︂ )︂2
𝜋𝐷 2
𝐷
𝑆𝐴 = 𝑎 +
2 2

Parameters
D [float] Diameter of the main cylindrical section, [m]
a [float] Distance the conical head extends, [m]
Returns
SA [float] Surface area [m^2]

References

[1]

Examples

>>> SA_conical_head(2, 1)
4.442882938158366

fluids.geometry.SA_guppy_head(D, a)
Calculates the surface area of a guppy head according to [1]. Some work was involved in combining formulas
for the ellipse of the head, and the conic section on the sides.

𝜋𝐷 √︀ 2 𝜋𝐷
𝑆𝐴 = 𝐷 + 𝑎2 + 𝑎
4 2
Parameters
D [float] Diameter of the main cylindrical section, [m]
a [float] Distance the conical head extends, [m]
Returns
SA [float] Surface area [m^2]

2.10. Tank and Heat Exchanger Design (fluids.geometry) 311


Fluids Documentation, Release 1.0.21

References

[1]

Examples

>>> SA_guppy_head(2, 1)
6.654000019110157

fluids.geometry.SA_torispheroidal(D, f, k)
Calculates surface area of a torispherical head according to [1]. Somewhat involved. Equations are adapted to
be used for a full head.

𝑆𝐴 = 𝑆1 + 𝑆2

𝑆1 = 2𝜋𝐷2 𝑓𝑑 𝛼
(︂ (︂ (︂ )︂ (︂ )︂)︂)︂
𝛼 − 𝛼2 𝛼1 − 𝛼2
𝑆2 = 2𝜋𝐷2 𝑓𝑘 𝛼 − 𝛼1 + (0.5 − 𝑓𝑘 ) sin−1 − sin−1
𝑓𝑘 𝑓𝑘
⎛ √︃ ⎞
(︂ )︂2
0.5 − 𝑓𝑘 ⎠
𝛼 1 = 𝑓𝑑 1 − 1 −

𝑓𝑑 − 𝑓𝑘
√︁
𝛼2 = 𝑓𝑑 − 𝑓𝑑2 − 2𝑓𝑑 𝑓𝑘 + 𝑓𝑘 − 0.25
𝑎
𝛼=
𝐷𝑖
Parameters
D [float] Diameter of the main cylindrical section, [m]
f [float] Dimensionless dish-radius parameter; also commonly given as the product of f and D
(fD), which is called dish radius and has units of length, [-]
k [float] Dimensionless knuckle-radius parameter; also commonly given as the product of k and
D (kD), which is called the knuckle radius and has units of length, [-]
Returns
SA [float] Surface area [m^2]

References

[1]

Examples

Example from [1].

>>> SA_torispheroidal(D=2.54, f=1.039370079, k=0.062362205)


6.00394283477063

312 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

fluids.geometry.SA_partial_cylindrical_body(L, D, h)
Calculates the partial area of a cylinder’s body in the context of a horizontal cylindrical vessel and liquid partially
filling it. This computes the wetted surface area of the bottom of the cylinder.
(︂ )︂
𝐷 − 2ℎ
SA = 𝐿𝐷 cos −1
𝐷

Parameters
L [float] Length of the cylinder, [m]
D [float] Diameter of the cylinder, [m]
h [float] Height measured from bottom of cylinder to liquid level, [m]
Returns
SA_partial [float] Partial (wetted) surface area, [m^2]

Notes

This method is undefined for ℎ > 𝐷. and ℎ < 0, but those cases are handled by returning the full surface area
and the zero respectively.

References

[1]

Examples

>>> SA_partial_cylindrical_body(L=200.0, D=96., h=22.0)


19168.852890279868

fluids.geometry.SA_partial_horiz_conical_head(D, a, h)
Calculates the partial area of a conical tank head in the context of a horizontal vessel and liquid partially filling
it. This computes the wetted surface area of one of the conical heads only.
√︀
(𝑎2 + 𝑅2 )
[︂ (︂ )︂ ]︂
(𝑅 − ℎ)
SA =
√︀
𝑅2 cos−1 − (𝑅 − ℎ) (2𝑅ℎ − ℎ2 )
𝑅 𝑅

Parameters
D [float] Diameter of the main cylindrical section, [m]
a [float] Distance the cone head extends on one side, [m]
h [float] Height, as measured up to where the fluid ends, [m]
Returns
SA_partial [float] Partial (wetted) surface area of one conical tank head, [m^2]

2.10. Tank and Heat Exchanger Design (fluids.geometry) 313


Fluids Documentation, Release 1.0.21

Notes

This method is undefined for ℎ > 𝐷 and ℎ < 0, but those cases are handled by returning the full surface area
and the zero respectively.

References

[1]

Examples

>>> SA_partial_horiz_conical_head(D=72., a=48.0, h=24.0)


1980.0498315169873

fluids.geometry.SA_partial_horiz_spherical_head(D, a, h)
Calculates the partial area of a spherical tank head in the context of a horizontal vessel and liquid partially filling
it. This computes the wetted surface area of one of the spherical heads only.

𝑎2 + 𝑅2 𝑅 2|𝑎| 𝑅2 − 𝑥2
∫︁
SA = sin−1 √︀ 𝑑𝑥
|𝑎| 𝑅−ℎ (𝑎2 + 𝑅2 )2 − (2𝑎𝑥)2

For the special case of |𝑎| = 𝑅 :

SA = 𝜋𝑅ℎ

Parameters
D [float] Diameter of the main cylindrical section, [m]
a [float] Distance the spherical head extends on one side, [m]
h [float] Height, as measured up to where the fluid ends, [m]
Returns
SA_partial [float] Partial (wetted) surface area of one spherical tank head, [m^2]

Notes

This method is undefined for ℎ > 𝐷 and ℎ < 0, but those cases are handled by returning the full surface area
and the zero respectively.
A symbolic attempt did not suggest any analytical integrals were available.

References

[1]

314 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

Examples

>>> SA_partial_horiz_spherical_head(D=72., a=48.0, h=24.0)


2027.2672

fluids.geometry.SA_partial_horiz_ellipsoidal_head(D, a, h)
Calculates the partial area of a ellipsoidal tank head in the context of a horizontal vessel and liquid partially
filling it. This computes the wetted surface area of one of the ellipsoidal heads only.
∫︁ √𝑅2 −𝑥2 √︃ 2
2 𝑅 (𝑅 − 𝑎2 )𝑥2 + (𝑅2 − 𝑎2 )𝑦 2 − 𝑅4
∫︁
SA = 𝑑𝑦𝑑𝑥
𝑅 𝑅−ℎ 0 𝑥2 + 𝑦 2 − 𝑅 2

After extensive manipulation, the first integral was solved analytically, extending the result of [1] with greater
performance.
(︂ )︂0.5 (︂ )︂
𝑅4 −𝑅2 (𝑅2 −𝑎2 ) (︀ 2 2 0.5
)︀ (−𝑅2 +𝑦2 )(𝑅2 −𝑎2 )
∫︁ 𝑅 𝑅2 −𝑦 2 𝑅 −𝑦 𝐸 −𝑅4 +𝑦 2 (𝑅2 −𝑎2 )
2
SA = )︁0.5
𝑅
(︁
𝑅−ℎ 𝑅4 −𝑅2 (𝑅2 −𝑎2 )
𝑅4 −𝑦 2 (𝑅2 −𝑎2 )

Where 𝐸(𝑥) is the complete elliptic integral of the second kind, calculated with SciPy’s link to the cephes library.
Parameters
D [float] Diameter of the main cylindrical section, [m]
a [float] Distance the ellipsoidal head extends on one side, [m]
h [float] Height, as measured up to where the fluid ends, [m]
Returns
SA_partial [float] Partial (wetted) surface area of one ellipsoidal tank head, [m^2]

Notes

This method is undefined for ℎ > 𝐷 and ℎ < 0, but those cases are handled by returning the full surface area
and the zero respectively.
The original numerical double integral is extremely nasty - there are places where f(x) -> infinity but that have
a bounded area. quadpack’s numerical integration handles this well, but adaptive inetgration which is not aware
of singularities does not.

References

[1]

Examples

>>> SA_partial_horiz_ellipsoidal_head(D=72., a=48.0, h=24.0)


3401.233622547

2.10. Tank and Heat Exchanger Design (fluids.geometry) 315


Fluids Documentation, Release 1.0.21

fluids.geometry.SA_partial_horiz_guppy_head(D, a, h)
Calculates the partial area of a guppy tank head in the context of a horizontal vessel and liquid partially filling
it. This computes the wetted surface area of one of the guppy heads only.
∫︁ ℎ−𝑅 ∫︁ √𝑅2 −𝑥2
√︃ )︂)︂2 (︂ )︂2
𝑦2
(︂ (︂
𝑎 𝑎𝑦
SA = 2 1+ 1− + 𝑑𝑦𝑑𝑥
−𝑅 0 2𝑅 (𝑅 − 𝑥)2 𝑅(𝑅 − 𝑥)

After extensive manipulation, the first integral was solved analytically, extending the result of [1]. Even with the
special functions, this form has somewhat greater performance (and improved precision).
(︃
(
𝑎2 2𝑅2 −2𝑅𝑦
2
)
)︃
√ √
√︃
4𝑅2 (𝑅−𝑦)4 +𝑎2 (2𝑅2 −2𝑅𝑦 )2
2𝑎 4+ 𝑅2 −𝑦 2 (︂ 2
)︂ 2 𝑎 √ √ √
𝑅2 (𝑅−𝑦)4 2 2
(𝑅2
𝑎 (2𝑅 −2𝑅𝑦 ) √︀ 4𝑅2 +𝑎2 −2𝑅𝑦 4𝑅2 +𝑎2 +𝑎(𝑅2 −𝑦 2 )+𝑦 2 4

(︂
𝑎(𝑅2 −𝑦 2 )
)︂ + 4+ 𝑅2 (𝑅−𝑦)4
𝑅2 − 𝑦 2 −
∫︁ ℎ−𝑅 4𝑅2 +𝑎2 √ +1
2 2 2
SA = 2
(𝑅−𝑦) 4𝑅 +𝑎

−𝑅

Where ellipeinc is the incomplete elliptic integral of the second kind, and ellipkinc is the incomplete elliptic
integral of the first kind, both calculated with SciPy’s link to the cephes library.
Parameters
D [float] Diameter of the main cylindrical section, [m]
a [float] Distance the guppy head extends on one side, [m]
h [float] Height, as measured up to where the fluid ends, [m]
Returns
SA_partial [float] Partial (wetted) surface area of one guppy tank head, [m^2]

Notes

This method is undefined for ℎ > 𝐷 and ℎ < 0, but those cases are handled by returning the full surface area
and the zero respectively.
The analytical integral was derived with Rubi.

References

[1]

Examples

>>> SA_partial_horiz_guppy_head(D=72., a=48.0, h=24.0)


1467.8949

fluids.geometry.SA_partial_horiz_torispherical_head(D, f, k, h)
Calculates the partial area of a torispherical tank head in the context of a horizontal vessel and liquid partially
filling it. This computes the wetted surface area of one of the torispherical heads only.
The expressions used are quite complicated; see [1] for more details.
Parameters
D [float] Diameter of the main cylindrical section, [m]

316 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

f [float] Dimensionless dish-radius parameter; also commonly given as the product of f and D
(fD), which is called dish radius and has units of length, [-]
k [float] Dimensionless knuckle-radius parameter; also commonly given as the product of k and
D (kD), which is called the knuckle radius and has units of length, [-]
h [float] Height, as measured up to where the fluid ends, [m]
Returns
SA_partial [float] Partial (wetted) surface area of one torispherical tank head, [m^2]

Notes

This method is undefined for ℎ > 𝐷 and ℎ < 0, but those cases are handled by returning the full surface area
and the zero respectively.
One integral:
∫︁ 𝑓 𝐷 sin 𝛼
𝑓 𝐷 cos 𝛼
cos−1 √︀ 𝑑𝑥
𝑅−ℎ 𝑓 2 𝐷 2 − 𝑥2
Can be computed as follows, using WolframAlpha.

)︂ √𝑏 − (𝑏 − 𝑥2 )2 (︀−𝑏 + 𝑐2 + 𝑥2 )︀ atan √ √ 𝑐𝑥
√︁ (︁ )︁ √︁ (︁
2 + 𝑥2 )2 −𝑏 + 𝑥2 atan √
(︀ )︀
(︂
𝑐 2
𝑏 𝑏−𝑐 −𝑥 2
+ 𝑐 − (−𝑏 + 𝑐 −𝑏+
𝑥 acos √ +
1.5 √
√︁
𝑏 − 𝑥2 −𝑏+𝑐2 +𝑥2
2 (−𝑏 + 𝑥 )2 2
𝑏−𝑐 −𝑥 2
−𝑏+𝑥

With the following constants:

𝑐 = 𝑓 𝐷 cos 𝛼

𝑏 = 𝑓 2 𝐷2
The other integral is a double integral. There is an analytical integral available for the first integral, which takes
the form:
⎯ (︁ )︁
2 𝑘 2 4𝑅2 𝑘 2 − 𝑦 2 + (−2𝑅𝑘 + 𝑅)2 + 2 (−2𝑅𝑘 + 𝑅)
⎸ √︀
⎸ 𝑅 4𝑅 2 𝑘2 − 𝑦2 √︁
2
√︀
2 (𝑅 − ℎ) − (−4𝑅𝑘 + 2𝑅)

⎷ (︁ )︁
2
√︀ √︀
(4𝑅2 𝑘 2 − 𝑦 2 ) (𝑅 − ℎ) − (−4𝑅𝑘 + 2𝑅) 4𝑅2 𝑘 2 − 𝑦 2 + 2 (−2𝑅𝑘 + 𝑅) 4𝑅2 𝑘 2 − 𝑦 2

References

[1]

Examples

>>> SA_partial_horiz_torispherical_head(D=72., f=1, k=.06, h=24.0)


1471.201832459

fluids.geometry.SA_partial_vertical_conical_head(D, a, h)
Calculates the partial area of a conical tank head in the context of a vertical vessel and liquid partially filling it.
This computes the wetted surface area of one of the conical heads only, and is valid for h up to a only.

𝜋𝑅ℎ2 𝑎2 + 𝑅2
SA =
𝑎2

2.10. Tank and Heat Exchanger Design (fluids.geometry) 317


Fluids Documentation, Release 1.0.21

Parameters
D [float] Diameter of the main cylindrical section, [m]
a [float] Distance the cone head extends beneath the vertical tank, [m]
h [float] Height, as measured up to where the fluid ends or the top of the conical head, whichever
is less, [m]
Returns
SA_partial [float] Partial (wetted) surface area of one conical tank head extending beneath the
vessel, [m^2]

Notes

This method is undefined for ℎ < 0, but this is handled by returning zero.

References

[1]

Examples

>>> SA_partial_vertical_conical_head(D=72., a=48.0, h=24.0)


1696.4600329384882

fluids.geometry.SA_partial_vertical_ellipsoidal_head(D, a, h)
Calculates the partial area of a ellipsoidal tank head in the context of a vertical vessel and liquid partially filling
it. This computes the wetted surface area of one of the ellipsoidal heads only, and is valid for h up to a only.
If 𝑎 > 𝑅:
√︀ (︃ √ )︃
𝜋(𝑎 − ℎ)𝑅 𝑎4 − (𝑎 − ℎ)2 (𝑎2 − 𝑅2 ) 𝜋𝑎2 𝑅 𝑅 2
−1 (𝑎 − ℎ) 𝑎 − 𝑅
2
SA = 𝜋𝑅 − 2
2
+√ cos −1
− sin
𝑎 𝑎2 − 𝑅2 𝑎 𝑎2

Otherwise for 0 < 𝑎 < 𝑅:


√︀ (︃ √ )︃
𝜋(𝑎 − ℎ)𝑅 𝑎4 − (𝑎 − ℎ)2 (𝑎2 − 𝑅2 ) 𝜋𝑎2 𝑅 𝑎( 𝑅2 − 𝑎2 + 𝑅)
SA = 𝜋𝑅 −2
+√ ln √
𝑎2
√︀
𝑎2 − 𝑅2 (𝑎 − ℎ) 𝑅2 − 𝑎2 + 𝑎4 + (𝑎 − ℎ)2 (𝑅2 − 𝑎2 )

Parameters
D [float] Diameter of the main cylindrical section, [m]
a [float] Distance the ellipsoidal head extends beneath the vertical tank, [m]
h [float] Height, as measured up to where the fluid ends or the top of the ellipsoidal head,
whichever is less, [m]
Returns
SA_partial [float] Partial (wetted) surface area of one ellipsoidal tank head extending beneath
the vessel, [m^2]

318 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

Notes

This method is undefined for ℎ < 0, but this is handled by returning zero.

References

[1]

Examples

>>> SA_partial_vertical_ellipsoidal_head(D=72., a=48.0, h=24.0)


4675.23789137632

fluids.geometry.SA_partial_vertical_spherical_head(D, a, h)
Calculates the partial area of a spherical tank head in the context of a vertical vessel and liquid partially filling
it. This computes the wetted surface area of one of the conical heads only, and is valid for h up to a only.
(︂ 2
𝑎 + 𝑅2
)︂
SA = 𝜋ℎ
𝑎
Parameters
D [float] Diameter of the main cylindrical section, [m]
a [float] Distance the spherical head extends beneath the vertical tank, [m]
h [float] Height, as measured up to where the fluid ends or the top of the spherical head,
whichever is less, [m]
Returns
SA_partial [float] Partial (wetted) surface area of one spherical tank head extending beneath the
vessel, [m^2]

Notes

This method is undefined for ℎ < 0, but this is handled by returning zero.

References

[1]

Examples

>>> SA_partial_vertical_spherical_head(72, a=24, h=12)


2940.5307237600464

fluids.geometry.SA_partial_vertical_torispherical_head(D, f, k, h)
Calculates the partial area of a torispherical tank head in the context of a vertical vessel and liquid partially filling
it. This computes the wetted surface area of one of the torispherical heads only.
if 𝑎1 <= ℎ:

SA = 2𝜋𝑓 𝐷ℎ

2.10. Tank and Heat Exchanger Design (fluids.geometry) 319


Fluids Documentation, Release 1.0.21

if 𝑎1 ≤ ℎ ≤ 𝑎:
(︂ (︂ )︂)︂
−1 𝑎2 −1 𝑎 − ℎ
SA = 2𝜋𝑓 𝐷𝑎1 + 2𝜋𝑘𝐷 ℎ − 𝑎1 + (𝑅 − 𝑘𝐷) sin − sin
𝑘𝐷 𝑘𝐷

1 − 2𝑘
𝛼 = sin−1
2(𝑓 − 𝑘)
𝑎1 = 𝑓 𝐷(1 − cos 𝛼)

𝑎2 = 𝑘𝐷 cos 𝛼
Parameters
D [float] Diameter of the main cylindrical section, [m]
f [float] Dimensionless dish-radius parameter; also commonly given as the product of f and D
(fD), which is called dish radius and has units of length, [-]
k [float] Dimensionless knuckle-radius parameter; also commonly given as the product of k and
D (kD), which is called the knuckle radius and has units of length, [-]
h [float] Height, as measured up to where the fluid ends or the top of the torispherical head,
whichever is less, [m]
Returns
SA_partial [float] Partial (wetted) surface area of one torispherical tank head, [m^2]

Notes

This method is undefined for ℎ > 𝐷 and ℎ < 0, but those cases are handled by returning the full surface area
and the zero respectively.

References

[1]

Examples

This method is undefined for ℎ < 0, but this is handled by returning zero.

2.10.4 Miscellaneous Geometry Functions

fluids.geometry.pitch_angle_solver(angle=None, pitch=None, pitch_parallel=None, pitch_normal=None)


Utility to take any two of angle, pitch, pitch_parallel, and pitch_normal and calculate the other two. This is
useful for applications with tube banks, as in shell and tube heat exchangers or air coolers and allows for a wider
range of user input.

pitch normal = pitch · sin(angle)

pitch parallel = pitch · cos(angle)


Parameters
angle [float, optional] The angle of the tube layout, [degrees]

320 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

pitch [float, optional] The shortest distance between tube centers; defined in relation to the flow
direction only, [m]
pitch_parallel [float, optional] The distance between tube center along a line parallel to the flow;
has been called longitudinal pitch, pp, s2, SL, and p2, [m]
pitch_normal [float, optional] The distance between tube centers in a line 90° to the line of flow;
has been called the transverse pitch, pn, s1, ST, and p1, [m]
Returns
angle [float] The angle of the tube layout, [degrees]
pitch [float] The shortest distance between tube centers; defined in relation to the flow direction
only, [m]
pitch_parallel [float] The distance between tube center along a line parallel to the flow; has been
called longitudinal pitch, pp, s2, SL, and p2, [m]
pitch_normal [float] The distance between tube centers in a line 90° to the line of flow; has been
called the transverse pitch, pn, s1, ST, and p1, [m]

Notes

For the 90 and 0 degree case, the normal or parallel pitches can be zero; given the angle and the zero value,
obviously is it not possible to calculate the pitch and a math error will be raised.
No exception will be raised if three or four inputs are provided; the other two will simply be calculated according
to the list of if statements used.
An exception will be raised if only one input is provided.

References

[1]

Examples

>>> pitch_angle_solver(pitch=1, angle=30)


(30, 1, 0.8660254037844387, 0.49999999999999994)

fluids.geometry.plate_enlargement_factor(amplitude, wavelength)
Calculates the enhancement factor of the sinusoidal waves of the plate heat exchanger. This is the multiplier for
the flat plate area to obtain the actual area available for heat transfer. Obtained from the following integral:
∫︀ 𝜆 √︁ (︀ )︀2
1 + 𝛾𝜋 cos2 2𝜋
(︀ )︀
Effective area 0 2 𝜆 𝑥 𝑑𝑥
𝜑= =
Projected area 𝜆
4𝑎
𝛾=
𝜆
The solution to the integral is:
(︁ )︁
−4𝑎2 𝜋 2
2𝐸 𝜆2
𝜑=
𝜋
where E is the complete elliptic integral of the second kind, calculated with SciPy.

2.10. Tank and Heat Exchanger Design (fluids.geometry) 321


Fluids Documentation, Release 1.0.21

Parameters
amplitude [float] Half the height of the wave of the ridges, [m]
wavelength [float] Distance between the bottoms of two of the ridges (sometimes called pitch),
[m]
Returns
plate_enlargement_factor [float] The extra surface area multiplier as compared to a flat plate
caused the corrugations, [-]

Notes

This is the exact analytical integral, obtained via Mathematica, Maple, and quite a bit of trial and error. It is
confirmed via numerical integration. The expression normally given is an approximation as follows:
1 (︁ √︀ √︀ )︁
𝜑= 1 + 1 + 𝐴2 + 4 1 + 𝐴2 /2
6
2𝜋𝑎
𝐴=
𝜆
Most plate heat exchangers approximate a sinusoidal geometry only.

Examples

>>> plate_enlargement_factor(amplitude=5E-4, wavelength=3.7E-3)


1.1611862034509677

fluids.geometry.a_torispherical(D, f, k)
Calculates depth of a torispherical head according to [1].

𝑎 = 𝑎1 + 𝑎2

1 − 2𝑘
𝛼 = sin−1
2(𝑓 − 𝑘)
𝑎1 = 𝑓 𝐷(1 − cos 𝛼)

𝑎2 = 𝑘𝐷 cos 𝛼
Parameters
D [float] Diameter of the main cylindrical section, [m]
f [float] Dimensionless dish-radius parameter; also commonly given as the product of f and D
(fD), which is called dish radius and has units of length, [-]
k [float] Dimensionless knuckle-radius parameter; also commonly given as the product of k and
D (kD), which is called the knuckle radius and has units of length, [-]
Returns
a [float] Depth of head [m]

322 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

References

[1]

Examples

Example from [1].

>>> a_torispherical(D=96., f=0.9, k=0.2)


25.684268924767125

fluids.geometry.A_partial_circle(D, h)
Calculates the partial area of a circle, in the context of the circle being an end cap to a horizontal cylindrical
vessel and liquid partially filling it. This computes the wetted surface area of one of the end caps.
Multiply this by two to obtain the wetted area of two end caps.

(𝑅 − ℎ)
SA = 𝑅2 cos−1
√︀
− (𝑅 − ℎ) (2𝑅ℎ − ℎ2 )
𝑅
Parameters
D [float] Diameter of the circle, [m]
h [float] Height measured from bottom of circle to liquid level, [m]
Returns
SA_partial [float] Partial (wetted) surface area, [m^2]

Notes

This method is undefined for ℎ > 𝐷 and ℎ < 0, but those cases are handled by returning the full surface area
and the zero respectively.

References

[1]

Examples

>>> A_partial_circle(D=96., h=22.0)


1251.2018147383194

fluids.geometry.circle_segment_h_from_A(A, D)
Calculates the height of a chord of a circle given the area of that circle segment. This is a numerical problem,
solving the following equation for h.

(𝑅 − ℎ)
A = 𝑅2 cos−1
√︀
− (𝑅 − ℎ) (2𝑅ℎ − ℎ2 )
𝑅
Parameters
A [float] Circle section area, [m^2]
D [float] Diameter of the circle, [m]

2.10. Tank and Heat Exchanger Design (fluids.geometry) 323


Fluids Documentation, Release 1.0.21

Returns
h [float] Height measured from bottom of circle to the end of the circle section, [m]

References

[1]

Examples

>>> circle_segment_h_from_A(A=1251.2018147383194, D=96.)


22.0

2.10.5 Pellet Properties

fluids.geometry.sphericity(A, V )
Returns the sphericity of a particle of surface area A and volume V. Sphericity is the ratio of the surface area of
a sphere with the same volume as the particle (equivalent diameter) to the actual surface area of the particle.
1 2
A of sphere with 𝑉𝑝 𝜋 3 (6𝑉𝑝 ) 3
Ψ= =
𝐴𝑝 𝐴𝑝

Parameters
A [float] Surface area of particle, [m^2]
V [float] Volume of particle, [m^3]
Returns
Psi [float] Sphericity [-]

Notes

All non-spherical particles have spericities less than 1 but greater than 0. Many common geometrical shapes
have their results calculated exactly in [2].

References

[1], [2]

Examples

>>> sphericity(10., 2.)


0.767663317071005

For a cube of side length a=3, the surface area is 6*a^2=54 and volume a^3=27. Its sphericity is then:

>>> sphericity(A=54, V=27)


0.8059959770082346

324 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

fluids.geometry.aspect_ratio(Dmin, Dmax)
Returns the aspect ratio of a shape with minimum and maximum dimension, Dmin and Dmax.
𝐷𝑚𝑖𝑛
𝐴𝑅 =
𝐷𝑚𝑎𝑥
Parameters
Dmin [float] Minimum dimension, [m]
Dmax [float] Maximum dimension, [m]
Returns
a_r [float] Aspect ratio [-]

Examples

>>> aspect_ratio(.2, 2)
0.1

fluids.geometry.circularity(A, P)
Returns the circularity of a shape with area A and perimeter P.
4𝜋𝐴
𝑓𝑐𝑖𝑟𝑐 =
𝑃2
Defined to be 1 for a circle. Used to characterize particles. Any non-circular shape must have a circularity less
than one.
Parameters
A [float] Area of the shape, [m^2]
P [float] Perimeter of the shape, [m]
Returns
f_circ [float] Circularity of the shape [-]

Examples

Square, side length = 2 (all squares are the same):

>>> circularity(A=(2*2), P=4*2)


0.7853981633974483

Rectangle, one side length = 1, second side length = 100

>>> D1 = 1
>>> D2 = 100
>>> A = D1*D2
>>> P = 2*D1 + 2*D2
>>> circularity(A, P)
0.030796908671598795

fluids.geometry.A_cylinder(D, L)
Returns the surface area of a cylinder.
𝜋𝐷2
𝐴 = 𝜋𝐷𝐿 + 2 ·
4

2.10. Tank and Heat Exchanger Design (fluids.geometry) 325


Fluids Documentation, Release 1.0.21

Parameters
D [float] Diameter of the cylinder, [m]
L [float] Length of the cylinder, [m]
Returns
A [float] Surface area [m^2]

Examples

>>> A_cylinder(0.01, .1)


0.0032986722862692833

fluids.geometry.V_cylinder(D, L)
Returns the volume of a cylinder.

𝜋𝐷2
𝑉 = 𝐿
4
Parameters
D [float] Diameter of the cylinder, [m]
L [float] Length of the cylinder, [m]
Returns
V [float] Volume [m^3]

Examples

>>> V_cylinder(0.01, .1)


7.853981633974484e-06

fluids.geometry.A_hollow_cylinder(Di, Do, L)
Returns the surface area of a hollow cylinder.

𝜋𝐷𝑜2 𝜋𝐷𝑖2
𝐴 = 𝜋𝐷𝑜 𝐿 + 𝜋𝐷𝑖 𝐿 + 2 · −2·
4 4
Parameters
Di [float] Diameter of the hollow in the cylinder, [m]
Do [float] Diameter of the exterior of the cylinder, [m]
L [float] Length of the cylinder, [m]
Returns
A [float] Surface area [m^2]

326 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

Examples

>>> A_hollow_cylinder(0.005, 0.01, 0.1)


0.004830198704894308

fluids.geometry.V_hollow_cylinder(Di, Do, L)
Returns the volume of a hollow cylinder.
𝜋𝐷𝑜2 𝜋𝐷𝑖2
𝑉 = 𝐿−𝐿
4 4
Parameters
Di [float] Diameter of the hollow in the cylinder, [m]
Do [float] Diameter of the exterior of the cylinder, [m]
L [float] Length of the cylinder, [m]
Returns
V [float] Volume [m^3]

Examples

>>> V_hollow_cylinder(0.005, 0.01, 0.1)


5.890486225480862e-06

fluids.geometry.A_multiple_hole_cylinder(Do, L, holes)
Returns the surface area of a cylinder with multiple holes. Calculation will naively return a negative value or
other impossible result if the number of cylinders added is physically impossible. Holes may be of different
shapes, but must be perpendicular to the axis of the cylinder.
𝑛 (︂
𝜋𝐷𝑜2 ∑︁ 𝜋𝐷𝑖2
)︂
𝐴 = 𝜋𝐷𝑜 𝐿 + 2 · + 𝜋𝐷𝑖 𝐿 − 2 ·
4 𝑖
4
Parameters
Do [float] Diameter of the exterior of the cylinder, [m]
L [float] Length of the cylinder, [m]
holes [list] List of tuples containing (diameter, count) pairs of descriptions for each of the holes
sizes.
Returns
A [float] Surface area [m^2]

Examples

>>> A_multiple_hole_cylinder(0.01, 0.1, [(0.005, 1)])


0.004830198704894308

fluids.geometry.V_multiple_hole_cylinder(Do, L, holes)
Returns the solid volume of a cylinder with multiple cylindrical holes. Calculation will naively return a negative
value or other impossible result if the number of cylinders added is physically impossible.
𝜋𝐷𝑜2 𝜋𝐷𝑖2
𝑉 = 𝐿−𝐿
4 4

2.10. Tank and Heat Exchanger Design (fluids.geometry) 327


Fluids Documentation, Release 1.0.21

Parameters
Do [float] Diameter of the exterior of the cylinder, [m]
L [float] Length of the cylinder, [m]
holes [list] List of tuples containing (diameter, count) pairs of descriptions for each of the holes
sizes.
Returns
V [float] Volume [m^3]

Examples

>>> V_multiple_hole_cylinder(0.01, 0.1, [(0.005, 1)])


5.890486225480862e-06

2.11 Jet Pump (ejector/eductor) Sizing and Rating (fluids.jet_pump)

This module contains a model for a jet pump, also known as an eductor or an ejector.
For reporting bugs, adding feature requests, or submitting pull requests, please use the GitHub issue tracker or contact
the author at Caleb.Andrew.Bell@gmail.com.

• Interfaces
• Objective Function
• Vacuum Air Leakage Estimation

2.11.1 Interfaces

fluids.jet_pump.liquid_jet_pump(rhop, rhos, Kp=0.0, Ks=0.1, Km=0.15, Kd=0.1, d_nozzle=None,


d_mixing=None, d_diffuser=None, Qp=None, Qs=None, P1=None,
P2=None, P5=None, nozzle_retracted=True, max_variations=100)
Calculate the remaining two variables in a liquid jet pump, using a model presented in [1] as well as [2], [3], and
[4].
2𝐶𝑀 2 𝑅2 𝐶𝑀 2 𝑅2
2𝑅 + 1−𝑅 − 𝑅2 (1 + 𝐶𝑀 )(1 + 𝑀 )(1 + 𝐾𝑚 + 𝐾𝑑 + 𝛼2 ) − (1−𝑅)2 (1 + 𝐾𝑠 )
𝑁= (︁ )︁
2𝐶𝑀 2 𝑅2 𝐶𝑀 2 𝑅2
(1 + 𝐾𝑝 ) − 2𝑅 − 1−𝑅 + 𝑅2 (1 + 𝐶𝑀 )(1 + 𝑀 )(1 + 𝐾𝑚 + 𝐾𝑑 + 𝛼2 ) + (1 − 𝑗) (1−𝑅)2 (1 + 𝐾𝑠 )

(︂ )︂2 [︃ (︂ )︂2 ]︃
1 𝑄𝑝 𝑀𝑅
𝑃1 − 𝑃2 = 𝜌𝑝 (1 + 𝐾𝑝 ) − 𝐶(1 + 𝐾𝑠 )
2 𝐴𝑛 1−𝑅
𝑃5 − 𝑃2
Pressure ratio = 𝑁 =
𝑃1 − 𝑃5
𝑄𝑠
Volume flow ratio = 𝑀 =
𝑄𝑝

328 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

𝑄𝑠 (𝑃5 − 𝑃2 )
Jet pump efficiency = 𝜂 = 𝑀 · 𝑁 =
𝑄𝑝 (𝑃1 − 𝑃5 )
𝐴𝑛
𝑅=
𝐴𝑚
𝜌𝑠
𝐶=
𝜌𝑝
There is no guarantee a solution will be found for the provided variable values, but every combination of two
missing variables are supported.
Parameters
rhop [float] The density of the primary (motive) fluid, [kg/m^3]
rhos [float] The density of the secondary fluid (drawn from the vacuum chamber), [kg/m^3]
Kp [float, optional] The primary nozzle loss coefficient, [-]
Ks [float, optional] The secondary inlet loss coefficient, [-]
Km [float, optional] The mixing chamber loss coefficient, [-]
Kd [float, optional] The diffuser loss coefficient, [-]
d_nozzle [float, optional] The inside diameter of the primary fluid’s nozle, [m]
d_mixing [float, optional] The diameter of the mixing chamber, [m]
d_diffuser [float, optional] The diameter of the diffuser at its exit, [m]
Qp [float, optional] The volumetric flow rate of the primary fluid, [m^3/s]
Qs [float, optional] The volumetric flow rate of the secondary fluid, [m^3/s]
P1 [float, optional] The pressure of the primary fluid entering its nozzle, [Pa]
P2 [float, optional] The pressure of the secondary fluid at the entry of the ejector, [Pa]
P5 [float, optional] The pressure at the exit of the diffuser, [Pa]
nozzle_retracted [bool, optional] Whether or not the primary nozzle’s exit is before the mixing
chamber, or somewhat inside it, [-]
max_variations [int, optional] When the initial guesses do not lead to a converged solution, try
this many more guesses at converging the problem, [-]
Returns
solution [dict] Dictionary of calculated parameters, [-]

Notes

The assumptions of the model are:


• The flows are one dimensional except in the mixing chamber.
• The mixing chamber has constant cross-sectional area.
• The mixing happens entirely in the mixing chamber, prior to entry into the diffuser.
• The primary nozzle is in a straight line with the middle of the mixing chamber.
• Both fluids are incompressible, and have no excess volume on mixing.
• Primary and secondary flows both enter the mixing throat with their own uniform velocity distribution; the
mixed stream leaves with a uniform velocity profile.

2.11. Jet Pump (ejector/eductor) Sizing and Rating (fluids.jet_pump) 329


Fluids Documentation, Release 1.0.21

• If the secondary fluid is a gas, it undergoes isothermal compression in the throat and diffuser.
• If the secondary fluid is a gas or contains a bubbly gas, it is homogeneously distributed in a continuous
liquid phase.
• Heat transfer between the fluids is negligible - there is no change in density due to temperature changes
• The change in the solubility of a dissolved gas, if there is one, is negigibly changed by temperature or
pressure changes.
The model can be derived from the equations in liquid_jet_pump_ancillary and the following:
Conservation of energy at the primary nozzle, secondary inlet, and diffuser exit:
(︂ )︂
1 1
𝑃1 = 𝑃3 + 𝜌𝑝 𝑉𝑛2 + 𝐾𝑝 𝜌𝑝 𝑉𝑛2
2 2
(︂ )︂
1 2 1 2
𝑃2 = 𝑃3 + 𝜌 𝑠 𝑉 3 + 𝐾 𝑠 𝜌𝑠 𝑉3
2 2
(︂ )︂
1 2 1 2
𝑃5 = 𝑃4 + 𝜌𝑑 𝑉4 − 𝐾𝑑 𝜌𝑑 𝑉 4
2 2
Continuity of the ejector:

𝜌𝑝 𝑄𝑝 + 𝜌𝑠 𝑄𝑠 = 𝜌𝑑 𝑄𝑑

References

[1], [2], [3], [4]

Examples

>>> ans = liquid_jet_pump(rhop=998., rhos=1098., Km=.186, Kd=0.12, Ks=0.11,


... Kp=0.04, d_mixing=0.045, Qs=0.01, Qp=.01, P2=133600,
... P5=200E3, nozzle_retracted=False, max_variations=10000)
>>> s = []
>>> for key, value in ans.items():
... s.append('%s: %g' %(key, value))
>>> sorted(s)
['M: 1', 'N: 0.293473', 'P1: 426256', 'P2: 133600', 'P5: 200000', 'Qp: 0.01', 'Qs:␣
˓→0.01', 'R: 0.247404', 'alpha: 1e-06', 'd_diffuser: 45', 'd_mixing: 0.045', 'd_

˓→nozzle: 0.0223829', 'efficiency: 0.293473']

2.11.2 Objective Function

fluids.jet_pump.liquid_jet_pump_ancillary(rhop, rhos, Kp, Ks, d_nozzle=None, d_mixing=None,


Qp=None, Qs=None, P1=None, P2=None)
Calculates the remaining variable in a liquid jet pump when solving for one if the inlet variables only and the rest
of them are known. The equation comes from conservation of energy and momentum in the mixing chamber.
The variable to be solved for must be one of d_nozzle, d_mixing, Qp, Qs, P1, or P2.
1 1
𝑃1 − 𝑃2 = 𝜌𝑝 𝑉𝑛2 (1 + 𝐾𝑝 ) − 𝜌𝑠 𝑉32 (1 + 𝐾𝑠 )
2 2

330 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

Rearrange to express V3 in terms of Vn, and using the density ratio C, the expression becomes:
[︃ (︂ )︂2 ]︃
1 𝑀 𝑅
𝑃1 − 𝑃2 = 𝜌𝑝 𝑉𝑛2 (1 + 𝐾𝑝 ) − 𝐶(1 + 𝐾𝑠 )
2 1−𝑅

Using the primary nozzle area and flow rate:


(︂ )︂2 [︃ (︂ )︂2 ]︃
1 𝑄𝑝 𝑀𝑅
𝑃1 − 𝑃2 = 𝜌𝑝 (1 + 𝐾𝑝 ) − 𝐶(1 + 𝐾𝑠 )
2 𝐴𝑛 1−𝑅

For P, P2, Qs, and Qp, the equation can be rearranged explicitly for them. For d_mixing and d_nozzle, a bounded
solver is used searching between 1E-9 m and 20 times the other diameter which was specified.
Parameters
rhop [float] The density of the primary (motive) fluid, [kg/m^3]
rhos [float] The density of the secondary fluid (drawn from the vacuum chamber), [kg/m^3]
Kp [float] The primary nozzle loss coefficient, [-]
Ks [float] The secondary inlet loss coefficient, [-]
d_nozzle [float, optional] The inside diameter of the primary fluid’s nozle, [m]
d_mixing [float, optional] The diameter of the mixing chamber, [m]
Qp [float, optional] The volumetric flow rate of the primary fluid, [m^3/s]
Qs [float, optional] The volumetric flow rate of the secondary fluid, [m^3/s]
P1 [float, optional] The pressure of the primary fluid entering its nozzle, [Pa]
P2 [float, optional] The pressure of the secondary fluid at the entry of the ejector, [Pa]
Returns
solution [float] The parameter not specified (one of d_nozzle, d_mixing, Qp, Qs, P1, or P2),
(units of m, m, m^3/s, m^3/s, Pa, or Pa respectively)

Notes

The following SymPy code was used to obtain the analytical formulas ( they are not shown here due to their
length):

>>> from sympy import *


>>> A_nozzle, A_mixing, Qs, Qp, P1, P2, rhos, rhop, Ks, Kp = symbols('A_nozzle, A_
˓→mixing, Qs, Qp, P1, P2, rhos, rhop, Ks, Kp')

>>> R = A_nozzle/A_mixing
>>> M = Qs/Qp
>>> C = rhos/rhop
>>> rhs = rhop/2*(Qp/A_nozzle)**2*((1+Kp) - C*(1 + Ks)*((M*R)/(1-R))**2 )
>>> new = Eq(P1 - P2, rhs)
>>> solve(new, Qp)
>>> solve(new, Qs)
>>> solve(new, P1)
>>> solve(new, P2)

2.11. Jet Pump (ejector/eductor) Sizing and Rating (fluids.jet_pump) 331


Fluids Documentation, Release 1.0.21

References

[1]

Examples

Calculating primary fluid nozzle inlet pressure P1:

>>> liquid_jet_pump_ancillary(rhop=998., rhos=1098., Ks=0.11, Kp=.04,


... P2=133600, Qp=0.01, Qs=0.01, d_mixing=0.045, d_nozzle=0.02238)
426434.60314398

2.11.3 Vacuum Air Leakage Estimation

fluids.jet_pump.vacuum_air_leakage_HEI2633(V, P, P_atm=101325.0)
Calculates an estimated leakage of air into a vessel using fits to a graph of HEI-2633-00 for air leakage in com-
mercially tight vessels [1].
There are 5 fits, for < 1 mmHg; 1-3 mmHg; 3-20 mmHg, 20-90 mmHg, and 90 mmHg to atmospheric. The fits
are for maximum air leakage.
Actual values may be significantly larger or smaller depending on the condition of the seals, manufacturing
defects, and the application.
Parameters
V [float] Vessel volume, [m^3]
P [float] Vessel actual absolute operating pressure - less than P_atm!, [Pa]
P_atm [float, optional] The atmospheric pressure surrounding the vessel, [Pa]
Returns
m [float] Air leakage flow rate, [kg/s]

Notes

The volume is capped to 10 ft^3 on the low end, but extrapolation past the maximum size of 10000 ft^3 is allowed.
It is believed vacuum_air_leakage_Seider was derived from this data, so this function should be used in
preference to it.

References

[1]

332 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

Examples

>>> vacuum_air_leakage_HEI2633(10, 10000)


0.001186252403781038

fluids.jet_pump.vacuum_air_leakage_Ryans_Croll(V, P, P_atm=101325.0)
Calculates an estimated leakage of air into a vessel using a correlation from Ryans and Croll (1981) [1] as given
in [2] and [3].
if P < 10 torr:

𝑊 = 0.026𝑃 0.34 𝑉 0.6

if P < 100 torr:

𝑊 = 0.032𝑃 0.26 𝑉 0.6

else:

𝑊 = 0.106𝑉 0.6

In the above equation, the units are lb/hour, torr (vacuum), and cubic feet; they are converted in this function.
Parameters
V [float] Vessel volume, [m^3]
P [float] Vessel actual absolute operating pressure - less than P_atm!, [Pa]
P_atm [float, optional] The atmospheric pressure surrounding the vessel, [Pa]
Returns
m [float] Air leakage flow rate, [kg/s]

Notes

No limits are applied to this function.

References

[1], [2], [3]

Examples

>>> vacuum_air_leakage_Ryans_Croll(10, 10000)


0.0004512

fluids.jet_pump.vacuum_air_leakage_Coker_Worthington(P, P_atm=101325.0, conservative=True)


Calculates an estimated leakage of air into a vessel using a tabular lookup from Coker cited as being from
Worthington Corp’s 1955 Steam-Jet Ejector Application Handbook, Bulletin W-205-E21 [1].
Parameters
P [float] Vessel actual absolute operating pressure - less than P_atm!, [Pa]
P_atm [float, optional] The atmospheric pressure surrounding the vessel, [Pa]

2.11. Jet Pump (ejector/eductor) Sizing and Rating (fluids.jet_pump) 333


Fluids Documentation, Release 1.0.21

conservative [bool] Whether to use the high values or low values in the table, [-]
Returns
m [float] Air leakage flow rate, [kg/s]

References

[1]

Examples

>>> vacuum_air_leakage_Coker_Worthington(10000)
0.005039915222222222

fluids.jet_pump.vacuum_air_leakage_Seider(V, P, P_atm=101325.0)
Calculates an estimated leakage of air into a vessel using a correlation from Seider [1].

𝑊 = 5 + 0.0298 + 0.03088 ln 𝑃 − 0.0005733(ln 𝑃 )2 𝑉 0.66


[︀ ]︀

In the above equation, the units are lb/hour, torr (vacuum), and cubic feet; they are converted in this function.
Parameters
V [float] Vessel volume, [m^3]
P [float] Vessel actual absolute operating pressure - less than P_atm!, [Pa]
P_atm [float, optional] The atmospheric pressure surrounding the vessel, [Pa]
Returns
m [float] Air leakage flow rate, [kg/s]

Notes

This formula is rough.

References

[1]

Examples

>>> vacuum_air_leakage_Seider(10, 10000)


0.0018775547

334 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

2.12 Mixing (fluids.mixing)

This module contains some basic functions for fluid mechanics mixing calculations.
For reporting bugs, adding feature requests, or submitting pull requests, please use the GitHub issue tracker or contact
the author at Caleb.Andrew.Bell@gmail.com.

• Misc Functions

2.12.1 Misc Functions

fluids.mixing.size_tee(Q1, Q2, D, D2, n=1, pipe_diameters=5)


Calculates CoV of an optimal or specified tee for mixing at a tee according to [1]. Assumes turbulent flow. The
smaller stream in injected into the main pipe, which continues straight. COV calculation is according to [2].

𝑇 𝑂𝐷𝑂

Parameters
Q1 [float] Volumetric flow rate of larger stream [m^3/s]
Q2 [float] Volumetric flow rate of smaller stream [m^3/s]
D [float] Diameter of pipe after tee [m]
D2 [float] Diameter of mixing inlet, optional (optimally calculated if not specified) [m]
n [float] Number of jets, 1 to 4 []
pipe_diameters [float] Number of diameters along tail pipe for CoV calculation, 0 to 5 []
Returns
CoV [float] Standard deviation of dimensionless concentration [-]

Notes

Not specified if this works for liquid also, though probably not. Example is from example Example 9-6 in [1].
Low precision used in example.

References

[1], [2]

2.12. Mixing (fluids.mixing) 335


Fluids Documentation, Release 1.0.21

Examples

>>> size_tee(Q1=11.7, Q2=2.74, D=0.762, D2=None, n=1, pipe_diameters=5)


0.2940930233038544

fluids.mixing.COV_motionless_mixer(Ki, Q1, Q2, pipe_diameters)


Calculates CoV of a motionless mixer with a regression parameter in [1] and originally in [2].

𝐶𝑜𝑉 𝐿/𝐷
= 𝐾𝑖
𝐶𝑜𝑉0
Parameters
Ki [float] Correlation parameter specific to a mixer’s design, [-]
Q1 [float] Volumetric flow rate of larger stream [m^3/s]
Q2 [float] Volumetric flow rate of smaller stream [m^3/s]
pipe_diameters [float] Number of diameters along tail pipe for CoV calculation, 0 to 5 []
Returns
CoV [float] Standard deviation of dimensionless concentration [-]

Notes

Example 7-8.3.2 in [1], solved backwards.

References

[1], [2]

Examples

>>> COV_motionless_mixer(Ki=.33, Q1=11.7, Q2=2.74, pipe_diameters=4.74/.762)


0.0020900028665727685

fluids.mixing.K_motionless_mixer(K, L, D, fd)
Calculates loss coefficient of a motionless mixer with a regression parameter in [1] and originally in [2].

𝐿
𝐾 = 𝐾𝐿/𝑇 𝑓
𝐷
Parameters
K [float] Correlation parameter specific to a mixer’s design, [-] Also specific to laminar or tur-
bulent regime.
L [float] Length of the motionless mixer [m]
D [float] Diameter of pipe [m]
fd [float] Darcy friction factor [-]
Returns
K [float] Loss coefficient of mixer [-]

336 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

Notes

Related to example 7-8.3.2 in [1].

References

[1], [2]

Examples

>>> K_motionless_mixer(K=150, L=.762*5, D=.762, fd=.01)


7.5

fluids.mixing.agitator_time_homogeneous(N, P, T, H, mu, rho, D=None, homogeneity=0.95)


Calculates time for a fluid mizing in a tank with an impeller to reach a specified level of homogeneity, according
to [1].
𝑃𝑔
𝑁𝑝 =
𝜌𝑁 3 𝐷5

𝜌𝐷2 𝑁
𝑅𝑒𝑖𝑚𝑝 =
𝜇
constant = 𝑁𝑝1/3 𝑅𝑒𝑖𝑚𝑝

𝐹 𝑜 = 5.2/constantfor turbulent regime

𝐹 𝑜 = (183/constant)2 for transition regime


Parameters
N [float:] Speed of impeller, [revolutions/s]
P [float] Actual power required to mix, ignoring mechanical inefficiencies [W]
T [float] Tank diameter, [m]
H [float] Tank height, [m]
mu [float] Mixture viscosity, [Pa*s]
rho [float] Mixture density, [kg/m^3]
D [float, optional] Impeller diameter [m]
homogeneity [float, optional] Fraction completion of mixing, []
Returns
t [float] Time for specified degree of homogeneity [s]

2.12. Mixing (fluids.mixing) 337


Fluids Documentation, Release 1.0.21

Notes

If impeller diameter is not specified, assumed to be 0.5 tank diameters.


The first example is solved forward rather than backwards here. A rather different result is obtained, but is
accurate.
No check to see if the mixture if laminar is currently implemented. This would under predict the required time.

References

[1]

Examples

>>> agitator_time_homogeneous(D=36*.0254, N=56/60., P=957., T=1.83, H=1.83, mu=0.


˓→018, rho=1020, homogeneity=.995)

15.143198226374668

>>> agitator_time_homogeneous(D=1, N=125/60., P=298., T=3, H=2.5, mu=.5, rho=980,␣


˓→homogeneity=.95)

67.7575069865228

fluids.mixing.Kp_helical_ribbon_Rieger(D, h, nb, pitch, width, T )


Calculates product of power number and Reynolds number for a specified geometry for a heilical ribbon mixer
in the laminar regime. One of several correlations listed in [1], it used more data than other listed correlations
and was recommended.
ℎ (︁ 𝑐 )︁−0.38 (︁ 𝑝 )︁−0.35 (︁ 𝑤 )︁0.20 0.78
𝐾𝑝 = 82.8 𝑛𝑏
𝐷 𝐷 𝐷 𝐷
Parameters
D [float] Impeller diameter [m]
h [float] Ribbon mixer height, [m]
nb [float:] Number of blades, [-]
pitch [float] Height of one turn around a helix [m]
width [float] Width of one blade [m]
T [float] Tank diameter, [m]
Returns
Kp [float] Product of Power number and Reynolds number for laminar regime []

338 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

Notes

Example is from example 9-6 in [1]. Confirmed.

References

[1], [2]

Examples

>>> Kp_helical_ribbon_Rieger(D=1.9, h=1.9, nb=2, pitch=1.9, width=.19, T=2)


357.39749163259256

fluids.mixing.time_helical_ribbon_Grenville(Kp, N)
Calculates product of time required for mixing in a helical ribbon coil in the laminar regime according to the
Grenville [2] method recommended in [1].

𝑡 = 896 × 103 𝐾𝑝−1.69 /𝑁

Parameters
Kp [float] Product of power number and Reynolds number for laminar regime []
N [float] Speed of impeller, [revolutions/s]
Returns
t [float] Time for homogeneity [s]

Notes

Degree of homogeneity is not specified. Example is from example 9-6 in [1]. Confirmed.

References

[1], [2]

Examples

>>> time_helical_ribbon_Grenville(357.4, 4/60.)


650.980654028894

2.13 Support for Numba (fluids.numba)

Basic module which wraps most of fluids functions and classes to be compatible with the Numba dynamic Python
compiler. Numba is only supported on Python 3, and may require the latest version of Numba. Numba is rapidly
evolving, and hopefully in the future it will support more of the functionality of fluids.
Using the numba-accelerated version of fluids is easy; simply call functions and classes from the fluids.numba names-
pace.

2.13. Support for Numba (fluids.numba) 339


Fluids Documentation, Release 1.0.21

>>> import fluids


>>> import fluids.numba
>>> fluids.numba.bend_rounded(Di=4.020, rc=4.0*5, angle=30, Re=1E5)
0.11519070808085

There is a delay while the code is compiled when using Numba; the speed is not quite free.
It is easy to compare the speed of a function with and without Numba.

>>> %timeit fluids.numba.Stichlmair_flood(Vl=5E-3, rhog=5., rhol=1200., mug=5E-5,␣


˓→voidage=0.68, specific_area=260., C1=32., C2=7., C3=1.)

15.9 µs ± 266 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
>>> %timeit fluids.Stichlmair_flood(Vl=5E-3, rhog=5., rhol=1200., mug=5E-5, voidage=0.68,
˓→ specific_area=260., C1=32., C2=7., C3=1.)

109 µs ± 2.01 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)

Not everything is faster in the numba interface. For example, dictionary lookups have to be turned into slower jump
lists:

>>> %timeit fluids.numba.Darby3K(NPS=2., Re=10000., name='Valve, Angle valve, 45°, full␣


˓→line size, = 1')
7.04 µs ± 62.8 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
>>> %timeit fluids.Darby3K(NPS=2., Re=10000., name='Valve, Angle valve, 45°, full line␣
˓→size, = 1')
435 ns ± 9.01 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)

Functions which take strings as inputs are also known to normally get slower:

>>> %timeit fluids.numba.geometry.V_from_h(h=7, D=1.5, L=5., horizontal=False, sideA=


˓→'conical', sideB='conical', sideA_a=2., sideB_a=1.)

11.2 µs ± 457 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
>>> %timeit fluids.geometry.V_from_h(h=7, D=1.5, L=5., horizontal=False, sideA='conical',
˓→ sideB='conical', sideA_a=2., sideB_a=1.)

1.64 µs ± 25.6 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)

Nevertheless, using the function from the numba interface may be preferably, to allow an even larger program to be
completely compiled in njit mode.
Today, the list of things known not to work is as follows:
• integrate_drag_sphere (uses SciPys’s odeint)
• The geometry class TANK and HelicalCoil, PlateExchanger, RectangularFinExchanger, HyperbolicCoolingTower, AirCoo

– SA_partial_horiz_torispherical_head has numerical issues with numba; they exist in CPython


but are handled there with numba-incompatible code.
• Everything in fluids.particle_size_distribution
• Everything in fluids.atmosphere except fluids.atmosphere.ATMOSPHERE_1976
• Everything in fluids.piping (uses global lookups)
• In fluids.friction, only nearest_material_roughness, and material_roughness, are unsupported as
they use global lookups.
• In fluids.compressible, isothermal_gas, has experienced some regressions on the part of numba.

340 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

2.13.1 Numpy Support (fluids.numba_vectorized)

Numba also allows fluids to provide any of its supported functions as a numpy universal function. Numpy’s wonderful
broadcasting is implemented, so some arguments can be arrays and some can not.

>>> import fluids.numba_vectorized


>>> import numpy as np
>>> fluids.numba_vectorized.Moody(np.linspace(1e3, 1e4, 5), 1e-4)
array([0.06053664, 0.04271113, 0.03677223, 0.03343543, 0.03119781])
>>> fluids.numba_vectorized.Moody(np.linspace(1e3, 1e4, 5), np.linspace(1e-4, 1e-5, 5))
array([0.06053664, 0.0426931 , 0.03672111, 0.03333917, 0.03104575])

Unfortunately, keyword-arguments are not supported by Numba.

>>> fluids.numba_vectorized.Moody(Re=np.linspace(1e3, 1e4, 5), eD=np.linspace(1e-4, 1e-5,


˓→ 5))

ValueError: invalid number of arguments

Also default arguments are not presently supported by Numba.

>>> fluids.numba_vectorized.V_horiz_conical(108., 156., 42., np.linspace(0, 4, 4), False)


array([ 0. , 3333.2359001 , 9441.84364485, 17370.09634651])
>>> fluids.numba_vectorized.V_horiz_conical(108., 156., 42., np.linspace(0, 4, 4))
ValueError: invalid number of arguments

Yet another unfortunate limitation is that Numba’s ufunc machinery will not wrap function calls with multiple return
values.

>>> fluids.numba_vectorized.Mandhane_Gregory_Aziz_regime(np.array([0.6]), np.array([0.


˓→112]), np.array([915.12]), np.array([2.67]), np.array([180E-6]), np.array([14E-6]), np.

˓→array([0.065]), np.array([0.05]))

NotImplementedError: Tuple(unicode_type, float64, float64) cannot be represented as a␣


˓→Numpy dtype

Despite these limitations is is here that Numba really shines! Arrays are Numba’s strength.

>>> Res = np.linspace(1e4, 1e7, 10000)


>>> %timeit fluids.numba_vectorized.Clamond(Res, 1E-4, False)
797 µs ± 19 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)

About 80 nanoseconds per friction factor call! As compared to the fluids.numba interface (442 ns) and the normal
interface (1440 ns):

>>> %timeit fluids.numba.Clamond(1e4, 1E-4, False)


442 ns ± 7.36 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
>>> %timeit fluids.Clamond(1e4, 1E-4, False)
1.44 µs ± 40.5 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)

Please note this interface is provided, but what works and what doesn’t is mostly up to the numba project. This backend
is not quite as polished as their normal engine.
All of the regular Numba-compiled functions are built with the nogil flag, which means you can use Python’s threading
mechanism effectively to get the speed of parallel processing even without the numba_vectorized interface.

2.13. Support for Numba (fluids.numba) 341


Fluids Documentation, Release 1.0.21

2.14 Hydrology, weirs and open flow (fluids.open_flow)

This module contains functionality for calculating the flow rate of fluids in open channels. The Manning and Chezy
methods are implemented Weirs as well as several calculations for flow rate over weirs.
For reporting bugs, adding feature requests, or submitting pull requests, please use the GitHub issue tracker or contact
the author at Caleb.Andrew.Bell@gmail.com.

• Weirs
• Manning and Chezy Equations
• Manning Coefficients

2.14.1 Weirs

fluids.open_flow.Q_weir_V_Shen(h1, angle=90)
Calculates the flow rate across a V-notch (triangular) weir from the height of the liquid above the tip of the notch,
and with the angle of the notch. Most of these type of weir are 90 degrees. Model from [1] as reproduced in [2].
Flow rate is given by:
(︂ )︂
𝜃 √
𝑄 = 𝐶 tan 𝑔(ℎ1 + 𝑘)2.5
2

Parameters
h1 [float] Height of the fluid above the notch [m]
angle [float, optional] Angle of the notch [degrees]
Returns
Q [float] Volumetric flow rate across the weir [m^3/s]

Notes

angles = [20, 40, 60, 80, 100] Cs = [0.59, 0.58, 0.575, 0.575, 0.58] k = [0.0028, 0.0017, 0.0012, 0.001, 0.001]
The following limits apply to the use of this equation:
h1 >= 0.05 m h2 > 0.45 m h1/h2 <= 0.4 m b > 0.9 m
(︂ )︂
ℎ1 𝜃
tan <2
𝑏 2

Flows are lower than obtained by the curves at http://www.lmnoeng.com/Weirs/vweir.php.

342 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

References

[1], [2]

Examples

>>> Q_weir_V_Shen(0.6, angle=45)


0.21071725775478

fluids.open_flow.Q_weir_rectangular_Kindsvater_Carter(h1, h2, b)
Calculates the flow rate across rectangular weir from the height of the liquid above the crest of the notch, the
liquid depth beneath it, and the width of the notch. Model from [1] as reproduced in [2].
Flow rate is given by:
(︂ )︂
ℎ1 √
𝑄 = 0.554 1 − 0.0035 (𝑏 + 0.0025) 𝑔(ℎ1 + 0.0001)1.5
ℎ2

Parameters
h1 [float] Height of the fluid above the crest of the weir [m]
h2 [float] Height of the fluid below the crest of the weir [m]
b [float] Width of the rectangular flow section of the weir [m]
Returns
Q [float] Volumetric flow rate across the weir [m^3/s]

Notes

The following limits apply to the use of this equation:


b/b1 0.2 h1/h2 < 2 b > 0.15 m h1 > 0.03 m h2 > 0.1 m

References

[1], [2]

Examples

>>> Q_weir_rectangular_Kindsvater_Carter(0.2, 0.5, 1)


0.15545928949179422

fluids.open_flow.Q_weir_rectangular_SIA(h1, h2, b, b1)


Calculates the flow rate across rectangular weir from the height of the liquid above the crest of the notch, the
liquid depth beneath it, and the width of the notch. Model from [1] as reproduced in [2].
Flow rate is given by:
[︃ )︂2 ]︃ [︃ )︂4 (︂ )︂2 ]︃
0.00626 − 0.00519(𝑏/𝑏1 )2
(︂ (︂
𝑏 𝑏 ℎ1 √
𝑄 = 0.544 1 + 0.064 + 1 + 0.5 𝑏 𝑔ℎ1.5
𝑏1 ℎ1 + 0.0016 𝑏1 ℎ1 + ℎ2

Parameters

2.14. Hydrology, weirs and open flow (fluids.open_flow) 343


Fluids Documentation, Release 1.0.21

h1 [float] Height of the fluid above the crest of the weir [m]
h2 [float] Height of the fluid below the crest of the weir [m]
b [float] Width of the rectangular flow section of the weir [m]
b1 [float] Width of the full section of the channel [m]
Returns
Q [float] Volumetric flow rate across the weir [m^3/s]

Notes

The following limits apply to the use of this equation:


b/b1 0.2 h1/h2 < 2 b > 0.15 m h1 > 0.03 m h2 > 0.1 m

References

[1], [2]

Examples

>>> Q_weir_rectangular_SIA(0.2, 0.5, 1, 2)


1.0408858453811165

fluids.open_flow.Q_weir_rectangular_full_Ackers(h1, h2, b)
Calculates the flow rate across a full-channel rectangular weir from the height of the liquid above the crest of the
weir, the liquid depth beneath it, and the width of the channel. Model from [1] as reproduced in [2], confirmed
with [3].
Flow rate is given by:
(︂ )︂
ℎ1 √
𝑄 = 0.564 1 + 0.150 𝑏 𝑔(ℎ1 + 0.001)1.5
ℎ2

Parameters
h1 [float] Height of the fluid above the crest of the weir [m]
h2 [float] Height of the fluid below the crest of the weir [m]
b [float] Width of the channel section [m]
Returns
Q [float] Volumetric flow rate across the weir [m^3/s]

344 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

Notes

The following limits apply to the use of this equation:


h1 > 0.02 m h2 > 0.15 m h1/h2 2.2

References

[1], [2], [3]

Examples

Example as in [3], matches. However, example is unlikely in practice.

>>> Q_weir_rectangular_full_Ackers(h1=0.9, h2=0.6, b=5)


9.251938159899948

fluids.open_flow.Q_weir_rectangular_full_SIA(h1, h2, b)
Calculates the flow rate across a full-channel rectangular weir from the height of the liquid above the crest of the
weir, the liquid depth beneath it, and the width of the channel. Model from [1] as reproduced in [2].
Flow rate is given by:
)︂2
2√
(︂ )︂ (︂
0.000615 √ ℎ1 √
𝑄= 2 0.615 + 𝑏 𝑔ℎ1 + 0.5 𝑏 𝑔ℎ1.5
1
3 ℎ1 + 0.0016 ℎ1 + ℎ2

Parameters
h1 [float] Height of the fluid above the crest of the weir [m]
h2 [float] Height of the fluid below the crest of the weir [m]
b [float] Width of the channel section [m]
Returns
Q [float] Volumetric flow rate across the weir [m^3/s]

Notes

The following limits apply to the use of this equation:


0.025 < h < 0.8 m b > 0.3 m h2 > 0.3 m h1/h2 < 1

References

[1], [2]

2.14. Hydrology, weirs and open flow (fluids.open_flow) 345


Fluids Documentation, Release 1.0.21

Examples

Example compares terribly with the Ackers expression - probable error in [2]. DO NOT USE.

>>> Q_weir_rectangular_full_SIA(h1=0.3, h2=0.4, b=2)


1.1875825055400384

fluids.open_flow.Q_weir_rectangular_full_Rehbock(h1, h2, b)
Calculates the flow rate across a full-channel rectangular weir from the height of the liquid above the crest of the
weir, the liquid depth beneath it, and the width of the channel. Model from [1] as reproduced in [2].
Flow rate is given by:

2√
(︂ )︂
ℎ1 √
𝑄= 2 0.602 + 0.0832 𝑏 𝑔(ℎ1 + 0.00125)1.5
3 ℎ2

Parameters
h1 [float] Height of the fluid above the crest of the weir [m]
h2 [float] Height of the fluid below the crest of the weir [m]
b [float] Width of the channel section [m]
Returns
Q [float] Volumetric flow rate across the weir [m^3/s]

Notes

The following limits apply to the use of this equation:


0.03 m < h1 < 0.75 m b > 0.3 m h2 > 0.3 m h1/h2 < 1

References

[1], [2]

Examples

>>> Q_weir_rectangular_full_Rehbock(h1=0.3, h2=0.4, b=2)


0.6486856330601333

fluids.open_flow.Q_weir_rectangular_full_Kindsvater_Carter(h1, h2, b)
Calculates the flow rate across a full-channel rectangular weir from the height of the liquid above the crest of the
weir, the liquid depth beneath it, and the width of the channel. Model from [1] as reproduced in [2].
Flow rate is given by:

2√
(︂ )︂
ℎ1 √
𝑄= 2 0.602 + 0.0832 𝑏 𝑔(ℎ1 + 0.00125)1.5
3 ℎ2

Parameters
h1 [float] Height of the fluid above the crest of the weir [m]
h2 [float] Height of the fluid below the crest of the weir [m]

346 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

b [float] Width of the channel section [m]


Returns
Q [float] Volumetric flow rate across the weir [m^3/s]

Notes

The following limits apply to the use of this equation:


h1 > 0.03 m b > 0.15 m h2 > 0.1 m h1/h2 < 2

References

[1], [2]

Examples

>>> Q_weir_rectangular_full_Kindsvater_Carter(h1=0.3, h2=0.4, b=2)


0.641560300081563

2.14.2 Manning and Chezy Equations

fluids.open_flow.V_Manning(Rh, S, n)
Predicts the average velocity of a flow across an open channel of hydraulic radius Rh and slope S, given the
Manning roughness coefficient n.
Flow rate is given by:
1 2/3 0.5
𝑉 = 𝑅 𝑆
𝑛 ℎ
Parameters
Rh [float] Hydraulic radius of the channel, Flow Area/Wetted perimeter [m]
S [float] Slope of the channel, m/m [-]
n [float] Manning roughness coefficient; traditionally in the correct units, [s/m^(1/3)]
Returns
V [float] Average velocity of the channel [m/s]

Notes

This is equation is often given in imperial units multiplied by 1.49. Although n could be converted to be in
imperial units, in practice this has not been done and all tables keep it in the units of s/m^(1/3).

2.14. Hydrology, weirs and open flow (fluids.open_flow) 347


Fluids Documentation, Release 1.0.21

References

[1], [2]

Examples

Example is from [2], matches.

>>> V_Manning(0.2859, 0.005236, 0.03)


1.0467781958118971

fluids.open_flow.V_Chezy(Rh, S, C)
Predicts the average velocity of a flow across an open channel of hydraulic radius Rh and slope S, given the
Chezy coefficient C.
Flow rate is given by:
√︀
𝑉 =𝐶 𝑆𝑅ℎ

Parameters
Rh [float] Hydraulic radius of the channel, Flow Area/Wetted perimeter [m]
S [float] Slope of the channel, m/m [-]
C [float] Chezy coefficient [m^0.5/s]
Returns
V [float] Average velocity of the channel [m/s]

References

[1], [2], [3]

Examples

Custom example, checked.

>>> V_Chezy(Rh=5, S=0.001, C=26.153)


1.8492963648371776

fluids.open_flow.n_Manning_to_C_Chezy(n, Rh)
Converts a Manning roughness coefficient to a Chezy coefficient, given the hydraulic radius of the channel.
1 1/6
𝐶= 𝑅
𝑛 ℎ
Parameters
n [float] Manning roughness coefficient [s/m^(1/3)]
Rh [float] Hydraulic radius of the channel, Flow Area/Wetted perimeter [m]
Returns
C [float] Chezy coefficient [m^0.5/s]

348 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

References

[1]

Examples

Custom example, checked.

>>> n_Manning_to_C_Chezy(0.05, Rh=5)


26.15320972023661

fluids.open_flow.C_Chezy_to_n_Manning(C, Rh)
Converts a Chezy coefficient to a Manning roughness coefficient, given the hydraulic radius of the channel.
1 1/6
𝑛= 𝑅
𝐶 ℎ
Parameters
C [float] Chezy coefficient [m^0.5/s]
Rh [float] Hydraulic radius of the channel, Flow Area/Wetted perimeter [m]
Returns
n [float] Manning roughness coefficient [s/m^(1/3)]

References

[1]

Examples

Custom example, checked.

>>> C_Chezy_to_n_Manning(26.15, Rh=5)


0.05000613713238358

2.14. Hydrology, weirs and open flow (fluids.open_flow) 349


Fluids Documentation, Release 1.0.21

2.14.3 Manning Coefficients

fluids.open_flow.n_natural = {'Flood plains': {'Brush, light brush and trees, in summer':


(0.04, 0.06, 0.08), 'Brush, light brush and trees, in winter': (0.035, 0.05, 0.06),
'Brush, medium to dense brush, in summer': (0.07, 0.1, 0.16), 'Brush, medium to dense
brush, in winter': (0.045, 0.07, 0.11), 'Brush, scattered brush, heavy weeds': (0.035,
0.05, 0.07), 'Cultivated areas, mature field crops': (0.03, 0.04, 0.05), 'Cultivated
areas, mature row crops': (0.025, 0.035, 0.045), 'Cultivated areas, no crop': (0.02,
0.03, 0.04), 'Pasture, no brush, high grass': (0.03, 0.035, 0.05), 'Pasture, no brush,
short grass': (0.025, 0.03, 0.035), 'Trees, cleared land with tree stumps, heavy growth
of sprouts': (0.05, 0.06, 0.08), 'Trees, cleared land with tree stumps, no sprouts':
(0.03, 0.04, 0.05), 'Trees, dense willows, summer, straight': (0.11, 0.15, 0.2), 'Trees,
heavy stand of timber, a few down trees, little undergrowth, flood stage below branches':
(0.08, 0.1, 0.12), 'Trees, heavy stand of timber, a few down trees, little undergrowth,
flood stage reaching branches': (0.1, 0.12, 0.16)}, 'Major streams': {'Irregular, rough':
(0.035, 0.07, 0.1)}, 'Minor streams': {'Clean, winding, some pools and shoals': (0.033,
0.04, 0.045), 'Clean, winding, some pools and shoals, more weeds and stones': (0.045,
0.05, 0.06), 'Clean, winding, some pools and shoals, some weeds and stones': (0.035,
0.045, 0.05), 'Clean, winding, some pools and shoals, some weeds and stones, lower
stages, less effective slopes and sections': (0.04, 0.048, 0.055), 'Mountain streams, no
vegetation in channel, banks steep, trees and bush on the banks submerged to high stages,
with cobbles and large boulders on bottom': (0.04, 0.05, 0.07), 'Mountain streams, no
vegetation in channel, banks steep, trees and bush on the banks submerged to high stages,
with gravel, cobbles and few boulders on bottom': (0.03, 0.04, 0.05), 'Plain streams,
clean, straight, full stage, no rifts or deep pools': (0.025, 0.03, 0.033), 'Plain
streams, clean, straight, full stage, no rifts or deep pools, more stones and weeds':
(0.03, 0.035, 0.04), 'Sluggish reaches, weedy, deep pools': (0.05, 0.07, 0.08), 'Very
weedy reaches, deep pools, or floodways with heavy stand of timber and underbrush':
(0.075, 0.1, 0.15)}}
fluids.open_flow.n_excavated_dredged = {'Channels not maintained, with weeds and uncut
brush': {'Clean bottom, brush on sides': (0.04, 0.05, 0.08), 'Clean bottom, brush on
sides, highest stage of flow': (0.045, 0.07, 0.11), 'Dense brush, high stage': (0.08,
0.1, 0.14), 'Dense weeds, as high as the flow depth': (0.05, 0.08, 0.12)},
'Dragline-excavated or dredged': {'Light brush on banks': (0.035, 0.05, 0.06), 'No
vegetation': (0.025, 0.028, 0.033)}, 'Earth, straight, and uniform': {'Clean, after
weathering': (0.018, 0.022, 0.025), 'Clean, recently completed': (0.016, 0.018, 0.02),
'Gravel, uniform section, clean': (0.022, 0.025, 0.03), 'With short grass and few weeds':
(0.022, 0.027, 0.033)}, 'Earth, winding and sluggish': {'Cobble bottom; clean sides':
(0.03, 0.04, 0.05), 'Dense weeds or aquatic plants, in deep channels': (0.03, 0.035,
0.04), 'Earth bottom; rubble sides': (0.028, 0.03, 0.035), 'Grass and some weeds':
(0.025, 0.03, 0.033), 'No vegetation': (0.023, 0.025, 0.03), 'Stony bottom; weedy banks':
(0.025, 0.035, 0.04)}, 'Rock cuts': {'Jaged and Irregular': (0.035, 0.04, 0.05), 'Smooth
and Uniform': (0.025, 0.035, 0.04)}}

350 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

fluids.open_flow.n_lined_built = {'Asphalt': {'Rough': (0.016, 0.016, 0.016), 'Smooth':


(0.013, 0.013, 0.013)}, 'Brick': {'Glazed': (0.011, 0.013, 0.015), 'In-cement mortar':
(0.012, 0.015, 0.018)}, 'Cement': {'Mortar': (0.011, 0.013, 0.015), 'Neat, surface':
(0.01, 0.011, 0.013)}, 'Concrete': {'Finished, with gravel on bottom': (0.015, 0.017,
0.02), 'Float finish': (0.013, 0.015, 0.016), 'Gunite, good section': (0.016, 0.019,
0.023), 'Gunite, wavy section': (0.018, 0.022, 0.025), 'On good excavated rock': (0.017,
0.02, 0.02), 'On irregular excavated rock': (0.022, 0.027, 0.027), 'Trowel finish':
(0.011, 0.013, 0.015), 'Unfinished': (0.014, 0.017, 0.02)}, 'Concrete bottom float':
{'Finished with sides of cement rubble masonry': (0.02, 0.025, 0.03), 'Finished with
sides of cement rubble masonry, plastered': (0.016, 0.02, 0.024), 'Finished with sides of
dressed stone in mortar': (0.015, 0.017, 0.02), 'Finished with sides of dry rubble or
riprap': (0.02, 0.03, 0.035), 'Finished with sides of random stone in mortar': (0.017,
0.02, 0.024)}, 'Dressed ashlar': {'Stone paving': (0.013, 0.015, 0.017)}, 'Gravel
bottom': {'Sides of dry rubble or riprap': (0.023, 0.033, 0.036), 'Sides of formed
concrete': (0.017, 0.02, 0.025), 'Sides of random stone in mortar': (0.02, 0.023,
0.026)}, 'Masonry': {'Cemented rubble': (0.017, 0.025, 0.03), 'Dry rubble': (0.023,
0.032, 0.035)}, 'Metal': {'Corrugated': (0.021, 0.025, 0.03), 'Smooth steel, painted':
(0.012, 0.013, 0.017), 'Smooth steel, unpainted': (0.011, 0.012, 0.014)}, 'Vegatal':
{'Lined': (0.03, 0.4, 0.5)}, 'Wood': {'Lined with Roofing paper': (0.01, 0.014, 0.017),
'Planed, creosoted': (0.011, 0.012, 0.015), 'Planed, untreated': (0.01, 0.012, 0.014),
'Plank with battens': (0.012, 0.015, 0.018), 'Unplaned': (0.011, 0.013, 0.015)}}
fluids.open_flow.n_closed_conduit = {'Acrylic': {'Smooth': (0.008, 0.009, 0.01)},
'Brass': {'Smooth': (0.009, 0.01, 0.013)}, 'Brickwork': {'Glazed': (0.011, 0.013, 0.015),
'Lined with cement mortar': (0.012, 0.015, 0.017)}, 'Cast Iron': {'Coated ': (0.01,
0.013, 0.014), 'Uncoated': (0.011, 0.014, 0.016)}, 'Cement': {'Mortar': (0.011, 0.013,
0.015), 'Neat, surface': (0.01, 0.011, 0.013)}, 'Clay': {'Common drainage tile': (0.011,
0.013, 0.017), 'Vitrified Subdrain with open joint': (0.014, 0.016, 0.018), 'Vitrified
sewer': (0.011, 0.014, 0.017), 'Vitrified sewer with manholes, inlet, etc.': (0.013,
0.015, 0.017)}, 'Concrete': {'Culvert, some bends, connections, and debris': (0.011,
0.013, 0.014), 'Culvert, straight and free of debris': (0.01, 0.011, 0.013), 'Finished':
(0.011, 0.012, 0.014), 'Sewer with manholes, inlet, straight': (0.013, 0.015, 0.017),
'Unfinished, rough wood form': (0.015, 0.017, 0.02), 'Unfinished, smooth wood form':
(0.012, 0.014, 0.016), 'Unfinished, steel form': (0.012, 0.013, 0.014)}, 'Corrugated
metal': {'Storm drain': (0.021, 0.024, 0.03), 'Subdrain': (0.017, 0.019, 0.021)},
'Glass': {'Smooth': (0.009, 0.01, 0.013)}, 'Other': {'Paved invert, sewer, smooth
bottom': (0.016, 0.019, 0.02), 'Rubble masonry, cemented': (0.018, 0.025, 0.03),
'Sanitary sewers coated with sewage slime with bends and connections': (0.012, 0.013,
0.016)}, 'Steel': {'Lockbar and welded': (0.01, 0.012, 0.014), 'Riveted and spiral':
(0.013, 0.016, 0.017)}, 'Wood': {'Laminated, treated': (0.015, 0.017, 0.02), 'Stave':
(0.01, 0.012, 0.014)}, 'Wrought Iron': {'Black ': (0.012, 0.014, 0.015), 'Galvanized':
(0.013, 0.016, 0.017)}}

2.14. Hydrology, weirs and open flow (fluids.open_flow) 351


Fluids Documentation, Release 1.0.21

fluids.open_flow.n_dicts = [{'Major streams': {'Irregular, rough': (0.035, 0.07, 0.1)},


'Flood plains': {'Pasture, no brush, short grass': (0.025, 0.03, 0.035), 'Pasture, no
brush, high grass': (0.03, 0.035, 0.05), 'Cultivated areas, no crop': (0.02, 0.03, 0.04),
'Cultivated areas, mature row crops': (0.025, 0.035, 0.045), 'Cultivated areas, mature
field crops': (0.03, 0.04, 0.05), 'Brush, scattered brush, heavy weeds': (0.035, 0.05,
0.07), 'Brush, light brush and trees, in winter': (0.035, 0.05, 0.06), 'Brush, light
brush and trees, in summer': (0.04, 0.06, 0.08), 'Brush, medium to dense brush, in
winter': (0.045, 0.07, 0.11), 'Brush, medium to dense brush, in summer': (0.07, 0.1,
0.16), 'Trees, dense willows, summer, straight': (0.11, 0.15, 0.2), 'Trees, cleared land
with tree stumps, no sprouts': (0.03, 0.04, 0.05), 'Trees, cleared land with tree stumps,
heavy growth of sprouts': (0.05, 0.06, 0.08), 'Trees, heavy stand of timber, a few down
trees, little undergrowth, flood stage below branches': (0.08, 0.1, 0.12), 'Trees, heavy
stand of timber, a few down trees, little undergrowth, flood stage reaching branches':
(0.1, 0.12, 0.16)}, 'Minor streams': {'Mountain streams, no vegetation in channel, banks
steep, trees and bush on the banks submerged to high stages, with gravel, cobbles and few
boulders on bottom': (0.03, 0.04, 0.05), 'Mountain streams, no vegetation in channel,
banks steep, trees and bush on the banks submerged to high stages, with cobbles and large
boulders on bottom': (0.04, 0.05, 0.07), 'Plain streams, clean, straight, full stage, no
rifts or deep pools': (0.025, 0.03, 0.033), 'Plain streams, clean, straight, full stage,
no rifts or deep pools, more stones and weeds': (0.03, 0.035, 0.04), 'Clean, winding,
some pools and shoals': (0.033, 0.04, 0.045), 'Clean, winding, some pools and shoals,
some weeds and stones': (0.035, 0.045, 0.05), 'Clean, winding, some pools and shoals,
some weeds and stones, lower stages, less effective slopes and sections': (0.04, 0.048,
0.055), 'Clean, winding, some pools and shoals, more weeds and stones': (0.045, 0.05,
0.06), 'Sluggish reaches, weedy, deep pools': (0.05, 0.07, 0.08), 'Very weedy reaches,
deep pools, or floodways with heavy stand of timber and underbrush': (0.075, 0.1,
0.15)}}, {'Earth, straight, and uniform': {'Clean, recently completed': (0.016, 0.018,
0.02), 'Clean, after weathering': (0.018, 0.022, 0.025), 'Gravel, uniform section,
clean': (0.022, 0.025, 0.03), 'With short grass and few weeds': (0.022, 0.027, 0.033)},
'Earth, winding and sluggish': {'No vegetation': (0.023, 0.025, 0.03), 'Grass and some
weeds': (0.025, 0.03, 0.033), 'Dense weeds or aquatic plants, in deep channels': (0.03,
0.035, 0.04), 'Earth bottom; rubble sides': (0.028, 0.03, 0.035), 'Stony bottom; weedy
banks': (0.025, 0.035, 0.04), 'Cobble bottom; clean sides': (0.03, 0.04, 0.05)},
'Dragline-excavated or dredged': {'No vegetation': (0.025, 0.028, 0.033), 'Light brush on
banks': (0.035, 0.05, 0.06)}, 'Rock cuts': {'Smooth and Uniform': (0.025, 0.035, 0.04),
'Jaged and Irregular': (0.035, 0.04, 0.05)}, 'Channels not maintained, with weeds and
uncut brush': {'Dense weeds, as high as the flow depth': (0.05, 0.08, 0.12), 'Clean
bottom, brush on sides': (0.04, 0.05, 0.08), 'Clean bottom, brush on sides, highest stage
of flow': (0.045, 0.07, 0.11), 'Dense brush, high stage': (0.08, 0.1, 0.14)}}, {'Metal':
{'Smooth steel, unpainted': (0.011, 0.012, 0.014), 'Smooth steel, painted': (0.012,
0.013, 0.017), 'Corrugated': (0.021, 0.025, 0.03)}, 'Cement': {'Neat, surface': (0.01,
0.011, 0.013), 'Mortar': (0.011, 0.013, 0.015)}, 'Wood': {'Planed, untreated': (0.01,
0.012, 0.014), 'Planed, creosoted': (0.011, 0.012, 0.015), 'Unplaned': (0.011, 0.013,
0.015), 'Plank with battens': (0.012, 0.015, 0.018), 'Lined with Roofing paper': (0.01,
0.014, 0.017)}, 'Concrete': {'Trowel finish': (0.011, 0.013, 0.015), 'Float finish':
(0.013, 0.015, 0.016), 'Finished, with gravel on bottom': (0.015, 0.017, 0.02),
'Unfinished': (0.014, 0.017, 0.02), 'Gunite, good section': (0.016, 0.019, 0.023),
'Gunite, wavy section': (0.018, 0.022, 0.025), 'On good excavated rock': (0.017, 0.02,
0.02), 'On irregular excavated rock': (0.022, 0.027, 0.027)}, 'Concrete bottom float':
{'Finished with sides of dressed stone in mortar': (0.015, 0.017, 0.02), 'Finished with
sides of random stone in mortar': (0.017, 0.02, 0.024), 'Finished with sides of cement
rubble masonry, plastered': (0.016, 0.02, 0.024), 'Finished with sides of cement rubble
masonry': (0.02, 0.025, 0.03), 'Finished with sides of dry rubble or riprap': (0.02,
0.03, 0.035)}, 'Gravel bottom': {'Sides of formed concrete': (0.017, 0.02, 0.025), 'Sides
of random stone in mortar': (0.02, 0.023, 0.026), 'Sides of dry rubble or riprap':
(0.023, 0.033, 0.036)}, 'Brick': {'Glazed': (0.011, 0.013, 0.015), 'In-cement mortar':
(0.012, 0.015, 0.018)}, 'Masonry': {'Cemented rubble': (0.017, 0.025,
352 Chapter 'DryReference
2. API
0.03),
rubble': (0.023, 0.032, 0.035)}, 'Dressed ashlar': {'Stone paving': (0.013, 0.015,
0.017)}, 'Asphalt': {'Smooth': (0.013, 0.013, 0.013), 'Rough': (0.016, 0.016, 0.016)},
'Vegatal': {'Lined': (0.03, 0.4, 0.5)}}, {'Brass': {'Smooth': (0.009, 0.01, 0.013)},
Fluids Documentation, Release 1.0.21

Built-in mutable sequence.


If no argument is given, the constructor creates a new empty list. The argument must be an iterable if specified.

2.15 Packed bed pressure drop (fluids.packed_bed)

This module contains correlations for calculating the pressure drop across a packed bed. Several correlations for void
fraction are also included.
For reporting bugs, adding feature requests, or submitting pull requests, please use the GitHub issue tracker or contact
the author at Caleb.Andrew.Bell@gmail.com.

• Packed Bed Correlation Interfaces


• Packed Bed Correlations
• Voidage Correlations

2.15.1 Packed Bed Correlation Interfaces

fluids.packed_bed.dP_packed_bed(dp, voidage, vs, rho, mu, L=1, Dt=None, sphericity=None, Method=None)


This function handles choosing which pressure drop in a packed bed correlation is used. Automatically select
which correlation to use if none is provided. Returns None if insufficient information is provided.
Preferred correlations are ‘Erdim, Akgiray & Demir’ when tube diameter is not provided, and ‘Harrison, Brunner
& Hecker’ when tube diameter is provided. If you are using a particles in a narrow tube between 2 and 3 particle
diameters, expect higher than normal voidages (0.4-0.5) and used the method ‘Guo, Sun, Zhang, Ding & Liu’.
Parameters
dp [float] Particle diameter of spheres [m]
voidage [float] Void fraction of bed packing [-]
vs [float] Superficial velocity of the fluid (volumetric flow rate/cross-sectional area) [m/s]
rho [float] Density of the fluid [kg/m^3]
mu [float] Viscosity of the fluid, [Pa*s]
L [float, optional] Length the fluid flows in the packed bed [m]
Dt [float, optional] Diameter of the tube, [m]
sphericity [float, optional] Sphericity of the particles [-]
Returns
dP [float] Pressure drop across the bed [Pa]
Other Parameters
Method [string, optional] A string of the function name to use, as in the dictionary
packed_beds_correlations

2.15. Packed bed pressure drop (fluids.packed_bed) 353


Fluids Documentation, Release 1.0.21

Examples

>>> dP_packed_bed(dp=8E-4, voidage=0.4, vs=1E-3, rho=1E3, mu=1E-3)


1438.2826958844414
>>> dP_packed_bed(dp=8E-4, voidage=0.4, vs=1E-3, rho=1E3, mu=1E-3, Dt=0.01)
1255.1625662548427
>>> dP_packed_bed(dp=0.05, voidage=0.492, vs=0.1, rho=1E3, mu=1E-3, Dt=0.015,␣
˓→Method='Guo, Sun, Zhang, Ding & Liu')
18782.499710673364

fluids.packed_bed.dP_packed_bed_methods(dp, voidage, vs, rho, mu, L=1.0, Dt=None, check_ranges=False)


This function handles determining which pressure drop in a packed bed correlation are suitable for the provided
inputs.
Preferred correlations are ‘Erdim, Akgiray & Demir’ when tube diameter is not provided, and ‘Harrison, Brunner
& Hecker’ when tube diameter is provided.
Parameters
dp [float] Particle diameter of spheres [m]
voidage [float] Void fraction of bed packing [-]
vs [float] Superficial velocity of the fluid (volumetric flow rate/cross-sectional area) [m/s]
rho [float] Density of the fluid [kg/m^3]
mu [float] Viscosity of the fluid, [Pa*s]
L [float, optional] Length the fluid flows in the packed bed [m]
Dt [float, optional] Diameter of the tube, [m]
check_ranges [bool, optional] Added for Future use only
Returns
methods [list] List of methods which can be used to calculate dP with the given inputs

Examples

>>> dP_packed_bed_methods(dp=8E-4, voidage=0.4, vs=1E-3, rho=1E3, mu=1E-3, L=1.0)[0]


'Erdim, Akgiray & Demir'
>>> dP_packed_bed_methods(dp=8E-4, voidage=0.4, vs=1E-3, rho=1E3, mu=1E-3, L=1,␣
˓→Dt=1e-2)[0]

'Harrison, Brunner & Hecker'

2.15.2 Packed Bed Correlations

fluids.packed_bed.Ergun(dp, voidage, vs, rho, mu, L=1.0)


Calculates pressure drop across a packed bed of spheres using a correlation developed in [1], as shown in [2] and
[3]. Eighteenth most accurate correlation overall in the review of [2].
Most often presented in the following form:

150𝜇(1 − 𝜖)2 𝑣𝑠 𝐿 1.75(1 − 𝜖)𝜌𝑣𝑠2 𝐿


∆𝑃 = +
𝜖3 𝑑2𝑝 𝜖3 𝑑 𝑝

354 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

It is also often presented with a term for sphericity, which is multiplied by particle diameter everywhere in the
equation. However, this is highly empirical and better correlations for beds of differently-shaped particles exist.
To use sphericity in this model, multiple the input particle diameter by the spericity separately.
In the review of [2], it is expressed in terms of a parameter fp, shown below. This is a convenient means of
expressing all forms of pressure drop in packed beds correlations in a way that allows for easy comparison.
(1 − 𝜖)2
(︂ (︂ )︂)︂
𝑅𝑒
𝑓𝑝 = 150 + 1.75
1−𝜖 𝜖3 𝑅𝑒
∆𝑃 𝑑𝑝
𝑓𝑝 =
𝜌𝑣𝑠2 𝐿
𝜌𝑣𝑠 𝑑𝑝
𝑅𝑒 =
𝜇
Parameters
dp [float] Particle diameter of spheres [m]
voidage [float] Void fraction of bed packing [-]
vs [float] Superficial velocity of the fluid (volumetric flow rate/cross-sectional area)[m/s]
rho [float] Density of the fluid [kg/m^3]
mu [float] Viscosity of the fluid, [Pa*s]
L [float, optional] Length the fluid flows in the packed bed [m]
Returns
dP [float] Pressure drop across the bed [Pa]

Notes

The first term in this equation represents laminar loses, and the second, turbulent loses. Developed with data
from spheres, sand, and pulverized coke. Fluids tested were carbon dioxide, nitrogen, methane, and hydrogen.
Validity range shown in [3] is 1 < 𝑅𝑒𝐸𝑟𝑔 < 2300. Over predicts pressure drop for 𝑅𝑒𝐸𝑟𝑔 > 700.

References

[1], [2], [3]

Examples

>>> Ergun(dp=8E-4, voidage=0.4, vs=1E-3, rho=1E3, mu=1E-3)


1338.8671874999995

fluids.packed_bed.Kuo_Nydegger(dp, voidage, vs, rho, mu, L=1.0)


Calculates pressure drop across a packed bed of spheres using a correlation developed in [1], as shown in [2] and
[3]. Thirty-eighth most accurate correlation overall in the review of [2].
(︃ )︂0.87 )︃
(1 − 𝜖)2
(︂
𝑅𝑒
𝑓𝑝 = 276.23 + 5.05
1−𝜖 𝜖3 𝑅𝑒

∆𝑃 𝑑𝑝
𝑓𝑝 =
𝜌𝑣𝑠2 𝐿

2.15. Packed bed pressure drop (fluids.packed_bed) 355


Fluids Documentation, Release 1.0.21

𝜌𝑣𝑠 𝑑𝑝
𝑅𝑒 =
𝜇
Parameters
dp [float] Particle diameter of spheres [m]
voidage [float] Void fraction of bed packing [-]
vs [float] Superficial velocity of the fluid (volumetric flow rate/cross-sectional area)[m/s]
rho [float] Density of the fluid [kg/m^3]
mu [float] Viscosity of the fluid, [Pa*s]
L [float, optional] Length the fluid flows in the packed bed [m]
Returns
dP [float] Pressure drop across the bed [Pa]

Notes

Validity range shown in [2] as for a range of 460 < 𝑅𝑒 < 14600. 0.3760 < 𝜖 < 0.3901. Developed with data
from rough granular ball propellants beds, with air.

References

[1], [2], [3]

Examples

>>> Kuo_Nydegger(dp=8E-1, voidage=0.4, vs=1E-3, rho=1E3, mu=1E-3)


0.025651460973648624

fluids.packed_bed.Jones_Krier(dp, voidage, vs, rho, mu, L=1.0)


Calculates pressure drop across a packed bed of spheres using a correlation developed in [1], also shown in [2].
Tenth most accurate correlation overall in the review of [2].
(︃ )︂0.87 )︃
(1 − 𝜖)2
(︂
𝑅𝑒
𝑓𝑝 = 150 + 3.89
1−𝜖 𝜖3 𝑅𝑒

∆𝑃 𝑑𝑝
𝑓𝑝 =
𝜌𝑣𝑠2 𝐿
𝜌𝑣𝑠 𝑑𝑝
𝑅𝑒 =
𝜇
Parameters
dp [float] Particle diameter of spheres [m]
voidage [float] Void fraction of bed packing [-]
vs [float] Superficial velocity of the fluid (volumetric flow rate/cross-sectional area)[m/s]
rho [float] Density of the fluid [kg/m^3]
mu [float] Viscosity of the fluid, [Pa*s]
L [float, optional] Length the fluid flows in the packed bed [m]

356 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

Returns
dP [float] Pressure drop across the bed [Pa]

Notes

Validity range shown in [1] as for a range of 733 < 𝑅𝑒 < 126, 670. 0.3804 < 𝜖 < 0.4304. Developed from
data of spherical glass beads.

References

[1], [2]

Examples

>>> Jones_Krier(dp=8E-4, voidage=0.4, vs=1E-3, rho=1E3, mu=1E-3)


1362.2719449873746

fluids.packed_bed.Carman(dp, voidage, vs, rho, mu, L=1.0)


Calculates pressure drop across a packed bed of spheres using a correlation developed in [1], as shown in [2].
Fifth most accurate correlation overall in the review of [2]. Also shown in [3].
(︃ )︂0.9 )︃
(1 − 𝜖)2
(︂
𝑅𝑒
𝑓𝑝 = 180 + 2.871
1−𝜖 𝜖3 𝑅𝑒

∆𝑃 𝑑𝑝
𝑓𝑝 =
𝜌𝑣𝑠2 𝐿
𝜌𝑣𝑠 𝑑𝑝
𝑅𝑒 =
𝜇
Parameters
dp [float] Particle diameter of spheres [m]
voidage [float] Void fraction of bed packing [-]
vs [float] Superficial velocity of the fluid (volumetric flow rate/cross-sectional area)[m/s]
rho [float] Density of the fluid [kg/m^3]
mu [float] Viscosity of the fluid, [Pa*s]
L [float, optional] Length the fluid flows in the packed bed [m]
Returns
dP [float] Pressure drop across the bed [Pa]

2.15. Packed bed pressure drop (fluids.packed_bed) 357


Fluids Documentation, Release 1.0.21

Notes

Valid in [1], [2], and [3] for a range of 300 < 𝑅𝑒𝐸𝑟𝑔 < 60, 000.

References

[1], [2], [3]

Examples

>>> Carman(dp=8E-4, voidage=0.4, vs=1E-3, rho=1E3, mu=1E-3)


1614.721678121775

fluids.packed_bed.Hicks(dp, voidage, vs, rho, mu, L=1.0)


Calculates pressure drop across a packed bed of spheres using a correlation developed in [1], as shown in [2].
Twenty-third most accurate correlation overall in the review of [2]. Also shown in [3].

(1 − 𝜖)1.2
𝑓𝑝 = 6.8
𝑅𝑒0.2 𝜖3
∆𝑃 𝑑𝑝
𝑓𝑝 =
𝜌𝑣𝑠2 𝐿
𝜌𝑣𝑠 𝑑𝑝
𝑅𝑒 =
𝜇
Parameters
dp [float] Particle diameter of spheres [m]
voidage [float] Void fraction of bed packing [-]
vs [float] Superficial velocity of the fluid (volumetric flow rate/cross-sectional area)[m/s]
rho [float] Density of the fluid [kg/m^3]
mu [float] Viscosity of the fluid, [Pa*s]
L [float, optional] Length the fluid flows in the packed bed [m]
Returns
dP [float] Pressure drop across the bed [Pa]

Notes

Valid in [1], [2], and [3] for a range of 300 < 𝑅𝑒𝐸𝑟𝑔 < 60, 000.

References

[1], [2], [3]

358 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

Examples

>>> Hicks(dp=0.01, voidage=0.4, vs=1E-3, rho=1E3, mu=1E-3)


3.631703956680737

fluids.packed_bed.Brauer(dp, voidage, vs, rho, mu, L=1.0)


Calculates pressure drop across a packed bed of spheres using a correlation developed in [1], as shown in [2].
Seventh most accurate correlation overall in the review of [2]. Also shown in [3].
(︃ )︂0.9 )︃
(1 − 𝜖)2
(︂
𝑅𝑒
𝑓𝑝 = 160 + 3
1−𝜖 𝜖3 𝑅𝑒

∆𝑃 𝑑𝑝
𝑓𝑝 =
𝜌𝑣𝑠2 𝐿
𝜌𝑣𝑠 𝑑𝑝
𝑅𝑒 =
𝜇
Parameters
dp [float] Particle diameter of spheres [m]
voidage [float] Void fraction of bed packing [-]
vs [float] Superficial velocity of the fluid (volumetric flow rate/cross-sectional area)[m/s]
rho [float] Density of the fluid [kg/m^3]
mu [float] Viscosity of the fluid, [Pa*s]
L [float, optional] Length the fluid flows in the packed bed [m]
Returns
dP [float] Pressure drop across the bed [Pa]

Notes

The original article [1] has not been reviewed. In [2], is stated as for a range of 2 < 𝑅𝑒𝐸𝑟𝑔 < 20, 000. In [3], is
stated as for a range of 0.01 < 𝑅𝑒𝐸𝑟𝑔 < 40, 000.

References

[1], [2], [3]

Examples

>>> Brauer(dp=8E-4, voidage=0.4, vs=1E-3, rho=1E3, mu=1E-3)


1441.5479196020563

fluids.packed_bed.KTA(dp, voidage, vs, rho, mu, L=1.0)


Calculates pressure drop across a packed bed of spheres using a correlation developed in [1], as shown in [2].
Third most accurate correlation overall in the review of [2].
(︃ )︂0.9 )︃
(1 − 𝜖)2
(︂
𝑅𝑒
𝑓𝑝 = 160 + 3
1−𝜖 𝜖3 𝑅𝑒

2.15. Packed bed pressure drop (fluids.packed_bed) 359


Fluids Documentation, Release 1.0.21

∆𝑃 𝑑𝑝
𝑓𝑝 =
𝜌𝑣𝑠2 𝐿
𝜌𝑣𝑠 𝑑𝑝
𝑅𝑒 =
𝜇
Parameters
dp [float] Particle diameter of spheres [m]
voidage [float] Void fraction of bed packing [-]
vs [float] Superficial velocity of the fluid (volumetric flow rate/cross-sectional area)[m/s]
rho [float] Density of the fluid [kg/m^3]
mu [float] Viscosity of the fluid, [Pa*s]
L [float, optional] Length the fluid flows in the packed bed [m]
Returns
dP [float] Pressure drop across the bed [Pa]

Notes

Developed for gas flow through pebbles in nuclear reactors.


In [2], stated as for a range of 1 < 𝑅𝐸𝐸𝑟𝑔 < 100, 000. In [1], a limit on porosity is stated as 0.36 < 𝜖 < 0.42.

References

[1], [2]

Examples

>>> KTA(dp=8E-4, voidage=0.4, vs=1E-3, rho=1E3, mu=1E-3)


1440.409277034248

fluids.packed_bed.Erdim_Akgiray_Demir(dp, voidage, vs, rho, mu, L=1.0)


Calculates pressure drop across a packed bed of spheres using a correlation developed in [1], claiming to be the
best model to date.

𝑓𝑣 = 160 + 2.81𝑅𝑒0.904
𝐸𝑟𝑔

∆𝑃 𝑑2𝑝 𝜖3
𝑓𝑣 =
𝜇𝑣𝑠 𝐿 (1 − 𝜖)2
𝜌𝑣𝑠 𝑑𝑝
𝑅𝑒𝐸𝑟𝑔 =
𝜇(1 − 𝜖)
Parameters
dp [float] Particle diameter of spheres [m]
voidage [float] Void fraction of bed packing [-]
vs [float] Superficial velocity of the fluid (volumetric flow rate/cross-sectional area)[m/s]
rho [float] Density of the fluid [kg/m^3]

360 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

mu [float] Viscosity of the fluid, [Pa*s]


L [float, optional] Length the fluid flows in the packed bed [m]
Returns
dP [float] Pressure drop across the bed [Pa]

Notes

Developed with data in the range of:

2 < 𝑅𝑒𝐸𝑟𝑔 < 3582


4 < 𝑑𝑡 /𝑑𝑝 < 34.1
0.377 < 𝜖 < 0.470

References

[1]

Examples

>>> Erdim_Akgiray_Demir(dp=8E-4, voidage=0.4, vs=1E-3, rho=1E3, mu=1E-3)


1438.2826958844414

fluids.packed_bed.Fahien_Schriver(dp, voidage, vs, rho, mu, L=1.0)


Calculates pressure drop across a packed bed of spheres using a correlation developed in [1], as shown in [2].
Second most accurate correlation overall in the review of [2].
(︂ (︂ )︂)︂
𝑓1𝐿 𝑓1𝑇 1−𝜖
𝑓𝑝 = 𝑞 + (1 − 𝑞) 𝑓2 +
𝑅𝑒𝐸𝑟𝑔 𝑅𝑒𝐸𝑟𝑔 𝜖3
(︂ 2 )︂
𝜖 (1 − 𝜖)
𝑞 = exp − 𝑅𝑒𝐸𝑟𝑔
12.6
136
𝑓1𝐿 =
(1 − 𝜖)0.38
29
𝑓1𝑇 =
(1 − 𝜖)1.45 𝜖2
1.87𝜖0.75
𝑓2 =
(1 − 𝜖)0.26
∆𝑃 𝑑𝑝
𝑓𝑝 =
𝜌𝑣𝑠2 𝐿
𝜌𝑣𝑠 𝑑𝑝
𝑅𝑒𝐸𝑟𝑔 =
𝜇(1 − 𝜖)
Parameters
dp [float] Particle diameter of spheres [m]
voidage [float] Void fraction of bed packing [-]
vs [float] Superficial velocity of the fluid (volumetric flow rate/cross-sectional area)[m/s]

2.15. Packed bed pressure drop (fluids.packed_bed) 361


Fluids Documentation, Release 1.0.21

rho [float] Density of the fluid [kg/m^3]


mu [float] Viscosity of the fluid, [Pa*s]
L [float, optional] Length the fluid flows in the packed bed [m]
Returns
dP [float] Pressure drop across the bed [Pa]

Notes

No range of validity available.

References

[1], [2]

Examples

>>> Fahien_Schriver(dp=8E-4, voidage=0.4, vs=1E-3, rho=1E3, mu=1E-3)


1470.6175541844711

fluids.packed_bed.Tallmadge(dp, voidage, vs, rho, mu, L=1.0)


Calculates pressure drop across a packed bed of spheres using a correlation developed in [1], as shown in [2] and
[3].
(︃ )︂5/6 )︃
(1 − 𝜖)2
(︂
𝑅𝑒
𝑓𝑝 = 150 + 4.2
1−𝜖 𝜖3 𝑅𝑒

∆𝑃 𝑑𝑝
𝑓𝑝 =
𝜌𝑣𝑠2 𝐿
𝜌𝑣𝑠 𝑑𝑝
𝑅𝑒 =
𝜇
Parameters
dp [float] Particle diameter of spheres [m]
voidage [float] Void fraction of bed packing [-]
vs [float] Superficial velocity of the fluid (volumetric flow rate/cross-sectional area)[m/s]
rho [float] Density of the fluid [kg/m^3]
mu [float] Viscosity of the fluid, [Pa*s]
L [float, optional] Length the fluid flows in the packed bed [m]
Returns
dP [float] Pressure drop across the bed [Pa]

362 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

Notes

The validity range shown in [2] is a range of 0.1 < 𝑅𝑒 < 100000.

References

[1], [2], [3]

Examples

>>> Tallmadge(dp=8E-4, voidage=0.4, vs=1E-3, rho=1E3, mu=1E-3)


1365.2739144209424

fluids.packed_bed.Idelchik(dp, voidage, vs, rho, mu, L=1.0)


Calculates pressure drop across a packed bed of spheres as in [2], originally in [1].
(︂ )︂
∆𝑃 0.765 30 3
𝑑𝑝 = 4.2 + + 0.3
𝐿𝜌𝑣𝑠2 𝜖 𝑅𝑒𝑙 𝑅𝑒0.7
𝑙

𝑅𝑒𝑙 = (0.45/𝜖0.5 )𝑅𝑒𝐸𝑟𝑔


𝜌𝑣𝑠 𝐷𝑝
𝑅𝑒𝐸𝑟𝑔 =
𝜇(1 − 𝜖)
Parameters
dp [float] Particle diameter of spheres [m]
voidage [float] Void fraction of bed packing [-]
vs [float] Superficial velocity of the fluid (volumetric flow rate/cross-sectional area)[m/s]
rho [float] Density of the fluid [kg/m^3]
mu [float] Viscosity of the fluid, [Pa*s]
L [float, optional] Length the fluid flows in the packed bed [m]
Returns
dP [float] Pressure drop across the bed [Pa]

Notes

0.001 < 𝑅𝑒𝐸𝑟𝑔 < 1000 This equation is valid for void fractions between 0.3 and 0.8. Cited as by Bernshtein.

References

[1], [2]

2.15. Packed bed pressure drop (fluids.packed_bed) 363


Fluids Documentation, Release 1.0.21

Examples

>>> Idelchik(dp=8E-4, voidage=0.4, vs=1E-3, rho=1E3, mu=1E-3)


1571.909125999067

fluids.packed_bed.Harrison_Brunner_Hecker(dp, voidage, vs, rho, mu, L=1, Dt=None)


Calculates pressure drop across a packed bed of spheres using a correlation developed in [1], also shown in [2].
Fourth most accurate correlation overall in the review of [2]. Applies a wall correction if diameter of tube is
provided.
(︃ )︂5/6 )︃
(1 − 𝜖)2
(︂
𝑅𝑒
𝑓𝑝 = 119.8𝐴 + 4.63𝐵
1−𝜖 𝜖3 𝑅𝑒
(︂ )︂2
𝑑𝑝
𝐴= 1+𝜋
6(1 − 𝜖)𝐷𝑡
𝜋 2 𝑑𝑝
(︂ )︂
0.5𝑑𝑝
𝐵 =1− 1−
24𝐷𝑡 𝐷𝑡
∆𝑃 𝑑𝑝
𝑓𝑝 =
𝜌𝑣𝑠2 𝐿
𝜌𝑣𝑠 𝑑𝑝
𝑅𝑒 =
𝜇
Parameters
dp [float] Particle diameter of spheres [m]
voidage [float] Void fraction of bed packing [-]
vs [float] Superficial velocity of the fluid (volumetric flow rate/cross-sectional area)[m/s]
rho [float] Density of the fluid [kg/m^3]
mu [float] Viscosity of the fluid, [Pa*s]
L [float, optional] Length the fluid flows in the packed bed [m]
Dt [float, optional] Diameter of the tube, [m]
Returns
dP [float] Pressure drop across the bed [Pa]

Notes

Uses data from other sources only. Correlation will underestimate pressure drop if tube diameter is not provided.
Limits are specified in [1] as:

0.72 < 𝑅𝑒 < 7700


8.3 < 𝑑𝑡 /𝑑𝑝 < 50
0.33 < 𝜖 < 0.88

364 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

References

[1], [2]

Examples

>>> Harrison_Brunner_Hecker(dp=8E-4, voidage=0.4, vs=1E-3, rho=1E3, mu=1E-3, Dt=1E-


˓→2)

1255.1625662548427

fluids.packed_bed.Montillet_Akkari_Comiti(dp, voidage, vs, rho, mu, L=1, Dt=None)


Calculates pressure drop across a packed bed of spheres as in [2], originally in [1]. Wall effect adjustment is used
if Dt is provided.
)︂0.20 (︂
𝜖3
(︂ )︂
∆𝑃 𝐷𝑐 1000 60
2
𝐷𝑝 =𝑎 + + 12
𝐿𝜌𝑉𝑠 (1 − 𝜖) 𝐷𝑝 𝑅𝑒𝑝 𝑅𝑒0.5
𝑝

𝜌𝑣𝑠 𝐷𝑝
𝑅𝑒𝑝 =
𝜇
Parameters
dp [float] Particle diameter of spheres [m]
voidage [float] Void fraction of bed packing [-]
vs [float] Superficial velocity of the fluid (volumetric flow rate/cross-sectional area)[m/s]
rho [float] Density of the fluid [kg/m^3]
mu [float] Viscosity of the fluid, [Pa*s]
L [float, optional] Length the fluid flows in the packed bed [m]
Dt [float, optional] Diameter of the tube, [m]
Returns
dP [float] Pressure drop across bed [Pa]

Notes

10 < 𝑅𝐸𝑝 < 2500 if Dc/D > 50, set to 2.2. a = 0.061 for epsilon < 0.4, 0.050 for > 0.4.

References

[1], [2]

2.15. Packed bed pressure drop (fluids.packed_bed) 365


Fluids Documentation, Release 1.0.21

Examples

Custom example:

>>> Montillet_Akkari_Comiti(dp=0.0008, voidage=0.4, L=0.5, vs=0.00132629120,␣


˓→rho=1000., mu=1.00E-003)

1148.1905244077548

fluids.packed_bed.Guo_Sun(dp, voidage, vs, rho, mu, Dt, L=1.0)


Calculates pressure drop across a packed bed of spheres using a correlation developed in [1]. This is valid for
highly-packed particles at particle/tube diameter ratios between 2 and 3, where a ring packing structure occurs.
If a packing ratio is so low, it is important to use this model because in some cases its predictions are as low as
half those of other models!
(︂ )︂
𝑑𝑝
𝑓𝑣 = 180 + 9.5374 − 2.8054 𝑅𝑒0.97𝐸𝑟𝑔
𝐷𝑡

∆𝑃 𝑑2𝑝 𝜖3
𝑓𝑣 =
𝜇𝑣𝑠 𝐿 (1 − 𝜖)2
𝜌𝑣𝑠 𝑑𝑝
𝑅𝑒𝐸𝑟𝑔 =
𝜇(1 − 𝜖)
Parameters
dp [float] Particle diameter of spheres [m]
voidage [float] Void fraction of bed packing [-]
vs [float] Superficial velocity of the fluid (volumetric flow rate/cross-sectional area)[m/s]
rho [float] Density of the fluid [kg/m^3]
mu [float] Viscosity of the fluid, [Pa*s]
Dt [float] Diameter of the tube, [m]
L [float, optional] Length the fluid flows in the packed bed [m]
Returns
dP [float] Pressure drop across the bed [Pa]

Notes

Developed with data in the range of:

100 < 𝑅𝑒𝑚 < 33000


2 < 𝑑𝑡 /𝑑𝑝 < 31
0.476 < 𝜖 < 0.492

366 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

References

[1]

Examples

>>> Guo_Sun(dp=14.2E-3, voidage=0.492, vs=0.6, rho=1E3, mu=1E-3, Dt=40.9E-3)


42019.529911473706

2.15.3 Voidage Correlations

fluids.packed_bed.voidage_Benyahia_Oneil(Dpe, Dt, sphericity)


Calculates voidage of a bed of arbitrarily shaped uniform particles packed into a bed or tube of diameter Dt, with
equivalent sphere diameter Dp. Shown in [1], and cited by various authors. Correlations exist also for spheres,
solid cylinders, hollow cylinders, and 4-hole cylinders. Based on a series of physical measurements.
0.2024 1.0814
𝜖 = 0.1504 + + (︁ )︁2
𝜑 𝑑𝑡
𝑑𝑝𝑒 + 0.1226

Parameters
Dpe [float] Equivalent spherical particle diameter (diameter of a sphere with the same volume),
[m]
Dt [float] Diameter of the tube, [m]
sphericity [float] Sphericity of particles in bed []
Returns
voidage [float] Void fraction of bed packing []

Notes

Average error of 5.2%; valid 1.5 < dtube/dp < 50 and 0.42 < sphericity < 1

References

[1]

Examples

>>> voidage_Benyahia_Oneil(Dpe=1E-3, Dt=1E-2, sphericity=.8)


0.41395363849210065

fluids.packed_bed.voidage_Benyahia_Oneil_spherical(Dp, Dt)
Calculates voidage of a bed of spheres packed into a bed or tube of diameter Dt, with sphere diameters Dp.
Shown in [1], and cited by various authors. Correlations exist also for solid cylinders, hollow cylinders, and
4-hole cylinders. Based on a series of physical measurements.
1.740
𝜖 = 0.390 + (︁ )︁2
𝑑𝑐𝑦𝑙
𝑑𝑝 + 1.140

2.15. Packed bed pressure drop (fluids.packed_bed) 367


Fluids Documentation, Release 1.0.21

Parameters
Dp [float] Spherical particle diameter, [m]
Dt [float] Diameter of the tube, [m]
Returns
voidage [float] Void fraction of bed packing []

Notes

Average error 1.5%, 1.5 < ratio < 50.

References

[1]

Examples

>>> voidage_Benyahia_Oneil_spherical(Dp=.001, Dt=.05)


0.3906653157443224

fluids.packed_bed.voidage_Benyahia_Oneil_cylindrical(Dpe, Dt, sphericity)


Calculates voidage of a bed of cylindrical uniform particles packed into a bed or tube of diameter Dt, with
equivalent sphere diameter Dpe. Shown in [1], and cited by various authors. Correlations exist also for spheres,
solid cylinders, hollow cylinders, and 4-hole cylinders. Based on a series of physical measurements.
1.703
𝜖 = 0.373 + (︁ )︁2
𝑑𝑐𝑦𝑙
𝑑𝑝 + 0.611

Parameters
Dpe [float] Equivalent spherical particle diameter (diameter of a sphere with the same volume),
[m]
Dt [float] Diameter of the tube, [m]
sphericity [float] Sphericity of particles in bed []
Returns
voidage [float] Void fraction of bed packing []

Notes

Average error 1.6%; 1.7 < ratio < 26.3.

368 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

References

[1]

Examples

>>> voidage_Benyahia_Oneil_cylindrical(Dpe=.01, Dt=.1, sphericity=.6)


0.38812523109607894

2.16 Packing & demister pressure drop (fluids.packed_tower)

This module contains correlations and functions for calculating pressure drop from packings and demisters; separation
efficiency of demisters; demister pressure drop; and demister geometry.
For reporting bugs, adding feature requests, or submitting pull requests, please use the GitHub issue tracker or contact
the author at Caleb.Andrew.Bell@gmail.com.

• Packing Pressure Drop


• Packing Flooding
• Demister Pressure Drop
• Demister Separation Efficiency
• Demister Geometry

2.16.1 Packing Pressure Drop

fluids.packed_tower.Robbins(L, G, rhol, rhog, mul, H=1.0, Fpd=24.0)


Calculates pressure drop across a packed column, using the Robbins equation.
Pressure drop is given by:

∆𝑃 = 𝐶3 𝐺2𝑓 10𝐶4 𝐿𝑓 + 0.4[𝐿𝑓 /20000]0.1 [𝐶3 𝐺2𝑓 10𝐶4 𝐿𝑓 ]4

𝐺𝑓 = 𝐺[0.075/𝜌𝑔 ]0.5 [𝐹𝑝𝑑 /20]0.5 = 986𝐹𝑠 [𝐹𝑝𝑑 /20]0.5

𝐿𝑓 = 𝐿[62.4/𝜌𝐿 ][𝐹𝑝𝑑 /20]0.5 𝜇0.1

𝐹𝑠 = 𝑉𝑠 𝜌0.5
𝑔

Parameters
L [float] Specific liquid mass flow rate [kg/s/m^2]
G [float] Specific gas mass flow rate [kg/s/m^2]
rhol [float] Density of liquid [kg/m^3]
rhog [float] Density of gas [kg/m^3]
mul [float] Viscosity of liquid [Pa*s]

2.16. Packing & demister pressure drop (fluids.packed_tower) 369


Fluids Documentation, Release 1.0.21

H [float] Height of packing [m]


Fpd [float] Robbins packing factor (tabulated for packings) [1/ft]
Returns
dP [float] Pressure drop across packing [Pa]

Notes

Perry’s displayed equation has a typo in a superscript. This model is based on the example in Perry’s.

References

[1]

Examples

>>> Robbins(L=12.2, G=2.03, rhol=1000., rhog=1.1853, mul=0.001, H=2.0, Fpd=24.0)


619.6624593438102

fluids.packed_tower.Stichlmair_dry(Vg, rhog, mug, voidage, specific_area, C1, C2, C3, H=1.0)


Calculates dry pressure drop across a packed column, using the Stichlmair [1] correlation. Uses three regressed
constants for each type of packing, and voidage and specific area.
Pressure drop is given by:

3 1−𝜖 𝐻 2
∆𝑃𝑑𝑟𝑦 = 𝑓0 𝜌𝐺 𝑉 𝑔
4 𝜖4.65 𝑑𝑝

𝐶1 𝐶2
𝑓0 = + + 𝐶3
𝑅𝑒𝑔 𝑅𝑒0.5
𝑔

6(1 − 𝜖)
𝑑𝑝 =
𝑎
Parameters
Vg [float] Superficial velocity of gas, Q/A [m/s]
rhog [float] Density of gas [kg/m^3]
mug [float] Viscosity of gas [Pa*s]
voidage [float] Voidage of bed of packing material []
specific_area [float] Specific area of the packing material [m^2/m^3]
C1 [float] Packing-specific constant []
C2 [float] Packing-specific constant []
C3 [float] Packing-specific constant []
H [float, optional] Height of packing [m]
Returns
dP_dry [float] Pressure drop across dry packing [Pa]

370 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

Notes

This model is used by most process simulation tools. If H is not provided, it defaults to 1. If Z is not provided,
it defaults to 1.

References

[1]

Examples

>>> Stichlmair_dry(Vg=0.4, rhog=5., mug=5E-5, voidage=0.68,


... specific_area=260., C1=32., C2=7.0, C3=1.0)
236.80904286559885

fluids.packed_tower.Stichlmair_wet(Vg, Vl, rhog, rhol, mug, voidage, specific_area, C1, C2, C3, H=1.0)
Calculates dry pressure drop across a packed column, using the Stichlmair [1] correlation. Uses three regressed
constants for each type of packing, and voidage and specific area. This model is for irrigated columns only.
Pressure drop is given by:
(︂ )︂(2+𝑐)/3 (︂ )︂4.65
∆𝑃𝑖𝑟𝑟 ∆𝑃𝑑𝑟𝑦 1 − 𝜖 + ℎ𝑇 𝜖
=
𝐻 𝐻 1−𝜖 𝜖 − ℎ𝑇
[︃ (︂ )︂2 ]︃
∆𝑃 𝑖𝑟𝑟
ℎ𝑇 = ℎ0 1 + 20
𝐻𝜌𝐿 𝑔

𝑉𝐿2 𝑎
𝐹 𝑟𝐿 =
𝑔𝜖4.65
1/3
ℎ0 = 0.555𝐹 𝑟𝐿
−𝐶1 /𝑅𝑒𝑔 − 𝐶2 /(2𝑅𝑒0.5
𝑔 )
𝑐=
𝑓0
3 1−𝜖 𝐻 2
∆𝑃𝑑𝑟𝑦 = 𝑓0 𝜌𝐺 𝑉 𝑔
4 𝜖4.65 𝑑𝑝
𝐶1 𝐶2
𝑓0 = + + 𝐶3
𝑅𝑒𝑔 𝑅𝑒0.5
𝑔

6(1 − 𝜖)
𝑑𝑝 =
𝑎
Parameters
Vg [float] Superficial velocity of gas, Q/A [m/s]
Vl [float] Superficial velocity of liquid, Q/A [m/s]
rhog [float] Density of gas [kg/m^3]
rhol [float] Density of liquid [kg/m^3]
mug [float] Viscosity of gas [Pa*s]
voidage [float] Voidage of bed of packing material []
specific_area [float] Specific area of the packing material [m^2/m^3]

2.16. Packing & demister pressure drop (fluids.packed_tower) 371


Fluids Documentation, Release 1.0.21

C1 [float] Packing-specific constant []


C2 [float] Packing-specific constant []
C3 [float] Packing-specific constant []
H [float, optional] Height of packing [m]
Returns
dP [float] Pressure drop across irrigated packing [Pa]

Notes

This model is used by most process simulation tools. If H is not provided, it defaults to 1. If Z is not provided,
it defaults to 1. A numerical solver is used and needed by this model. Its initial guess is the dry pressure drop.
Convergence problems may occur. The model as described in [1] appears to have a typo, and could not match
the example. As described in [2], however, the model works.

References

[1], [2]

Examples

Example is from [1], matches.

>>> Stichlmair_wet(Vg=0.4, Vl = 5E-3, rhog=5., rhol=1200., mug=5E-5,


... voidage=0.68, specific_area=260., C1=32., C2=7., C3=1.)
539.876823725352

2.16.2 Packing Flooding

fluids.packed_tower.Stichlmair_flood(Vl, rhog, rhol, mug, voidage, specific_area, C1, C2, C3, H=1.0)
Calculates gas rate for flooding of a packed column, using the Stichlmair [1] correlation. Uses three regressed
constants for each type of packing, and voidage and specific area.
Pressure drop is given by:
(︂ )︂(2+𝑐)/3 (︂ )︂4.65
∆𝑃𝑖𝑟𝑟 ∆𝑃𝑑𝑟𝑦 1 − 𝜖 + ℎ𝑇 𝜖
=
𝐻 𝐻 1−𝜖 𝜖 − ℎ𝑇
[︃ (︂ )︂2 ]︃
∆𝑃 𝑖𝑟𝑟
ℎ𝑇 = ℎ0 1 + 20
𝐻𝜌𝐿 𝑔

𝑉𝐿2 𝑎
𝐹 𝑟𝐿 =
𝑔𝜖4.65
1/3
ℎ0 = 0.555𝐹 𝑟𝐿
−𝐶1 /𝑅𝑒𝑔 − 𝐶2 /(2𝑅𝑒0.5
𝑔 )
𝑐=
𝑓0
3 1−𝜖 𝐻 2
∆𝑃𝑑𝑟𝑦 = 𝑓0 𝜌𝐺 𝑉 𝑔
4 𝜖4.65 𝑑𝑝

372 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

𝐶1 𝐶2
𝑓0 = + + 𝐶3
𝑅𝑒𝑔 𝑅𝑒0.5
𝑔

6(1 − 𝜖)
𝑑𝑝 =
𝑎
Parameters
Vl [float] Superficial velocity of liquid, Q/A [m/s]
rhog [float] Density of gas [kg/m^3]
rhol [float] Density of liquid [kg/m^3]
mug [float] Viscosity of gas [Pa*s]
voidage [float] Voidage of bed of packing material []
specific_area [float] Specific area of the packing material [m^2/m^3]
C1 [float] Packing-specific constant []
C2 [float] Packing-specific constant []
C3 [float] Packing-specific constant []
H [float, optional] Height of packing [m]
Returns
Vg [float] Superficial velocity of gas, Q/A [m/s]

Notes

A numerical solver is used to solve this model.

References

[1]

Examples

Example is from [1], matches.

>>> Stichlmair_flood(Vl = 5E-3, rhog=5., rhol=1200., mug=5E-5,


... voidage=0.68, specific_area=260., C1=32., C2=7., C3=1.)
0.6394323542746928

2.16.3 Demister Pressure Drop

fluids.packed_tower.dP_demister_dry_Setekleiv_Svendsen(S, voidage, vs, rho, mu, L=1.0)


Calculates dry pressure drop across a demister, using the correlation in [1]. This model is for dry demisters with
no holdup only.
)︂0.75
∆𝑃 𝜖2 𝜇𝑓 𝜖𝑆 2 𝐿
(︂
565 74.9
= 10.29 − − + 45.33
𝜌𝑓 𝑣 2 69.6𝑆𝐿 − (𝑆𝐿)2 − 779 160.9 − 4.85𝑆𝐿 𝜌𝑓 𝑣

Parameters

2.16. Packing & demister pressure drop (fluids.packed_tower) 373


Fluids Documentation, Release 1.0.21

S [float] Specific area of the demister, normally ~250-1000 [m^2/m^3]


voidage [float] Voidage of bed of the demister material, normally ~0.98 []
vs [float] Superficial velocity of fluid, Q/A [m/s]
rho [float] Density of fluid [kg/m^3]
mu [float] Viscosity of fluid [Pa*s]
L [float, optional] Length of the demister [m]
Returns
dP [float] Pressure drop across a dry demister [Pa]

Notes

Useful at startup and in modeling. Dry pressure drop is normally negligible compared to wet pressure drop.
Coefficients obtained by evolutionary programming and may not fit data outside of the limits of the variables.

References

[1]

Examples

>>> dP_demister_dry_Setekleiv_Svendsen(S=250, voidage=.983, vs=1.2, rho=10, mu=3E-5,


˓→ L=1)

320.3280788941329

fluids.packed_tower.dP_demister_dry_Setekleiv_Svendsen_lit(S, voidage, vs, rho, mu, L=1.0)


Calculates dry pressure drop across a demister, using the correlation in [1]. This model is for dry demisters with
no holdup only. Developed with literature data included as well as their own experimental data.
)︂0.75
∆𝑃 𝜖2 𝜇𝑓 𝜖𝑆 2 𝐿
(︂
320 52.4
2
= 7.3 − 2
− + 27.2
𝜌𝑓 𝑣 69.6𝑆𝐿 − (𝑆𝐿) − 779 161 − 4.85𝑆𝐿 𝜌𝑓 𝑣

Parameters
S [float] Specific area of the demister, normally ~250-1000 [m^2/m^3]
voidage [float] Voidage of bed of the demister material, normally ~0.98 []
vs [float] Superficial velocity of fluid, Q/A [m/s]
rho [float] Density of fluid [kg/m^3]
mu [float] Viscosity of fluid [Pa*s]
L [float, optional] Length of the demister [m]
Returns
dP [float] Pressure drop across a dry demister [Pa]

374 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

Notes

Useful at startup and in modeling. Dry pressure drop is normally negligible compared to wet pressure drop.
Coefficients obtained by evolutionary programming and may not fit data outside of the limits of the variables.

References

[1]

Examples

>>> dP_demister_dry_Setekleiv_Svendsen_lit(S=250, voidage=.983, vs=1.2, rho=10,␣


˓→mu=3E-5, L=1.0)

209.083848658307

fluids.packed_tower.dP_demister_wet_ElDessouky(vs, voidage, d_wire, L=1.0)


Calculates wet pressure drop across a demister, using the correlation in [1]. Uses only their own experimental
data.
∆𝑃
= 0.002357(1 − 𝜖)0.375798 (𝑉 )0.81317 (𝑑𝑤 )−1.56114147
𝐿
Parameters
vs [float] Superficial velocity of fluid, Q/A [m/s]
voidage [float] Voidage of bed of the demister material, normally ~0.98 []
d_wire [float] Diameter of mesh wire,[m]
L [float, optional] Length of the demister [m]
Returns
dP [float] Pressure drop across a dry demister [Pa]

Notes

No dependency on the liquid properties is included here. Because of the exponential nature of the correlation,
the limiting pressure drop as V is lowered is 0 Pa. A dry pressure drop correlation should be compared with
results from this at low velocities, and the larger of the two pressure drops used.
The correlation in [1] was presented as follows, with wire diameter in units of mm, density in kg/m^3, V in m/s,
and dP in Pa/m.

∆𝑃 = 3.88178(𝜌𝑚𝑒𝑠ℎ )0.375798 (𝑉 )0.81317 (𝑑𝑤 )−1.56114147

Here, the correlation is converted to base SI units and to use voidage; not all demisters are stainless steel as in
[1]. A density of 7999 kg/m^3 was used in the conversion.
In [1], V ranged from 0.98-7.5 m/s, rho from 80.317-208.16 kg/m^3, depth from 100 to 200 mm, wire diameter
of 0.2mm to 0.32 mm, and particle diameter from 1 to 5 mm.

2.16. Packing & demister pressure drop (fluids.packed_tower) 375


Fluids Documentation, Release 1.0.21

References

[1]

Examples

>>> dP_demister_wet_ElDessouky(6, 0.978, 0.00032)


688.9216420105029

2.16.4 Demister Separation Efficiency

fluids.packed_tower.separation_demister_ElDessouky(vs, voidage, d_wire, d_drop)


Calculates droplet removal by a demister as a fraction from 0 to 1, using the correlation in [1]. Uses only their
own experimental data.

𝜂 = 0.85835(𝑑𝑤 )−0.28264 (1 − 𝜖)0.099625 (𝑉 )0.106878 (𝑑𝑝 )0.383197

Parameters
vs [float] Superficial velocity of fluid, Q/A [m/s]
voidage [float] Voidage of bed of the demister material, normally ~0.98 []
d_wire [float] Diameter of mesh wire,[m]
d_drop [float] Drop diameter, [m]
Returns
eta [float] Fraction droplets removed by mass [-]

Notes

No dependency on the liquid properties is included here. Because of the exponential nature of the correlation,
for smaller diameters separation quickly lowers. This correlation can predict a separation larger than 1 for higher
velocities, lower voidages, lower wire diameters, and large droplet sizes. This function truncates these larger
values to 1.
The correlation in [1] was presented as follows, with wire diameter in units of mm, density in kg/m^3, V in m/s,
separation in %, and particle diameter in mm.

𝜂 = 17.5047(𝑑𝑤 )−0.28264 (𝜌𝑚𝑒𝑠ℎ )0.099625 (𝑉 )0.106878 (𝑑𝑝 )0.383197

Here, the correlation is converted to base SI units and to use voidage; not all demisters are stainless steel as in
[1]. A density of 7999 kg/m^3 was used in the conversion.
In [1], V ranged from 0.98-7.5 m/s, rho from 80.317-208.16 kg/m^3, depth from 100 to 200 mm, wire diameter
of 0.2 mm to 0.32 mm, and particle diameter from 1 to 5 mm.

376 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

References

[1]

Examples

>>> separation_demister_ElDessouky(1.35, 0.974, 0.0002, 0.005)


0.8982892997640582

2.16.5 Demister Geometry

fluids.packed_tower.voidage_experimental(m, rho, D, H)
Calculates voidage of a bed or mesh given an experimental weight and fixed density, diameter, and height, as
shown in [1]. The formula is also self-evident.
𝑚𝑚𝑒𝑠ℎ
𝜋 2
4 𝑑𝑐𝑜𝑙𝑢𝑚𝑛 𝐿𝑚𝑒𝑠ℎ
𝜖=1−
𝜌𝑚𝑎𝑡𝑒𝑟𝑖𝑎𝑙
Parameters
m [float] Mass of mesh or bed particles weighted, [kg]
rho [float] Density of solid particles or mesh [kg/m^3]
D [float] Diameter of the cylindrical bed [m]
H [float] Height of the demister or bed [m]
Returns
voidage [float] Voidage of bed of the material []

Notes

Should be trusted over manufacturer data.

References

[1]

Examples

>>> voidage_experimental(m=126, rho=8000, D=1, H=1)


0.9799464771704212

fluids.packed_tower.specific_area_mesh(voidage, d)
Calculates the specific area of a wire mesh, as used in demisters or filters. Shown in [1], and also self-evident
and non-empirical. Makes the ideal assumption that wires never touch.

4(1 − 𝜖)
𝑆=
𝑑𝑤𝑖𝑟𝑒
Parameters

2.16. Packing & demister pressure drop (fluids.packed_tower) 377


Fluids Documentation, Release 1.0.21

voidage [float] Voidage of the mesh []


d [float] Diameter of the wires making the mesh, [m]
Returns
S [float] Specific area of the mesh [m^2/m^3]

Notes

Should be preferred over manufacturer data. Can also be used to show that manufacturer’s data is inconsistent
with their claimed voidage and wire diameter.

References

[1]

Examples

>>> specific_area_mesh(voidage=.934, d=3e-4)


879.9999999999994

2.17 Particle Size Distributions (fluids.particle_size_distribution)

This module contains particle distribution characterization, fitting, interpolating, and manipulation functions. It may
be used with discrete particle size distributions, or with statistical ones with parameters specified.
For reporting bugs, adding feature requests, or submitting pull requests, please use the GitHub issue tracker or contact
the author at Caleb.Andrew.Bell@gmail.com.

• Particle Size Distribution Base Class


• Discrete Particle Size Distributions
• Statistical Particle Size Distributions
• Helper functions: Lognormal Distribution
• Helper functions: Gates Gaudin Schuhman Distribution
• Helper functions: Rosin Rammler Distribution
• Sieves
• Point Spacing

378 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

2.17.1 Particle Size Distribution Base Class

class fluids.particle_size_distribution.ParticleSizeDistributionContinuous
Base class representing a continuous particle size distribution specified by a mathematical/statistical function.
This class holds the common methods only.

Notes

Although the stated units of input are in meters, this class is actually independent of the units provided; all results
will be consistent with the provided unit.

References

[1]

Examples

Example problem from [1].

>>> psd = PSDLognormal(s=0.5, d_characteristic=5E-6)

Attributes
vssa The volume-specific surface area of a particle size distribution.

Methods

cdf (d[, n]) Computes the cumulative distribution density func-


tion of a continuous particle size distribution at a
specified particle diameter, an optionally in a spec-
ified basis.
cdf_discrete(ds[, n]) Computes the cumulative distribution functions for a
list of specified particle diameters.
delta_cdf (d_min, d_max[, n]) Computes the difference in cumulative distribution
function between two particle size diameters.
dn(fraction[, n]) Computes the diameter at which a specified fraction
of the distribution falls under.
ds_discrete([d_min, d_max, pts, limit, method]) Create a particle spacing mesh to perform calcula-
tions with, according to one of several ways.
fractions_discrete(ds[, n]) Computes the fractions of the cumulative distribution
functions which lie between the specified specified
particle diameters.
mean_size(p, q) Calculates the mean particle size according to
moment-ratio notation.
mean_size_ISO(k, r) Calculates the mean particle size according to mo-
ment notation (ISO).
pdf (d[, n]) Computes the probability density function of a con-
tinuous particle size distribution at a specified parti-
cle diameter, an optionally in a specified basis.
continues on next page

2.17. Particle Size Distributions (fluids.particle_size_distribution) 379


Fluids Documentation, Release 1.0.21

Table 4 – continued from previous page


plot_cdf ([n, d_min, d_max, pts, method]) Plot the cumulative distribution function of the parti-
cle size distribution.
plot_pdf ([n, d_min, d_max, pts, normalized, ...]) Plot the probability density function of the particle
size distribution.

cdf(d, n=None)
Computes the cumulative distribution density function of a continuous particle size distribution at a speci-
fied particle diameter, an optionally in a specified basis. The evaluation function varies with the distribution
chosen.
∫︁ 𝑑
𝑄𝑛 (𝑑) = 𝑞𝑛 (𝑑)
0

Parameters
d [float] Particle size diameter, [m]
n [int, optional] None (for the order specified when the distribution was created), 0 (number),
1 (length), 2 (area), 3 (volume/mass), or any integer, [-]
Returns
cdf [float] The cumulative distribution function at the specified diameter and order, [-]

Notes

Analytical integrals can be found for most distributions even when order conversions are necessary.

Examples

>>> psd = PSDLognormal(s=0.5, d_characteristic=5E-6, order=3)


>>> [psd.cdf(5e-6, n) for n in range(4)]
[0.933192798731, 0.8413447460685, 0.6914624612740, 0.5]

cdf_discrete(ds, n=None)
Computes the cumulative distribution functions for a list of specified particle diameters.
Parameters
ds [list[float]] Particle size diameters, [m]
n [int, optional] None (for the order specified when the distribution was created), 0 (number),
1 (length), 2 (area), 3 (volume/mass), or any integer, [-]
Returns
cdfs [float] The cumulative distribution functions at the specified diameters and order, [-]

380 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

Examples

>>> psd = PSDLognormal(s=0.5, d_characteristic=5E-6, order=3)


>>> psd.cdf_discrete([1e-6, 1e-5, 1e-4, 1e-3])
[0.000643471012913, 0.917171480998, 0.999999998960, 1.0]

delta_cdf(d_min, d_max, n=None)


Computes the difference in cumulative distribution function between two particle size diameters.

∆𝑄𝑛 = 𝑄𝑛 (𝑑𝑚𝑎𝑥 ) − 𝑄𝑛 (𝑑𝑚𝑖𝑛 )

Parameters
d_min [float] Lower particle size diameter, [m]
d_max [float] Upper particle size diameter, [m]
n [int, optional] None (for the order specified when the distribution was created), 0 (number),
1 (length), 2 (area), 3 (volume/mass), or any integer, [-]
Returns
delta_cdf [float] The difference in the cumulative distribution function for the two diameters
specified, [-]

Examples

>>> psd = PSDLognormal(s=0.5, d_characteristic=5E-6, order=3)


>>> psd.delta_cdf(1e-6, 1e-5)
0.9165280099853876

dn(fraction, n=None)
Computes the diameter at which a specified fraction of the distribution falls under. Utilizes a bounded
solver to search for the desired diameter.
Parameters
fraction [float] Fraction of the distribution which should be under the calculated diameter,
[-]
n [int, optional] None (for the order specified when the distribution was created), 0 (number),
1 (length), 2 (area), 3 (volume/mass), or any integer, [-]
Returns
d [float] Particle size diameter, [m]

Examples

>>> psd = PSDLognormal(s=0.5, d_characteristic=5E-6, order=3)


>>> psd.dn(.5)
5e-06
>>> psd.dn(1)
0.0002947436533523378
>>> psd.dn(0)
0.0

2.17. Particle Size Distributions (fluids.particle_size_distribution) 381


Fluids Documentation, Release 1.0.21

ds_discrete(d_min=None, d_max=None, pts=20, limit=1e-09, method='logarithmic')


Create a particle spacing mesh to perform calculations with, according to one of several ways. The allowable
meshes are ‘linear’, ‘logarithmic’, a geometric series specified by a Renard number such as ‘R10’, or the
meshes available in one of several sieve standards.
Parameters
d_min [float, optional] The minimum diameter at which the mesh starts, [m]
d_max [float, optional] The maximum diameter at which the mesh ends, [m]
pts [int, optional] The number of points to return for the mesh (note this is not respected by
sieve meshes), [-]
limit [float] If d_min or d_max is not specified, it will be calculated as the dn at which this
limit or 1-limit exists (this is ignored for Renard numbers), [-]
method [str, optional] Either ‘linear’, ‘logarithmic’, a Renard number like ‘R10’ or ‘R5’
or’R2.5’, or one of the sieve standards ‘ISO 3310-1 R40/3’, ‘ISO 3310-1 R20’, ‘ISO 3310-
1 R20/3’, ‘ISO 3310-1’, ‘ISO 3310-1 R10’, ‘ASTM E11’, [-]
Returns
ds [list[float]] The generated mesh diameters, [m]

Notes

Note that when specifying a Renard series, only one of d_min or d_max can be respected! Provide only
one of those numbers.
Note that when specifying a sieve standard the number of points is not respected!

References

[1], [2]
fractions_discrete(ds, n=None)
Computes the fractions of the cumulative distribution functions which lie between the specified specified
particle diameters. The first diameter contains the cdf from 0 to it.
Parameters
ds [list[float]] Particle size diameters, [m]
n [int, optional] None (for the order specified when the distribution was created), 0 (number),
1 (length), 2 (area), 3 (volume/mass), or any integer, [-]
Returns
fractions [float] The differences in the cumulative distribution functions at the specified di-
ameters and order, [-]

382 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

Examples

>>> psd = PSDLognormal(s=0.5, d_characteristic=5E-6, order=3)


>>> psd.fractions_discrete([1e-6, 1e-5, 1e-4, 1e-3])
[0.00064347101291, 0.916528009985, 0.0828285179619, 1.039798e-09]

mean_size(p, q)
Calculates the mean particle size according to moment-ratio notation. This is the more common and often
convenient definition.
∑︀ 𝑝
¯ 𝑝,𝑞 (𝑝−𝑞) = ∑︀𝑖 𝑛𝑖 𝐷𝑖𝑞
[︀ ]︀
𝐷
𝑛𝑖 𝐷𝑖
[︂ ∑︀ 𝑝 ]︂ 𝑖
𝑛𝑖 𝐷𝑖 ln 𝐷𝑖
¯ 𝑝,𝑝 = exp 𝑖∑︀
, if p = q
[︀ ]︀
𝐷 𝑝
𝑖 𝑛𝑖 𝐷𝑖

Note that 𝑛𝑖 in the above equation is replaceable with the fraction of particles in that bin.
Parameters
p [int] Power and/or subscript of D moment in the above equations, [-]
q [int] Power and/or subscript of D moment in the above equations, [-]
Returns
d_pq [float] Mean particle size according to the specified p and q, [m]

Notes

The following is a list of common names for specific mean diameters.


• D[-3, 0]: arithmetic harmonic mean volume diameter
• D[-2, 1]: size-weighted harmonic mean volume diameter
• D[-1, 2]: area-weighted harmonic mean volume diameter
• D[-2, 0]: arithmetic harmonic mean area diameter
• D[-1, 1]: size-weighted harmonic mean area diameter
• D[-1, 0]: arithmetic harmonic mean diameter
• D[0, 0]: arithmetic geometric mean diameter
• D[1, 1]: size-weighted geometric mean diameter
• D[2, 2]: area-weighted geometric mean diameter
• D[3, 3]: volume-weighted geometric mean diameter
• D[1, 0]: arithmetic mean diameter
• D[2, 1]: size-weighted mean diameter
• D[3, 2]: area-weighted mean diameter, Sauter mean diameter
• D[4, 3]: volume-weighted mean diameter, De Brouckere diameter
• D[2, 0]: arithmetic mean area diameter
• D[3, 1]: size-weighted mean area diameter
• D[4, 2]: area-weighted mean area diameter

2.17. Particle Size Distributions (fluids.particle_size_distribution) 383


Fluids Documentation, Release 1.0.21

• D[5, 3]: volume-weighted mean area diameter


• D[3, 0]: arithmetic mean volume diameter
• D[4, 1]: size-weighted mean volume diameter
• D[5, 2]: area-weighted mean volume diameter
• D[6, 3]: volume-weighted mean volume diameter
This notation was first introduced in [1].
The sum of p and q is called the order of the mean size [3].

¯ 𝑝,𝑞 ≡ 𝐷
𝐷 ¯ 𝑞,𝑝

References

[1], [2], [3]

Examples

>>> psd = PSDLognormal(s=0.5, d_characteristic=5E-6)


>>> psd.mean_size(3, 2)
4.412484512922977e-06

Note that for the case where p == q, a different set of formulas are required - which do not have analytical
results for many distributions. Therefore, a close numerical approximation is used instead, to perturb the
values of p and q so they are 1E-9 away from each other. This leads only to slight errors, as in the example
below where the correct answer is 5E-6.

>>> psd.mean_size(3, 3)
4.9999999304923345e-06

mean_size_ISO(k, r)
Calculates the mean particle size according to moment notation (ISO). This system is related to the moment-
ratio notation as follows; see the mean_size method for the full formulas.

¯𝑝−𝑞,𝑞 ≡ 𝑥
𝑥 ¯ 𝑝,𝑞
¯𝑘+𝑟,𝑟 ≡ 𝐷

Parameters
k [int] Power and/or subscript of D moment in the above equations, [-]
r [int] Power and/or subscript of D moment in the above equations, [-]
Returns
x_kr [float] Mean particle size according to the specified k and r in the ISO series, [m]

384 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

Notes

The following is a list of common names for specific mean diameters in the ISO naming convention.
• x[-3, 0]: arithmetic harmonic mean volume diameter
• x[-3, 1]: size-weighted harmonic mean volume diameter
• x[-3, 2]: area-weighted harmonic mean volume diameter
• x[-2, 0]: arithmetic harmonic mean area diameter
• x[-2, 1]: size-weighted harmonic mean area diameter
• x[-1, 0]: arithmetic harmonic mean diameter
• x[0, 0]: arithmetic geometric mean diameter
• x[0, 1]: size-weighted geometric mean diameter
• x[0, 2]: area-weighted geometric mean diameter
• x[0, 3]: volume-weighted geometric mean diameter
• x[1, 0]: arithmetic mean diameter
• x[1, 1]: size-weighted mean diameter
• x[1, 2]: area-weighted mean diameter, Sauter mean diameter
• x[1, 3]: volume-weighted mean diameter, De Brouckere diameter
• x[2, 0]: arithmetic mean area diameter
• x[1, 1]: size-weighted mean area diameter
• x[2, 2]: area-weighted mean area diameter
• x[2, 3]: volume-weighted mean area diameter
• x[3, 0]: arithmetic mean volume diameter
• x[3, 1]: size-weighted mean volume diameter
• x[3, 2]: area-weighted mean volume diameter
• x[3, 3]: volume-weighted mean volume diameter
When working with continuous distributions, the ISO series must be used to perform the actual calculations.

References

[1]

Examples

>>> psd = PSDLognormal(s=0.5, d_characteristic=5E-6)


>>> psd.mean_size_ISO(1, 2)
4.412484512922977e-06

2.17. Particle Size Distributions (fluids.particle_size_distribution) 385


Fluids Documentation, Release 1.0.21

pdf(d, n=None)
Computes the probability density function of a continuous particle size distribution at a specified particle
diameter, an optionally in a specified basis. The evaluation function varies with the distribution chosen.
The interconversion between distribution orders is performed using the following formula [1]:

𝑥(𝑠−𝑟) 𝑞𝑟 (𝑑)𝑑𝑑
𝑞𝑠 (𝑑) = ∫︀ ∞ (𝑠−𝑟)
0
𝑑 𝑞𝑟 (𝑑)𝑑𝑑

Parameters
d [float] Particle size diameter, [m]
n [int, optional] None (for the order specified when the distribution was created), 0 (number),
1 (length), 2 (area), 3 (volume/mass), or any integer, [-]
Returns
pdf [float] The probability density function at the specified diameter and order, [-]

Notes

The pdf order conversions are typically available analytically after some work. They have been verified
numerically. See the various functions with names ending with ‘basis_integral’ for the formulations. The
distributions normally do not have analytical limits for diameters of 0 or infinity, but large values suffice to
capture the area of the integral.

References

[1]

Examples

>>> psd = PSDLognormal(s=0.5, d_characteristic=5E-6, order=3)


>>> psd.pdf(1e-5)
30522.765209509154
>>> psd.pdf(1e-5, n=3)
30522.765209509154
>>> psd.pdf(1e-5, n=0)
1238.661379483343

plot_cdf(n=(0, 1, 2, 3), d_min=None, d_max=None, pts=500, method='logarithmic')


Plot the cumulative distribution function of the particle size distribution. The plotted range can be specified
using d_min and d_max, or estimated automatically. One or more order can be plotted, by providing an
iterable of ints as the value of n or just one int.
Parameters
n [tuple(int) or int, optional] None (for the order specified when the distribution was created),
0 (number), 1 (length), 2 (area), 3 (volume/mass), or any integer; as many as desired may
be specified, [-]
d_min [float, optional] Lower particle size diameter, [m]
d_max [float, optional] Upper particle size diameter, [m]
pts [int, optional] The number of points for values to be calculated, [-]

386 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

method [str, optional] Either ‘linear’, ‘logarithmic’, a Renard number like ‘R10’ or ‘R5’
or’R2.5’, or one of the sieve standards ‘ISO 3310-1 R40/3’, ‘ISO 3310-1 R20’, ‘ISO 3310-
1 R20/3’, ‘ISO 3310-1’, ‘ISO 3310-1 R10’, ‘ASTM E11’, [-]
plot_pdf(n=(0, 1, 2, 3), d_min=None, d_max=None, pts=500, normalized=False, method='linear')
Plot the probability density function of the particle size distribution. The plotted range can be specified
using d_min and d_max, or estimated automatically. One or more order can be plotted, by providing an
iterable of ints as the value of n or just one int.
Parameters
n [tuple(int) or int, optional] None (for the order specified when the distribution was created),
0 (number), 1 (length), 2 (area), 3 (volume/mass), or any integer; as many as desired may
be specified, [-]
d_min [float, optional] Lower particle size diameter, [m]
d_max [float, optional] Upper particle size diameter, [m]
pts [int, optional] The number of points for values to be calculated, [-]
normalized [bool, optional] Whether to display the actual probability density function,
which may have a huge magnitude - or to divide each point by the sum of all the points.
Doing this is a common practice, but the values at each point are dependent on the number
of points being plotted, and the distribution of the points; [-]
method [str, optional] Either ‘linear’, ‘logarithmic’, a Renard number like ‘R10’ or ‘R5’
or’R2.5’, or one of the sieve standards ‘ISO 3310-1 R40/3’, ‘ISO 3310-1 R20’, ‘ISO 3310-
1 R20/3’, ‘ISO 3310-1’, ‘ISO 3310-1 R10’, ‘ASTM E11’, [-]
property vssa
The volume-specific surface area of a particle size distribution.
6
VSSA =
𝑥
¯1,2

Returns
VSSA [float] The volume-specific surface area of the distribution, [m^2/m^3]

References

[1]

Examples

>>> PSDLognormal(s=0.5, d_characteristic=5E-6).vssa


1359778.1436801916

2.17. Particle Size Distributions (fluids.particle_size_distribution) 387


Fluids Documentation, Release 1.0.21

2.17.2 Discrete Particle Size Distributions

class fluids.particle_size_distribution.ParticleSizeDistribution(ds, fractions, cdf=False,


order=3, monotonic=True)
Class representing a discrete particle size distribution specified by a series of diameter bins, and the quantity
of particles in each bin. The quantities may be specified as either the fraction of particles in each bin, or as
cumulative distributions. The input fractions can be specified to be in a mass basis (order=3), number basis
(order=0), or the orders in between for length basis or area basis. If the fractions do not sum to 1, and cdf is
False, then the fractions are normalized. This allows flow rates or counts of size bins to be given as well.
Parameters
ds [list[float]] Diameter bins; length of the specified quantities, optionally +1 that length to spec-
ify a cutoff diameter for the smallest diameter bin, [m]
fractions [list[float], optional] The mass/mole/volume/length/area/count fractions or cumulative
distributions or counts of each particle size in each diameter bin (the type is specified by
order), [-]
order [int, optional] 0 for a number distribution as input; 1 for length distribution; 2 for area
distribution; 3 for mass, mole, or volume distribution, [-]
cdf [bool, optional] If the distribution is given as increasing fractions with 1 as the last result,
cdf must be set to True, [-]
monotonic [bool, optional] If True, for interpolated quanties, monotonic splines will be used
instead of the standard splines, [-]

Notes

Although the stated units of input are in meters, this class is actually independent of the units provided; all results
will be consistent with the provided unit.

References

[1], [2]

Examples

Example problem from [1], calculating several diameters and the cumulative distribution.

>>> import numpy as np


>>> ds = 1E-6*np.array([240, 360, 450, 562.5, 703, 878, 1097, 1371, 1713, 2141,␣
˓→2676, 3345, 4181, 5226, 6532])

>>> numbers = [65, 119, 232, 410, 629, 849, 990, 981, 825, 579, 297, 111, 21, 1]
>>> psd = ParticleSizeDistribution(ds=ds, fractions=numbers, order=0)
>>> psd
<Particle Size Distribution, points=14, D[3, 3]=0.002451 m>

Attributes
fractions [list[float]] The mass/mole/volume basis fractions of particles in each bin, [-]
area_fractions [list[float]] The area fractions of particles in each bin, [-]
length_fractions [list[float]] The length fractions of particles in each bin, [-]

388 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

number_fractions [list[float]] The number fractions of particles in each bin, [-]


fraction_cdf [list[float]] The cumulative mass/mole/volume basis fractions of particles in each
bin, [-]
area_cdf [list[float]] The cumulative area fractions of particles in each bin, [-]
length_cdf [list[float]] The cumulative length fractions of particles in each bin, [-]
number_cdf [list[float]] The cumulative number fractions of particles in each bin, [-]
size_classes [bool] Whether or not the diameter bins were set as size classes (as length of frac-
tions + 1), [-]
N [int] The number of provided points, [-]

Methods

cdf(d[, n]) Computes the cumulative distribution density func-


tion of a continuous particle size distribution at a
specified particle diameter, an optionally in a spec-
ified basis.
cdf_discrete(ds[, n]) Computes the cumulative distribution functions for a
list of specified particle diameters.
delta_cdf(d_min, d_max[, n]) Computes the difference in cumulative distribution
function between two particle size diameters.
di_power(i[, power]) Method to calculate a power of a particle class/bin
in a generic way so as to support when there are as
many ds as fractions, or one more diameter spec than
fractions.
dn(fraction[, n]) Computes the diameter at which a specified fraction
of the distribution falls under.
ds_discrete([d_min, d_max, pts, limit, method]) Create a particle spacing mesh to perform calcula-
tions with, according to one of several ways.
fit([x0, distribution, n]) Incomplete method to fit experimental values to a
curve.
fractions_discrete(ds[, n]) Computes the fractions of the cumulative distribution
functions which lie between the specified specified
particle diameters.
mean_size(p, q) Calculates the mean particle size according to
moment-ratio notation.
mean_size_ISO(k, r) Calculates the mean particle size according to mo-
ment notation (ISO).
pdf(d[, n]) Computes the probability density function of a con-
tinuous particle size distribution at a specified parti-
cle diameter, an optionally in a specified basis.
plot_cdf([n, d_min, d_max, pts, method]) Plot the cumulative distribution function of the parti-
cle size distribution.
plot_pdf([n, d_min, d_max, pts, normalized, ...]) Plot the probability density function of the particle
size distribution.

property Dis
Representative diameters of each bin.

2.17. Particle Size Distributions (fluids.particle_size_distribution) 389


Fluids Documentation, Release 1.0.21

di_power(i, power=1)
Method to calculate a power of a particle class/bin in a generic way so as to support when there are as many
ds as fractions, or one more diameter spec than fractions.
When each bin has a lower and upper bound, the formula is as follows [1].
(𝑟+1) (𝑟+1)
𝐷𝑖,𝑢𝑏 − 𝐷𝑖,𝑙𝑏
𝐷𝑖𝑟 =
(𝐷𝑖,𝑢𝑏 − 𝐷𝑖,𝑙𝑏 )(𝑟 + 1)

Where ub represents the upper bound, and lb represents the lower bound. Otherwise, the standard definition
is used:

𝐷𝑖𝑟 = 𝐷𝑖𝑟

Parameters
i [int] The index of the diameter for the calculation, [-]
power [int] The exponent, [-]
Returns
di_power [float] The representative bin diameter raised to power, [m^power]

References

[1]
fit(x0=None, distribution='lognormal', n=None, **kwargs)
Incomplete method to fit experimental values to a curve.
It is very hard to get good initial guesses, which are really required for this. Differential evolution is promis-
ing. This API is likely to change in the future.
mean_size(p, q)
Calculates the mean particle size according to moment-ratio notation. This is the more common and often
convenient definition.
𝑛𝑖 𝐷𝑖𝑝
∑︀
]︀(𝑝−𝑞)
¯ = ∑︀𝑖
[︀
𝐷𝑝,𝑞 𝑞
𝑖 𝑛𝑖 𝐷𝑖
𝑛𝑖 𝐷𝑖𝑝 ln 𝐷𝑖
[︂ ∑︀ ]︂
¯ 𝑝,𝑝 = exp 𝑖∑︀
, if p = q
[︀ ]︀
𝐷 𝑝
𝑖 𝑛𝑖 𝐷𝑖

Note that 𝑛𝑖 in the above equation is replaceable with the fraction of particles in that bin.
Parameters
p [int] Power and/or subscript of D moment in the above equations, [-]
q [int] Power and/or subscript of D moment in the above equations, [-]
Returns
d_pq [float] Mean particle size according to the specified p and q, [m]

390 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

Notes

The following is a list of common names for specific mean diameters.


• D[-3, 0]: arithmetic harmonic mean volume diameter
• D[-2, 1]: size-weighted harmonic mean volume diameter
• D[-1, 2]: area-weighted harmonic mean volume diameter
• D[-2, 0]: arithmetic harmonic mean area diameter
• D[-1, 1]: size-weighted harmonic mean area diameter
• D[-1, 0]: arithmetic harmonic mean diameter
• D[0, 0]: arithmetic geometric mean diameter
• D[1, 1]: size-weighted geometric mean diameter
• D[2, 2]: area-weighted geometric mean diameter
• D[3, 3]: volume-weighted geometric mean diameter
• D[1, 0]: arithmetic mean diameter
• D[2, 1]: size-weighted mean diameter
• D[3, 2]: area-weighted mean diameter, Sauter mean diameter
• D[4, 3]: volume-weighted mean diameter, De Brouckere diameter
• D[2, 0]: arithmetic mean area diameter
• D[3, 1]: size-weighted mean area diameter
• D[4, 2]: area-weighted mean area diameter
• D[5, 3]: volume-weighted mean area diameter
• D[3, 0]: arithmetic mean volume diameter
• D[4, 1]: size-weighted mean volume diameter
• D[5, 2]: area-weighted mean volume diameter
• D[6, 3]: volume-weighted mean volume diameter
This notation was first introduced in [1].
The sum of p and q is called the order of the mean size [3].

¯ 𝑝,𝑞 ≡ 𝐷
𝐷 ¯ 𝑞,𝑝

References

[1], [2], [3]

2.17. Particle Size Distributions (fluids.particle_size_distribution) 391


Fluids Documentation, Release 1.0.21

Examples

>>> import numpy as np


>>> ds = 1E-6*np.array([240, 360, 450, 562.5, 703, 878, 1097, 1371, 1713, 2141,␣
˓→2676, 3345, 4181, 5226, 6532])

>>> numbers = [65, 119, 232, 410, 629, 849, 990, 981, 825, 579, 297, 111, 21, 1]
>>> psd = ParticleSizeDistribution(ds=ds, fractions=numbers, order=0)
>>> psd.mean_size(3, 2)
0.002269321031745045

mean_size_ISO(k, r)
Calculates the mean particle size according to moment notation (ISO). This system is related to the moment-
ratio notation as follows; see the mean_size method for the full formulas.

¯𝑝−𝑞,𝑞 ≡ 𝑥
𝑥 ¯ 𝑝,𝑞
¯𝑘+𝑟,𝑟 ≡ 𝐷

Parameters
k [int] Power and/or subscript of D moment in the above equations, [-]
r [int] Power and/or subscript of D moment in the above equations, [-]
Returns
x_kr [float] Mean particle size according to the specified k and r in the ISO series, [m]

Notes

The following is a list of common names for specific mean diameters in the ISO naming convention.
• x[-3, 0]: arithmetic harmonic mean volume diameter
• x[-3, 1]: size-weighted harmonic mean volume diameter
• x[-3, 2]: area-weighted harmonic mean volume diameter
• x[-2, 0]: arithmetic harmonic mean area diameter
• x[-2, 1]: size-weighted harmonic mean area diameter
• x[-1, 0]: arithmetic harmonic mean diameter
• x[0, 0]: arithmetic geometric mean diameter
• x[0, 1]: size-weighted geometric mean diameter
• x[0, 2]: area-weighted geometric mean diameter
• x[0, 3]: volume-weighted geometric mean diameter
• x[1, 0]: arithmetic mean diameter
• x[1, 1]: size-weighted mean diameter
• x[1, 2]: area-weighted mean diameter, Sauter mean diameter
• x[1, 3]: volume-weighted mean diameter, De Brouckere diameter
• x[2, 0]: arithmetic mean area diameter
• x[1, 1]: size-weighted mean area diameter
• x[2, 2]: area-weighted mean area diameter

392 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

• x[2, 3]: volume-weighted mean area diameter


• x[3, 0]: arithmetic mean volume diameter
• x[3, 1]: size-weighted mean volume diameter
• x[3, 2]: area-weighted mean volume diameter
• x[3, 3]: volume-weighted mean volume diameter
When working with continuous distributions, the ISO series must be used to perform the actual calculations.

References

[1]

Examples

>>> import numpy as np


>>> ds = 1E-6*np.array([240, 360, 450, 562.5, 703, 878, 1097, 1371, 1713, 2141,␣
˓→2676, 3345, 4181, 5226, 6532])

>>> numbers = [65, 119, 232, 410, 629, 849, 990, 981, 825, 579, 297, 111, 21, 1]
>>> psd = ParticleSizeDistribution(ds=ds, fractions=numbers, order=0)
>>> psd.mean_size_ISO(1, 2)
0.002269321031745045

property vssa
The volume-specific surface area of a particle size distribution. Note this uses the diameters provided by
the method Dis.
∑︁ 𝑆𝐴𝑖
VSSA = fraction𝑖
𝑖
𝑉𝑖

Returns
VSSA [float] The volume-specific surface area of the distribution, [m^2/m^3]

References

[1]
class fluids.particle_size_distribution.PSDInterpolated(ds, fractions, order=3, monotonic=True)

Attributes
vssa The volume-specific surface area of a particle size distribution.

2.17. Particle Size Distributions (fluids.particle_size_distribution) 393


Fluids Documentation, Release 1.0.21

Methods

cdf(d[, n]) Computes the cumulative distribution density func-


tion of a continuous particle size distribution at a
specified particle diameter, an optionally in a spec-
ified basis.
cdf_discrete(ds[, n]) Computes the cumulative distribution functions for a
list of specified particle diameters.
delta_cdf(d_min, d_max[, n]) Computes the difference in cumulative distribution
function between two particle size diameters.
dn(fraction[, n]) Computes the diameter at which a specified fraction
of the distribution falls under.
ds_discrete([d_min, d_max, pts, limit, method]) Create a particle spacing mesh to perform calcula-
tions with, according to one of several ways.
fractions_discrete(ds[, n]) Computes the fractions of the cumulative distribution
functions which lie between the specified specified
particle diameters.
mean_size(p, q) Calculates the mean particle size according to
moment-ratio notation.
mean_size_ISO(k, r) Calculates the mean particle size according to mo-
ment notation (ISO).
pdf(d[, n]) Computes the probability density function of a con-
tinuous particle size distribution at a specified parti-
cle diameter, an optionally in a specified basis.
plot_cdf([n, d_min, d_max, pts, method]) Plot the cumulative distribution function of the parti-
cle size distribution.
plot_pdf([n, d_min, d_max, pts, normalized, ...]) Plot the probability density function of the particle
size distribution.

2.17.3 Statistical Particle Size Distributions

class fluids.particle_size_distribution.PSDLognormal(d_characteristic, s, order=3, d_min=None,


d_max=None)

Attributes
vssa The volume-specific surface area of a particle size distribution.

Methods

cdf(d[, n]) Computes the cumulative distribution density func-


tion of a continuous particle size distribution at a
specified particle diameter, an optionally in a spec-
ified basis.
cdf_discrete(ds[, n]) Computes the cumulative distribution functions for a
list of specified particle diameters.
delta_cdf(d_min, d_max[, n]) Computes the difference in cumulative distribution
function between two particle size diameters.
continues on next page

394 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

Table 7 – continued from previous page


dn(fraction[, n]) Computes the diameter at which a specified fraction
of the distribution falls under.
ds_discrete([d_min, d_max, pts, limit, method]) Create a particle spacing mesh to perform calcula-
tions with, according to one of several ways.
fractions_discrete(ds[, n]) Computes the fractions of the cumulative distribution
functions which lie between the specified specified
particle diameters.
mean_size(p, q) Calculates the mean particle size according to
moment-ratio notation.
mean_size_ISO(k, r) Calculates the mean particle size according to mo-
ment notation (ISO).
pdf(d[, n]) Computes the probability density function of a con-
tinuous particle size distribution at a specified parti-
cle diameter, an optionally in a specified basis.
plot_cdf([n, d_min, d_max, pts, method]) Plot the cumulative distribution function of the parti-
cle size distribution.
plot_pdf([n, d_min, d_max, pts, normalized, ...]) Plot the probability density function of the particle
size distribution.

class fluids.particle_size_distribution.PSDGatesGaudinSchuhman(d_characteristic, m, order=3,


d_min=None, d_max=None)

Attributes
vssa The volume-specific surface area of a particle size distribution.

Methods

cdf(d[, n]) Computes the cumulative distribution density func-


tion of a continuous particle size distribution at a
specified particle diameter, an optionally in a spec-
ified basis.
cdf_discrete(ds[, n]) Computes the cumulative distribution functions for a
list of specified particle diameters.
delta_cdf(d_min, d_max[, n]) Computes the difference in cumulative distribution
function between two particle size diameters.
dn(fraction[, n]) Computes the diameter at which a specified fraction
of the distribution falls under.
ds_discrete([d_min, d_max, pts, limit, method]) Create a particle spacing mesh to perform calcula-
tions with, according to one of several ways.
fractions_discrete(ds[, n]) Computes the fractions of the cumulative distribution
functions which lie between the specified specified
particle diameters.
mean_size(p, q) Calculates the mean particle size according to
moment-ratio notation.
mean_size_ISO(k, r) Calculates the mean particle size according to mo-
ment notation (ISO).
pdf(d[, n]) Computes the probability density function of a con-
tinuous particle size distribution at a specified parti-
cle diameter, an optionally in a specified basis.
continues on next page

2.17. Particle Size Distributions (fluids.particle_size_distribution) 395


Fluids Documentation, Release 1.0.21

Table 8 – continued from previous page


plot_cdf([n, d_min, d_max, pts, method]) Plot the cumulative distribution function of the parti-
cle size distribution.
plot_pdf([n, d_min, d_max, pts, normalized, ...]) Plot the probability density function of the particle
size distribution.

class fluids.particle_size_distribution.PSDRosinRammler(k, m, order=3, d_min=None,


d_max=None)

Attributes
vssa The volume-specific surface area of a particle size distribution.

Methods

cdf(d[, n]) Computes the cumulative distribution density func-


tion of a continuous particle size distribution at a
specified particle diameter, an optionally in a spec-
ified basis.
cdf_discrete(ds[, n]) Computes the cumulative distribution functions for a
list of specified particle diameters.
delta_cdf(d_min, d_max[, n]) Computes the difference in cumulative distribution
function between two particle size diameters.
dn(fraction[, n]) Computes the diameter at which a specified fraction
of the distribution falls under.
ds_discrete([d_min, d_max, pts, limit, method]) Create a particle spacing mesh to perform calcula-
tions with, according to one of several ways.
fractions_discrete(ds[, n]) Computes the fractions of the cumulative distribution
functions which lie between the specified specified
particle diameters.
mean_size(p, q) Calculates the mean particle size according to
moment-ratio notation.
mean_size_ISO(k, r) Calculates the mean particle size according to mo-
ment notation (ISO).
pdf(d[, n]) Computes the probability density function of a con-
tinuous particle size distribution at a specified parti-
cle diameter, an optionally in a specified basis.
plot_cdf([n, d_min, d_max, pts, method]) Plot the cumulative distribution function of the parti-
cle size distribution.
plot_pdf([n, d_min, d_max, pts, normalized, ...]) Plot the probability density function of the particle
size distribution.

class fluids.particle_size_distribution.PSDCustom(distribution, order=3.0, d_excessive=1.0,


name=None, d_min=None, d_max=None)

Attributes
vssa The volume-specific surface area of a particle size distribution.

396 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

Methods

cdf(d[, n]) Computes the cumulative distribution density func-


tion of a continuous particle size distribution at a
specified particle diameter, an optionally in a spec-
ified basis.
cdf_discrete(ds[, n]) Computes the cumulative distribution functions for a
list of specified particle diameters.
delta_cdf(d_min, d_max[, n]) Computes the difference in cumulative distribution
function between two particle size diameters.
dn(fraction[, n]) Computes the diameter at which a specified fraction
of the distribution falls under.
ds_discrete([d_min, d_max, pts, limit, method]) Create a particle spacing mesh to perform calcula-
tions with, according to one of several ways.
fractions_discrete(ds[, n]) Computes the fractions of the cumulative distribution
functions which lie between the specified specified
particle diameters.
mean_size(p, q) Calculates the mean particle size according to
moment-ratio notation.
mean_size_ISO(k, r) Calculates the mean particle size according to mo-
ment notation (ISO).
pdf(d[, n]) Computes the probability density function of a con-
tinuous particle size distribution at a specified parti-
cle diameter, an optionally in a specified basis.
plot_cdf([n, d_min, d_max, pts, method]) Plot the cumulative distribution function of the parti-
cle size distribution.
plot_pdf([n, d_min, d_max, pts, normalized, ...]) Plot the probability density function of the particle
size distribution.

2.17.4 Helper functions: Lognormal Distribution

fluids.particle_size_distribution.pdf_lognormal(d, d_characteristic, s)
Calculates the probability density function of a lognormal particle distribution given a particle diameter d, char-
acteristic particle diameter d_characteristic, and distribution standard deviation s.
[︃ (︂ )︂2 ]︃
1 ln(𝑑/𝑑𝑐ℎ𝑎𝑟𝑎𝑐𝑡𝑒𝑟𝑖𝑠𝑡𝑖𝑐 )
𝑞(𝑑) = √ exp −0.5
𝑑𝑠 2𝜋 𝑠

Parameters
d [float] Specified particle diameter, [m]
d_characteristic [float] Characteristic particle diameter; often D[3, 3] is used for this purpose
but not always, [m]
s [float] Distribution standard deviation, [-]
Returns
pdf [float] Lognormal probability density function, [-]

2.17. Particle Size Distributions (fluids.particle_size_distribution) 397


Fluids Documentation, Release 1.0.21

Notes

The characteristic diameter can be in terns of number density (denoted 𝑞0 (𝑑)), length density (𝑞1 (𝑑)), surface
area density (𝑞2 (𝑑)), or volume density (𝑞3 (𝑑)). Volume density is most often used. Interconversions among the
distributions is possible but tricky.
The standard distribution (i.e. the one used in Scipy) can perform the same computation with d_characteristic
as the value of scale.

>>> import scipy.stats


>>> scipy.stats.lognorm.pdf(x=1E-4, s=1.1, scale=1E-5)
405.5420921156425

Scipy’s calculation is over 300 times slower however, and this expression is numerically integrated so speed is
required.

References

[1]

Examples

>>> pdf_lognormal(d=1E-4, d_characteristic=1E-5, s=1.1)


405.5420921156425

fluids.particle_size_distribution.cdf_lognormal(d, d_characteristic, s)
Calculates the cumulative distribution function of a lognormal particle distribution given a particle diameter d,
characteristic particle diameter d_characteristic, and distribution standard deviation s.
(︂ [︂(︂ )︂]︂)︂
ln(𝑑/𝑑𝑐 )
𝑄(𝑑) = 0.5 1 + err √
𝑠 2
Parameters
d [float] Specified particle diameter, [m]
d_characteristic [float] Characteristic particle diameter; often D[3, 3] is used for this purpose
but not always, [m]
s [float] Distribution standard deviation, [-]
Returns
cdf [float] Lognormal cumulative density function, [-]

Notes

The characteristic diameter can be in terns of number density (denoted 𝑞0 (𝑑)), length density (𝑞1 (𝑑)), surface
area density (𝑞2 (𝑑)), or volume density (𝑞3 (𝑑)). Volume density is most often used. Interconversions among the
distributions is possible but tricky.
The standard distribution (i.e. the one used in Scipy) can perform the same computation with d_characteristic
as the value of scale.

398 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

>>> import scipy.stats


>>> scipy.stats.lognorm.cdf(x=1E-4, s=1.1, scale=1E-5)
0.9818369875798177

Scipy’s calculation is over 100 times slower however.

References

[1]

Examples

>>> cdf_lognormal(d=1E-4, d_characteristic=1E-5, s=1.1)


0.9818369875798

fluids.particle_size_distribution.pdf_lognormal_basis_integral(d, d_characteristic, s, n)
Calculates the integral of the multiplication of d^n by the lognormal pdf, given a particle diameter d, characteristic
particle diameter d_characteristic, distribution standard deviation s, and exponent n.
)︂−𝑛
𝑠2 𝑛2 𝑠2 𝑛 − ln(𝑑/𝑑𝑐ℎ𝑎𝑟𝑎𝑐𝑡𝑒𝑟𝑖𝑠𝑡𝑖𝑐 )
∫︁ (︂ )︂ (︂ [︂ ]︂
1 𝑑
𝑛
𝑑 · 𝑞(𝑑) 𝑑𝑑 = − exp 𝑑 𝑛
erf √
2 2 𝑑𝑐ℎ𝑎𝑟𝑎𝑐𝑡𝑒𝑟𝑖𝑠𝑡𝑖𝑐 2𝑠
This is the crucial integral required for interconversion between different bases such as number density (denoted
𝑞0 (𝑑)), length density (𝑞1 (𝑑)), surface area density (𝑞2 (𝑑)), or volume density (𝑞3 (𝑑)).
Parameters
d [float] Specified particle diameter, [m]
d_characteristic [float] Characteristic particle diameter; often D[3, 3] is used for this purpose
but not always, [m]
s [float] Distribution standard deviation, [-]
n [int] Exponent of the multiplied n
Returns
pdf_basis_integral [float] Integral of lognormal pdf multiplied by d^n, [-]

Notes

This integral has been verified numerically. This integral is itself integrated, so it is crucial to obtain an analytical
form for at least this integral.
Note overflow or zero division issues may occur for very large values of s, larger than 10. No mathematical limit
was able to be obtained with a CAS.

2.17. Particle Size Distributions (fluids.particle_size_distribution) 399


Fluids Documentation, Release 1.0.21

Examples

>>> pdf_lognormal_basis_integral(d=1E-4, d_characteristic=1E-5, s=1.1, n=-2)


56228306549.26362

2.17.5 Helper functions: Gates Gaudin Schuhman Distribution

fluids.particle_size_distribution.pdf_Gates_Gaudin_Schuhman(d, d_characteristic, m)
Calculates the probability density of a particle distribution following the Gates, Gaudin and Schuhman (GGS)
model given a particle diameter d, characteristic (maximum) particle diameter d_characteristic, and exponent
m.
(︂ )︂𝑚
𝑛 𝑑
𝑞(𝑑) = if 𝑑 < 𝑑𝑐ℎ𝑎𝑟𝑎𝑐𝑡𝑒𝑟𝑖𝑠𝑡𝑖𝑐 else 0
𝑑 𝑑𝑐ℎ𝑎𝑟𝑎𝑐𝑡𝑒𝑟𝑖𝑠𝑡𝑖𝑐

Parameters
d [float] Specified particle diameter, [m]
d_characteristic [float] Characteristic particle diameter; in this model, it is the largest particle
size diameter in the distribution, [m]
m [float] Particle size distribution exponent, [-]
Returns
pdf [float] GGS probability density function, [-]

Notes

The characteristic diameter can be in terns of number density (denoted 𝑞0 (𝑑)), length density (𝑞1 (𝑑)), surface
area density (𝑞2 (𝑑)), or volume density (𝑞3 (𝑑)). Volume density is most often used. Interconversions among the
distributions is possible but tricky.

References

[1], [2]

Examples

>>> pdf_Gates_Gaudin_Schuhman(d=2E-4, d_characteristic=1E-3, m=2.3)


283.8355768512045

fluids.particle_size_distribution.cdf_Gates_Gaudin_Schuhman(d, d_characteristic, m)
Calculates the cumulative distribution function of a particle distribution following the Gates, Gaudin and Schuh-
man (GGS) model given a particle diameter d, characteristic (maximum) particle diameter d_characteristic, and
exponent m.
(︂ )︂𝑚
𝑑
𝑄(𝑑) = if 𝑑 < 𝑑𝑐ℎ𝑎𝑟𝑎𝑐𝑡𝑒𝑟𝑖𝑠𝑡𝑖𝑐 else 1
𝑑𝑐ℎ𝑎𝑟𝑎𝑐𝑡𝑒𝑟𝑖𝑠𝑡𝑖𝑐

Parameters
d [float] Specified particle diameter, [m]

400 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

d_characteristic [float] Characteristic particle diameter; in this model, it is the largest particle
size diameter in the distribution, [m]
m [float] Particle size distribution exponent, [-]
Returns
cdf [float] GGS cumulative density function, [-]

Notes

The characteristic diameter can be in terns of number density (denoted 𝑞0 (𝑑)), length density (𝑞1 (𝑑)), surface
area density (𝑞2 (𝑑)), or volume density (𝑞3 (𝑑)). Volume density is most often used. Interconversions among the
distributions is possible but tricky.

References

[1], [2]

Examples

>>> cdf_Gates_Gaudin_Schuhman(d=2E-4, d_characteristic=1E-3, m=2.3)


0.024681354508800397

fluids.particle_size_distribution.pdf_Gates_Gaudin_Schuhman_basis_integral(d,
d_characteristic,
m, n)
Calculates the integral of the multiplication of d^n by the Gates, Gaudin and Schuhman (GGS) model given a
particle diameter d, characteristic (maximum) particle diameter d_characteristic, and exponent m.
∫︁ (︂ )︂𝑚
𝑚 𝑑
𝑑𝑛 · 𝑞(𝑑) 𝑑𝑑 = 𝑑𝑛
𝑚+𝑛 𝑑𝑐ℎ𝑎𝑟𝑎𝑐𝑡𝑒𝑟𝑖𝑠𝑡𝑖𝑐

Parameters
d [float] Specified particle diameter, [m]
d_characteristic [float] Characteristic particle diameter; in this model, it is the largest particle
size diameter in the distribution, [m]
m [float] Particle size distribution exponent, [-]
n [int] Exponent of the multiplied n, [-]
Returns
pdf_basis_integral [float] Integral of Rosin Rammler pdf multiplied by d^n, [-]

2.17. Particle Size Distributions (fluids.particle_size_distribution) 401


Fluids Documentation, Release 1.0.21

Notes

This integral does not have any numerical issues as d approaches 0.

Examples

>>> pdf_Gates_Gaudin_Schuhman_basis_integral(d=2E-4, d_characteristic=1E-3, m=2.3,␣


˓→n=-3)

-10136984887.543015

2.17.6 Helper functions: Rosin Rammler Distribution

fluids.particle_size_distribution.pdf_Rosin_Rammler(d, k, m)
Calculates the probability density of a particle distribution following the Rosin-Rammler (RR) model given a
particle diameter d, and the two parameters k and m.

𝑞(𝑑) = 𝑘𝑚𝑑(𝑚−1) exp(−𝑘𝑑𝑚 )

Parameters
d [float] Specified particle diameter, [m]
k [float] Parameter in the model, [(1/m)^m]
m [float] Parameter in the model, [-]
Returns
pdf [float] RR probability density function, [-]

References

[1], [2]

Examples

>>> pdf_Rosin_Rammler(1E-3, 200, 2)


0.3999200079994667

fluids.particle_size_distribution.cdf_Rosin_Rammler(d, k, m)
Calculates the cumulative distribution function of a particle distribution following the Rosin-Rammler (RR)
model given a particle diameter d, and the two parameters k and m.

𝑄(𝑑) = 1 − exp (−𝑘𝑑𝑚 )

Parameters
d [float] Specified particle diameter, [m]
k [float] Parameter in the model, [(1/m)^m]
m [float] Parameter in the model, [-]
Returns
cdf [float] RR cumulative density function, [-]

402 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

Notes

The characteristic diameter can be in terns of number density (denoted 𝑞0 (𝑑)), length density (𝑞1 (𝑑)), surface
area density (𝑞2 (𝑑)), or volume density (𝑞3 (𝑑)). Volume density is most often used. Interconversions among the
distributions is possible but tricky.

References

[1], [2]

Examples

>>> cdf_Rosin_Rammler(5E-2, 200, 2)


0.3934693402873667

fluids.particle_size_distribution.pdf_Rosin_Rammler_basis_integral(d, k, m, n)
Calculates the integral of the multiplication of d^n by the Rosin Rammler (RR) pdf, given a particle diameter d,
and the two parameters k and m.
∫︁ (︂ )︂ [︂(︂ )︂ ]︂
𝑚 − 𝑚+𝑛 𝑚+𝑛 𝑚+𝑛
𝑛
𝑑 · 𝑞(𝑑) 𝑑𝑑 = −𝑑 𝑚+𝑛
𝑘(𝑑 𝑘) 𝑚 Γ gammaincc , 𝑘𝑑 𝑚
𝑚 𝑚

Parameters
d [float] Specified particle diameter, [m]
k [float] Parameter in the model, [(1/m)^m]
m [float] Parameter in the model, [-]
n [int] Exponent of the multiplied n, [-]
Returns
pdf_basis_integral [float] Integral of Rosin Rammler pdf multiplied by d^n, [-]

Notes

This integral was derived using a CAS, and verified numerically. The gammaincc function is that from
scipy.special, and gamma from the same.
For very high powers of n or m when the diameter is very low, exceptions may occur.

Examples

>>> "{:g}".format(pdf_Rosin_Rammler_basis_integral(5E-2, 200, 2, 3))


'-0.000452399'

2.17. Particle Size Distributions (fluids.particle_size_distribution) 403


Fluids Documentation, Release 1.0.21

2.17.7 Sieves

class fluids.particle_size_distribution.Sieve(designation, old_designation=None, opening=None,


opening_inch=None, Y_variation_avg=None,
X_variation_max=None, max_opening=None,
compliance_samples=None, compliance_sd=None,
inspection_samples=None, inspection_sd=None,
calibration_samples=None, calibration_sd=None,
d_wire=None, d_wire_min=None, d_wire_max=None)
Class for storing data on sieves. If a property is not available, it is set to None.
Attributes
designation [str] The standard name of the sieve - its opening’s length in units of millimeters
old_designation [str] The older, imperial-esque name of the sieve; in Numbers, or inches for
large sieves
opening [float] The opening length of the sieve holes, [m]
opening_inch [float] The opening length of the sieve holes in the rounded inches as stated in
common tables (not exactly equal to the opening), [inch]
Y_variation_avg [float] The allowable average variation in the Y direction of the sieve openings,
[m]
X_variation_max [float] The allowable maximum variation in the X direction of the sieve open-
ings, [m]
max_opening [float] The maximum allowable opening of the sieve, [m]
calibration_samples [float] The number of opening sample inspections required for calibration-
type sieve openings (per 100 ft^2 of sieve material), [1/(ft^2)]
compliance_sd [float] The maximum standard deviation of compliance-type sieve openings, [-]
inspection_samples [float] The number of opening sample inspections required for inspection-
type sieve openings (based on an 8-inch sieve), [-]
inspection_sd [float] The maximum standard deviation of inspection-type sieve openings, [-]
calibration_samples [float] The number of opening sample inspections required for calibration-
type sieve openings (based on an 8-inch sieve), [-]
calibration_sd [float] The maximum standard deviation of calibration-type sieve openings, [-]
d_wire [float] Typical wire diameter of the specified sieve size, [m]
d_wire_min [float] Permissible minimum wire diameter of specified sieve size, [m]
d_wire_max [float] Permissible maximum wire diameter of specified sieve size, [m]

404 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

fluids.particle_size_distribution.ASTM_E11_sieves = {'0.02': <Sieve, designation 0.02 mm,


opening 2e-05 m>, '0.025': <Sieve, designation 0.025 mm, opening 2.5e-05 m>, '0.032':
<Sieve, designation 0.032 mm, opening 3.2e-05 m>, '0.038': <Sieve, designation 0.038 mm,
opening 3.8e-05 m>, '0.045': <Sieve, designation 0.045 mm, opening 4.5e-05 m>, '0.053':
<Sieve, designation 0.053 mm, opening 5.3e-05 m>, '0.063': <Sieve, designation 0.063 mm,
opening 6.3e-05 m>, '0.075': <Sieve, designation 0.075 mm, opening 7.5e-05 m>, '0.09':
<Sieve, designation 0.09 mm, opening 9e-05 m>, '0.106': <Sieve, designation 0.106 mm,
opening 0.000106 m>, '0.125': <Sieve, designation 0.125 mm, opening 0.000125 m>, '0.15':
<Sieve, designation 0.15 mm, opening 0.00015 m>, '0.18': <Sieve, designation 0.18 mm,
opening 0.00018 m>, '0.212': <Sieve, designation 0.212 mm, opening 0.000212 m>, '0.25':
<Sieve, designation 0.25 mm, opening 0.00025 m>, '0.3': <Sieve, designation 0.3 mm,
opening 0.0003 m>, '0.355': <Sieve, designation 0.355 mm, opening 0.000355 m>, '0.425':
<Sieve, designation 0.425 mm, opening 0.000425 m>, '0.5': <Sieve, designation 0.5 mm,
opening 0.0005 m>, '0.6': <Sieve, designation 0.6 mm, opening 0.0006 m>, '0.71': <Sieve,
designation 0.71 mm, opening 0.00071 m>, '0.85': <Sieve, designation 0.85 mm, opening
0.00085 m>, '1': <Sieve, designation 1 mm, opening 0.001 m>, '1.18': <Sieve, designation
1.18 mm, opening 0.00118 m>, '1.4': <Sieve, designation 1.4 mm, opening 0.0014 m>, '1.7':
<Sieve, designation 1.7 mm, opening 0.0017 m>, '100': <Sieve, designation 100 mm, opening
0.1 m>, '106': <Sieve, designation 106 mm, opening 0.106 m>, '11.2': <Sieve, designation
11.2 mm, opening 0.0112 m>, '12.5': <Sieve, designation 12.5 mm, opening 0.0125 m>,
'125': <Sieve, designation 125 mm, opening 0.125 m>, '13.2': <Sieve, designation 13.2 mm,
opening 0.0132 m>, '16': <Sieve, designation 16 mm, opening 0.016 m>, '19': <Sieve,
designation 19 mm, opening 0.019 m>, '2': <Sieve, designation 2 mm, opening 0.002 m>,
'2.36': <Sieve, designation 2.36 mm, opening 0.00236 m>, '2.8': <Sieve, designation 2.8
mm, opening 0.0028 m>, '22.4': <Sieve, designation 22.4 mm, opening 0.0224 m>, '25':
<Sieve, designation 25 mm, opening 0.025 m>, '26.5': <Sieve, designation 26.5 mm, opening
0.0265 m>, '3.35': <Sieve, designation 3.35 mm, opening 0.00335 m>, '31.5': <Sieve,
designation 31.5 mm, opening 0.0315 m>, '37.5': <Sieve, designation 37.5 mm, opening
0.0375 m>, '4': <Sieve, designation 4 mm, opening 0.004 m>, '4.75': <Sieve, designation
4.75 mm, opening 0.00475 m>, '45': <Sieve, designation 45 mm, opening 0.045 m>, '5.6':
<Sieve, designation 5.6 mm, opening 0.0056 m>, '50': <Sieve, designation 50 mm, opening
0.05 m>, '53': <Sieve, designation 53 mm, opening 0.053 m>, '6.3': <Sieve, designation
6.3 mm, opening 0.0063 m>, '6.7': <Sieve, designation 6.7 mm, opening 0.0067 m>, '63':
<Sieve, designation 63 mm, opening 0.063 m>, '75': <Sieve, designation 75 mm, opening
0.075 m>, '8': <Sieve, designation 8 mm, opening 0.008 m>, '9.5': <Sieve, designation 9.5
mm, opening 0.0095 m>, '90': <Sieve, designation 90 mm, opening 0.09 m>}
Dictionary containing ASTM E-11 sieve series Sieve objects, indexed by their size in mm as a string.

References

[1]

2.17. Particle Size Distributions (fluids.particle_size_distribution) 405


Fluids Documentation, Release 1.0.21

fluids.particle_size_distribution.ISO_3310_1_sieves = {'0.02': <Sieve, designation 0.02


mm, opening 2e-05 m>, '0.025': <Sieve, designation 0.025 mm, opening 2.5e-05 m>, '0.032':
<Sieve, designation 0.032 mm, opening 3.2e-05 m>, '0.036': <Sieve, designation 0.036 mm,
opening 3.6e-05 m>, '0.038': <Sieve, designation 0.038 mm, opening 3.8e-05 m>, '0.04':
<Sieve, designation 0.04 mm, opening 4e-05 m>, '0.045': <Sieve, designation 0.045 mm,
opening 4.5e-05 m>, '0.05': <Sieve, designation 0.05 mm, opening 5e-05 m>, '0.053':
<Sieve, designation 0.053 mm, opening 5.3e-05 m>, '0.056': <Sieve, designation 0.056 mm,
opening 5.6e-05 m>, '0.063': <Sieve, designation 0.063 mm, opening 6.3e-05 m>, '0.071':
<Sieve, designation 0.071 mm, opening 7.1e-05 m>, '0.075': <Sieve, designation 0.075 mm,
opening 7.5e-05 m>, '0.08': <Sieve, designation 0.08 mm, opening 8e-05 m>, '0.09':
<Sieve, designation 0.09 mm, opening 9e-05 m>, '0.1': <Sieve, designation 0.1 mm, opening
0.0001 m>, '0.106': <Sieve, designation 0.106 mm, opening 0.000106 m>, '0.112': <Sieve,
designation 0.112 mm, opening 0.000112 m>, '0.125': <Sieve, designation 0.125 mm, opening
0.000125 m>, '0.14': <Sieve, designation 0.14 mm, opening 0.00014 m>, '0.15': <Sieve,
designation 0.15 mm, opening 0.00015 m>, '0.16': <Sieve, designation 0.16 mm, opening
0.00016 m>, '0.18': <Sieve, designation 0.18 mm, opening 0.00018 m>, '0.2': <Sieve,
designation 0.2 mm, opening 0.0002 m>, '0.212': <Sieve, designation 0.212 mm, opening
0.000212 m>, '0.224': <Sieve, designation 0.224 mm, opening 0.000224 m>, '0.25': <Sieve,
designation 0.25 mm, opening 0.00025 m>, '0.28': <Sieve, designation 0.28 mm, opening
0.00028 m>, '0.3': <Sieve, designation 0.3 mm, opening 0.0003 m>, '0.315': <Sieve,
designation 0.315 mm, opening 0.000315 m>, '0.355': <Sieve, designation 0.355 mm, opening
0.000355 m>, '0.4': <Sieve, designation 0.4 mm, opening 0.0004 m>, '0.425': <Sieve,
designation 0.425 mm, opening 0.000425 m>, '0.45': <Sieve, designation 0.45 mm, opening
0.00045 m>, '0.5': <Sieve, designation 0.5 mm, opening 0.0005 m>, '0.56': <Sieve,
designation 0.56 mm, opening 0.00056 m>, '0.6': <Sieve, designation 0.6 mm, opening
0.0006 m>, '0.63': <Sieve, designation 0.63 mm, opening 0.00063 m>, '0.71': <Sieve,
designation 0.71 mm, opening 0.00071 m>, '0.8': <Sieve, designation 0.8 mm, opening
0.0008 m>, '0.85': <Sieve, designation 0.85 mm, opening 0.00085 m>, '0.9': <Sieve,
designation 0.9 mm, opening 0.0009 m>, '1': <Sieve, designation 1 mm, opening 0.001 m>,
'1.12': <Sieve, designation 1.12 mm, opening 0.00112 m>, '1.18': <Sieve, designation 1.18
mm, opening 0.00118 m>, '1.25': <Sieve, designation 1.25 mm, opening 0.00125 m>, '1.4':
<Sieve, designation 1.4 mm, opening 0.0014 m>, '1.6': <Sieve, designation 1.6 mm, opening
0.0016 m>, '1.7': <Sieve, designation 1.7 mm, opening 0.0017 m>, '1.8': <Sieve,
designation 1.8 mm, opening 0.0018 m>, '10': <Sieve, designation 10 mm, opening 0.01 m>,
'100': <Sieve, designation 100 mm, opening 0.1 m>, '106': <Sieve, designation 106 mm,
opening 0.106 m>, '11.2': <Sieve, designation 11.2 mm, opening 0.0112 m>, '112': <Sieve,
designation 112 mm, opening 0.112 m>, '12.5': <Sieve, designation 12.5 mm, opening 0.0125
m>, '125': <Sieve, designation 125 mm, opening 0.125 m>, '13.2': <Sieve, designation 13.2
mm, opening 0.0132 m>, '14': <Sieve, designation 14 mm, opening 0.014 m>, '16': <Sieve,
designation 16 mm, opening 0.016 m>, '18': <Sieve, designation 18 mm, opening 0.018 m>,
'19': <Sieve, designation 19 mm, opening 0.019 m>, '2': <Sieve, designation 2 mm, opening
0.002 m>, '2.24': <Sieve, designation 2.24 mm, opening 0.00224 m>, '2.36': <Sieve,
designation 2.36 mm, opening 0.00236 m>, '2.5': <Sieve, designation 2.5 mm, opening
0.0025 m>, '2.8': <Sieve, designation 2.8 mm, opening 0.0028 m>, '20': <Sieve,
designation 20 mm, opening 0.02 m>, '22.4': <Sieve, designation 22.4 mm, opening 0.0224
m>, '25': <Sieve, designation 25 mm, opening 0.025 m>, '26.5': <Sieve, designation 26.5
mm, opening 0.0265 m>, '28': <Sieve, designation 28 mm, opening 0.028 m>, '3.15': <Sieve,
designation 3.15 mm, opening 0.00315 m>, '3.35': <Sieve, designation 3.35 mm, opening
0.00335 m>, '3.55': <Sieve, designation 3.55 mm, opening 0.00355 m>, '31.5': <Sieve,
designation 31.5 mm, opening 0.0315 m>, '35.5': <Sieve, designation 35.5 mm, opening
0.0355 m>, '37.5': <Sieve, designation 37.5 mm, opening 0.0375 m>, '4': <Sieve,
designation 4 mm, opening 0.004 m>, '4.5': <Sieve, designation 4.5 mm, opening 0.0045 m>,
'4.75': <Sieve, designation 4.75 mm, opening 0.00475 m>, '40': <Sieve, designation 40 mm,
opening 0.04 m>, '45': <Sieve, designation 45 mm, opening 0.045 m>, '5': <Sieve,
designation 5 mm, opening 0.005 m>, '5.6': <Sieve, designation 5.6 mm, opening 0.0056 m>,
'50': <Sieve, designation 50 mm, opening 0.05 m>, '53': <Sieve, designation 53 mm,
opening 0.053 m>, '56': <Sieve, designation 56 mm, opening 0.056 m>,
406 '6.3':
Chapter 2. <Sieve,
API Reference
designation 6.3 mm, opening 0.0063 m>, '6.7': <Sieve, designation 6.7 mm, opening 0.0067
m>, '63': <Sieve, designation 63 mm, opening 0.063 m>, '7.1': <Sieve, designation 7.1 mm,
opening 0.0071 m>, '71': <Sieve, designation 71 mm, opening 0.071 m>, '75': <Sieve,
Fluids Documentation, Release 1.0.21

Dictionary containing all of the individual Sieve objects, on the ISO 3310-1:2016 series, indexed by their size
in mm as a string.

References

[1]
fluids.particle_size_distribution.ISO_3310_1_R20 = [<Sieve, designation 125 mm, opening
0.125 m>, <Sieve, designation 112 mm, opening 0.112 m>, <Sieve, designation 100 mm,
opening 0.1 m>, <Sieve, designation 90 mm, opening 0.09 m>, <Sieve, designation 80 mm,
opening 0.08 m>, <Sieve, designation 71 mm, opening 0.071 m>, <Sieve, designation 63 mm,
opening 0.063 m>, <Sieve, designation 56 mm, opening 0.056 m>, <Sieve, designation 50 mm,
opening 0.05 m>, <Sieve, designation 45 mm, opening 0.045 m>, <Sieve, designation 40 mm,
opening 0.04 m>, <Sieve, designation 35.5 mm, opening 0.0355 m>, <Sieve, designation 31.5
mm, opening 0.0315 m>, <Sieve, designation 28 mm, opening 0.028 m>, <Sieve, designation
25 mm, opening 0.025 m>, <Sieve, designation 22.4 mm, opening 0.0224 m>, <Sieve,
designation 20 mm, opening 0.02 m>, <Sieve, designation 18 mm, opening 0.018 m>, <Sieve,
designation 16 mm, opening 0.016 m>, <Sieve, designation 14 mm, opening 0.014 m>, <Sieve,
designation 12.5 mm, opening 0.0125 m>, <Sieve, designation 11.2 mm, opening 0.0112 m>,
<Sieve, designation 10 mm, opening 0.01 m>, <Sieve, designation 9 mm, opening 0.009 m>,
<Sieve, designation 8 mm, opening 0.008 m>, <Sieve, designation 7.1 mm, opening 0.0071
m>, <Sieve, designation 6.3 mm, opening 0.0063 m>, <Sieve, designation 5.6 mm, opening
0.0056 m>, <Sieve, designation 5 mm, opening 0.005 m>, <Sieve, designation 4.5 mm,
opening 0.0045 m>, <Sieve, designation 4 mm, opening 0.004 m>, <Sieve, designation 3.55
mm, opening 0.00355 m>, <Sieve, designation 3.15 mm, opening 0.00315 m>, <Sieve,
designation 2.8 mm, opening 0.0028 m>, <Sieve, designation 2.5 mm, opening 0.0025 m>,
<Sieve, designation 2.24 mm, opening 0.00224 m>, <Sieve, designation 2 mm, opening 0.002
m>, <Sieve, designation 1.8 mm, opening 0.0018 m>, <Sieve, designation 1.6 mm, opening
0.0016 m>, <Sieve, designation 1.4 mm, opening 0.0014 m>, <Sieve, designation 1.25 mm,
opening 0.00125 m>, <Sieve, designation 1.12 mm, opening 0.00112 m>, <Sieve, designation
1 mm, opening 0.001 m>, <Sieve, designation 0.9 mm, opening 0.0009 m>, <Sieve,
designation 0.8 mm, opening 0.0008 m>, <Sieve, designation 0.71 mm, opening 0.00071 m>,
<Sieve, designation 0.63 mm, opening 0.00063 m>, <Sieve, designation 0.56 mm, opening
0.00056 m>, <Sieve, designation 0.5 mm, opening 0.0005 m>, <Sieve, designation 0.45 mm,
opening 0.00045 m>, <Sieve, designation 0.4 mm, opening 0.0004 m>, <Sieve, designation
0.355 mm, opening 0.000355 m>, <Sieve, designation 0.315 mm, opening 0.000315 m>, <Sieve,
designation 0.28 mm, opening 0.00028 m>, <Sieve, designation 0.25 mm, opening 0.00025 m>,
<Sieve, designation 0.224 mm, opening 0.000224 m>, <Sieve, designation 0.2 mm, opening
0.0002 m>, <Sieve, designation 0.18 mm, opening 0.00018 m>, <Sieve, designation 0.16 mm,
opening 0.00016 m>, <Sieve, designation 0.14 mm, opening 0.00014 m>, <Sieve, designation
0.125 mm, opening 0.000125 m>, <Sieve, designation 0.112 mm, opening 0.000112 m>, <Sieve,
designation 0.1 mm, opening 0.0001 m>, <Sieve, designation 0.09 mm, opening 9e-05 m>,
<Sieve, designation 0.08 mm, opening 8e-05 m>, <Sieve, designation 0.071 mm, opening
7.1e-05 m>, <Sieve, designation 0.063 mm, opening 6.3e-05 m>, <Sieve, designation 0.056
mm, opening 5.6e-05 m>, <Sieve, designation 0.05 mm, opening 5e-05 m>, <Sieve,
designation 0.045 mm, opening 4.5e-05 m>, <Sieve, designation 0.04 mm, opening 4e-05 m>,
<Sieve, designation 0.036 mm, opening 3.6e-05 m>]
List containing all of the individual Sieve objects, on the ISO 3310-1:2016 R20 series only, ordered from largest
openings to smallest.

2.17. Particle Size Distributions (fluids.particle_size_distribution) 407


Fluids Documentation, Release 1.0.21

References

[1]
fluids.particle_size_distribution.ISO_3310_1_R20_3 = [<Sieve, designation 125 mm, opening
0.125 m>, <Sieve, designation 90 mm, opening 0.09 m>, <Sieve, designation 63 mm, opening
0.063 m>, <Sieve, designation 45 mm, opening 0.045 m>, <Sieve, designation 31.5 mm,
opening 0.0315 m>, <Sieve, designation 22.4 mm, opening 0.0224 m>, <Sieve, designation 16
mm, opening 0.016 m>, <Sieve, designation 11.2 mm, opening 0.0112 m>, <Sieve, designation
8 mm, opening 0.008 m>, <Sieve, designation 5.6 mm, opening 0.0056 m>, <Sieve,
designation 4 mm, opening 0.004 m>, <Sieve, designation 2.8 mm, opening 0.0028 m>,
<Sieve, designation 2 mm, opening 0.002 m>, <Sieve, designation 1.4 mm, opening 0.0014
m>, <Sieve, designation 1 mm, opening 0.001 m>, <Sieve, designation 0.71 mm, opening
0.00071 m>, <Sieve, designation 0.5 mm, opening 0.0005 m>, <Sieve, designation 0.355 mm,
opening 0.000355 m>, <Sieve, designation 0.25 mm, opening 0.00025 m>, <Sieve, designation
0.18 mm, opening 0.00018 m>, <Sieve, designation 0.125 mm, opening 0.000125 m>, <Sieve,
designation 0.09 mm, opening 9e-05 m>, <Sieve, designation 0.063 mm, opening 6.3e-05 m>,
<Sieve, designation 0.045 mm, opening 4.5e-05 m>]
List containing all of the individual Sieve objects, on the ISO 3310-1:2016 R20/3 series only, ordered from
largest openings to smallest.

References

[1]
fluids.particle_size_distribution.ISO_3310_1_R40_3 = [<Sieve, designation 125 mm, opening
0.125 m>, <Sieve, designation 106 mm, opening 0.106 m>, <Sieve, designation 90 mm,
opening 0.09 m>, <Sieve, designation 75 mm, opening 0.075 m>, <Sieve, designation 63 mm,
opening 0.063 m>, <Sieve, designation 53 mm, opening 0.053 m>, <Sieve, designation 45 mm,
opening 0.045 m>, <Sieve, designation 37.5 mm, opening 0.0375 m>, <Sieve, designation
31.5 mm, opening 0.0315 m>, <Sieve, designation 26.5 mm, opening 0.0265 m>, <Sieve,
designation 22.4 mm, opening 0.0224 m>, <Sieve, designation 19 mm, opening 0.019 m>,
<Sieve, designation 16 mm, opening 0.016 m>, <Sieve, designation 13.2 mm, opening 0.0132
m>, <Sieve, designation 11.2 mm, opening 0.0112 m>, <Sieve, designation 9.5 mm, opening
0.0095 m>, <Sieve, designation 8 mm, opening 0.008 m>, <Sieve, designation 6.7 mm,
opening 0.0067 m>, <Sieve, designation 5.6 mm, opening 0.0056 m>, <Sieve, designation
4.75 mm, opening 0.00475 m>, <Sieve, designation 4 mm, opening 0.004 m>, <Sieve,
designation 3.35 mm, opening 0.00335 m>, <Sieve, designation 2.8 mm, opening 0.0028 m>,
<Sieve, designation 2.36 mm, opening 0.00236 m>, <Sieve, designation 2 mm, opening 0.002
m>, <Sieve, designation 1.7 mm, opening 0.0017 m>, <Sieve, designation 1.4 mm, opening
0.0014 m>, <Sieve, designation 1.18 mm, opening 0.00118 m>, <Sieve, designation 1 mm,
opening 0.001 m>, <Sieve, designation 0.85 mm, opening 0.00085 m>, <Sieve, designation
0.71 mm, opening 0.00071 m>, <Sieve, designation 0.6 mm, opening 0.0006 m>, <Sieve,
designation 0.5 mm, opening 0.0005 m>, <Sieve, designation 0.425 mm, opening 0.000425 m>,
<Sieve, designation 0.355 mm, opening 0.000355 m>, <Sieve, designation 0.3 mm, opening
0.0003 m>, <Sieve, designation 0.25 mm, opening 0.00025 m>, <Sieve, designation 0.212 mm,
opening 0.000212 m>, <Sieve, designation 0.18 mm, opening 0.00018 m>, <Sieve, designation
0.15 mm, opening 0.00015 m>, <Sieve, designation 0.125 mm, opening 0.000125 m>, <Sieve,
designation 0.106 mm, opening 0.000106 m>, <Sieve, designation 0.09 mm, opening 9e-05 m>,
<Sieve, designation 0.075 mm, opening 7.5e-05 m>, <Sieve, designation 0.063 mm, opening
6.3e-05 m>, <Sieve, designation 0.053 mm, opening 5.3e-05 m>, <Sieve, designation 0.045
mm, opening 4.5e-05 m>, <Sieve, designation 0.038 mm, opening 3.8e-05 m>]
List containing all of the individual Sieve objects, on the ISO 3310-1:2016 R40/3 series only, ordered from
largest openings to smallest.

408 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

References

[1]
fluids.particle_size_distribution.ISO_3310_1_R10 = [<Sieve, designation 0.036 mm, opening
3.6e-05 m>, <Sieve, designation 0.032 mm, opening 3.2e-05 m>, <Sieve, designation 0.025
mm, opening 2.5e-05 m>, <Sieve, designation 0.02 mm, opening 2e-05 m>]
List containing all of the individual Sieve objects, on the ISO 3310-1:2016 R10 series only, ordered from largest
openings to smallest.

References

[1]

2.17.8 Point Spacing

fluids.particle_size_distribution.psd_spacing(d_min=None, d_max=None, pts=20,


method='logarithmic')
Create a particle spacing mesh in one of several ways for use in modeling discrete particle size distributions. The
allowable meshes are ‘linear’, ‘logarithmic’, a geometric series specified by a Renard number such as ‘R10’, or
the meshes available in one of several sieve standards.
Parameters
d_min [float, optional] The minimum diameter at which the mesh starts, [m]
d_max [float, optional] The maximum diameter at which the mesh ends, [m]
pts [int, optional] The number of points to return for the mesh (note this is not respected by sieve
meshes), [-]
method [str, optional] Either ‘linear’, ‘logarithmic’, a Renard number like ‘R10’ or ‘R5’ or
‘R2.5’, or one of the sieve standards ‘ISO 3310-1 R40/3’, ‘ISO 3310-1 R20’, ‘ISO 3310-
1 R20/3’, ‘ISO 3310-1’, ‘ISO 3310-1 R10’, ‘ASTM E11’, [-]
Returns
ds [list[float]] The generated mesh diameters, [m]

Notes

Note that when specifying a Renard series, only one of d_min or d_max can be respected! Provide only one of
those numbers.
Note that when specifying a sieve standard the number of points is not respected!

2.17. Particle Size Distributions (fluids.particle_size_distribution) 409


Fluids Documentation, Release 1.0.21

References

[1], [2]

Examples

>>> psd_spacing(d_min=5e-5, d_max=5e-4, method='ISO 3310-1 R20/3')


[6.3e-05, 9e-05, 0.000125, 0.00018, 0.00025, 0.000355, 0.0005]

2.18 Pipe schedules (fluids.piping)

This module contains functions for looking up standard pipe sizes from different schedules. Similarly, there is a con-
verter between gauge number thickness (and back).
For reporting bugs, adding feature requests, or submitting pull requests, please use the GitHub issue tracker or contact
the author at Caleb.Andrew.Bell@gmail.com.

• Pipe Schedules
• Wire Gauge

2.18.1 Pipe Schedules

fluids.piping.nearest_pipe(Do=None, Di=None, NPS=None, schedule='40')


Searches for and finds the nearest standard pipe size to a given specification. Acceptable inputs are:
• Nominal pipe size
• Nominal pipe size and schedule
• Outer diameter Do
• Outer diameter Do and schedule
• Inner diameter Di
• Inner diameter Di and schedule
Acceptable schedules are: ‘5’, ‘10’, ‘20’, ‘30’, ‘40’, ‘60’, ‘80’, ‘100’, ‘120’, ‘140’, ‘160’, ‘STD’, ‘XS’,
‘XXS’, ‘5S’, ‘10S’, ‘40S’, ‘80S’, ‘40D1527’, ‘80D1527’, ‘ABSD2680’, ‘PVCD2680’, ‘DR25C900’,
‘DR18C900’, ‘DR14C900’, ‘CIDR51C905’, ‘CIDR41C905’, ‘CIDR325C905’, ‘CIDR25C905’, ‘CIDR21C905’,
‘CIDR18C905’, ‘CIDR14C905’, ‘IPSDR21’, ‘IPSDR26’, ‘IPSDR325’, ‘IPSDR41’, ‘PS115F679’, ‘PS75F679’,
‘PS46F679’, ‘PVCD2665’, ‘40D1785’, ‘80D1785’, ‘120D1785’, ‘DR135D2241’, ‘DR17D2241’, ‘DR21D2241’,
‘DR26D2241’, ‘DR325D2241’, ‘DR41D2241’, ‘DR64D2241’, ‘DR21D2241CTS’, ‘DR17D2241CTS’,
‘DR135D2241CTS’, ‘DR11D2241CTS’, ‘DR21D2241PIP’, ‘DR26D2241PIP’, ‘DR325D2241PIP’,
‘DR35D2241PIP’, ‘DR41D2241PIP’, ‘DR51D2241PIP’, ‘DR81D2241PIP’, ‘S40F441IPS’, ‘S80F441IPS’,
‘S40F441SI’, ‘S80F441SI’ ‘DR325F2619SI’, ‘DR26F2619SI’, ‘DR21F2619SI’, ‘DR17F2619SI’,
‘DR135F2619SI’, ‘DR11F2619SI’, ‘DR9F2619SI’, ‘DR73F2619SI’, ‘DR7F2619SI’, ‘DR325F2619IPS’,
‘DR26F2619IPS’, ‘DR21F2619IPS’, ‘DR17F2619IPS’, ‘DR135F2619IPS’, ‘DR11F2619IPS’, ‘DR9F2619IPS’,
‘DR73F2619IPS’, ‘DR7F2619IPS’,
Parameters

410 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

Do [float] Pipe outer diameter, [m]


Di [float] Pipe inner diameter, [m]
NPS [float] Nominal pipe size, [-]
schedule [str] String representing schedule size
Returns
NPS [float] Nominal pipe size, [-]
Di [float] Pipe inner diameter, [m]
Do [float] Pipe outer diameter, [m]
t [float] Pipe wall thickness, [m]

Notes

Internal units within this function are mm. The imperial schedules are not quite identical to these value, but all
rounding differences happen in the sub-0.1 mm level.

References

[1], [2], [3], [4], [5], [6], [7], [8], [9], [10], [11]

Examples

>>> nearest_pipe(Di=0.021)
(1, 0.02664, 0.0334, 0.0033799999999999998)
>>> nearest_pipe(Do=.273, schedule='5S')
(10, 0.26630000000000004, 0.2731, 0.0034)

2.18.2 Wire Gauge

fluids.piping.gauge_from_t(t, SI=True, schedule='BWG')


Looks up the gauge of a given wire thickness of given schedule. Values are all non-linear, and tabulated internally.
Parameters
t [float] Thickness, [m]
SI [bool, optional] If False, requires that the thickness is given in inches not meters
schedule [str] Gauge schedule, one of ‘BWG’, ‘AWG’, ‘SWG’, ‘MWG’, ‘BSWG’, or ‘SSWG’
Returns
gauge [float-like] Wire Gauge, [-]

2.18. Pipe schedules (fluids.piping) 411


Fluids Documentation, Release 1.0.21

Notes

An internal variable, tol, is used in the selection of the wire gauge. If the next smaller wire gauge is within 10%
of the difference between it and the previous wire gauge, the smaller wire gauge is selected. Accordingly, this
function can return a gauge with a thickness smaller than desired in some circumstances.
• Birmingham Wire Gauge (BWG) ranges from 0.2 (0.5 inch) to 36 (0.004 inch).
• American Wire Gauge (AWG) ranges from 0.167 (0.58 inch) to 51 (0.00099 inch). These are used for
electrical wires.
• Steel Wire Gauge (SWG) ranges from 0.143 (0.49 inch) to 51 (0.0044 inch). Also called Washburn & Moen
wire gauge, American Steel gauge, Wire Co. gauge, and Roebling wire gauge.
• Music Wire Gauge (MWG) ranges from 0.167 (0.004 inch) to 46 (0.18 inch). Also called Piano Wire
Gauge.
• British Standard Wire Gage (BSWG) ranges from 0.143 (0.5 inch) to 51 (0.001 inch). Also called Imperial
Wire Gage (IWG).
• Stub’s Steel Wire Gage (SSWG) ranges from 1 (0.227 inch) to 80 (0.013 inch)

References

[1]

Examples

>>> gauge_from_t(.5, SI=False, schedule='BWG')


0.2

fluids.piping.t_from_gauge(gauge, SI=True, schedule='BWG')


Looks up the thickness of a given wire gauge of given schedule. Values are all non-linear, and tabulated internally.
Parameters
gauge [float-like] Wire Gauge, []
SI [bool, optional] If False, will return a thickness in inches not meters
schedule [str] Gauge schedule, one of ‘BWG’, ‘AWG’, ‘SWG’, ‘MWG’, ‘BSWG’, or ‘SSWG’
Returns
t [float] Thickness, [m]

Notes

• Birmingham Wire Gauge (BWG) ranges from 0.2 (0.5 inch) to 36 (0.004 inch).
• American Wire Gauge (AWG) ranges from 0.167 (0.58 inch) to 51 (0.00099 inch). These are used for
electrical wires.
• Steel Wire Gauge (SWG) ranges from 0.143 (0.49 inch) to 51 (0.0044 inch). Also called Washburn & Moen
wire gauge, American Steel gauge, Wire Co. gauge, and Roebling wire gauge.
• Music Wire Gauge (MWG) ranges from 0.167 (0.004 inch) to 46 (0.18 inch). Also called Piano Wire
Gauge.

412 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

• British Standard Wire Gage (BSWG) ranges from 0.143 (0.5 inch) to 51 (0.001 inch). Also called Imperial
Wire Gage (IWG).
• Stub’s Steel Wire Gage (SSWG) ranges from 1 (0.227 inch) to 80 (0.013 inch)

References

[1]

Examples

>>> t_from_gauge(.2, False, 'BWG')


0.5

2.18. Pipe schedules (fluids.piping) 413


Fluids Documentation, Release 1.0.21

fluids.piping.wire_schedules = {'AWG': ([0.167, 0.2, 0.25, 0.33, 0.5, 0, 1, 2, 3, 4, 5,


6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28,
29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50],
[0.58, 0.5165, 0.46, 0.4096, 0.3648, 0.3249, 0.2893, 0.2576, 0.2294, 0.2043, 0.1819,
0.162, 0.1443, 0.1285, 0.1144, 0.1019, 0.0907, 0.0808, 0.072, 0.0641, 0.0571, 0.0508,
0.0453, 0.0403, 0.0359, 0.032, 0.0285, 0.0253, 0.0226, 0.0201, 0.0179, 0.0159, 0.0142,
0.0126, 0.0113, 0.01, 0.00893, 0.00795, 0.00708, 0.0063, 0.00561, 0.005, 0.00445,
0.00396, 0.00353, 0.00314, 0.0028, 0.00249, 0.00222, 0.00198, 0.00176, 0.00157, 0.0014,
0.00124, 0.00111, 0.00099], [0.014732, 0.0131191, 0.011684, 0.01040384, 0.00926592,
0.00825246, 0.00734822, 0.00654304, 0.00582676, 0.00518922, 0.00462026, 0.0041148,
0.00366522, 0.0032639, 0.00290576, 0.00258826, 0.00230378, 0.00205232, 0.0018288,
0.00162814, 0.00145034, 0.00129032, 0.00115062, 0.00102362, 0.00091186, 0.0008128,
0.0007239, 0.00064262, 0.00057404, 0.00051054, 0.00045466, 0.00040386, 0.00036068,
0.00032004, 0.00028702, 0.000254, 0.000226822, 0.00020193, 0.000179832, 0.00016002,
0.000142494, 0.000127, 0.00011303, 0.000100584, 8.9662e-05, 7.9756e-05, 7.112e-05,
6.3246e-05, 5.6388e-05, 5.0292e-05, 4.4704e-05, 3.9878e-05, 3.556e-05, 3.1496e-05,
2.8194e-05, 2.5146e-05], True), 'BSWG': ([0.143, 0.167, 0.2, 0.25, 0.33, 0.5, 0, 1, 2, 3,
4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27,
28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49,
50], [0.5, 0.464, 0.432, 0.4, 0.372, 0.348, 0.324, 0.3, 0.276, 0.252, 0.232, 0.212,
0.192, 0.176, 0.16, 0.144, 0.128, 0.116, 0.104, 0.092, 0.08, 0.072, 0.064, 0.056, 0.048,
0.04, 0.036, 0.032, 0.028, 0.024, 0.022, 0.02, 0.018, 0.0164, 0.0149, 0.0136, 0.0124,
0.0116, 0.0108, 0.01, 0.0092, 0.0084, 0.0076, 0.0068, 0.006, 0.0052, 0.0048, 0.0044,
0.004, 0.0036, 0.0032, 0.0028, 0.0024, 0.002, 0.0016, 0.0012, 0.001], [0.0127, 0.0117856,
0.0109728, 0.01016, 0.0094488, 0.0088392, 0.0082296, 0.00762, 0.0070104, 0.0064008,
0.0058928, 0.0053848, 0.0048768, 0.0044704, 0.004064, 0.0036576, 0.0032512, 0.0029464,
0.0026416, 0.0023368, 0.002032, 0.0018288, 0.0016256, 0.0014224, 0.0012192, 0.001016,
0.0009144, 0.0008128, 0.0007112, 0.0006096, 0.0005588, 0.000508, 0.0004572, 0.00041656,
0.00037846, 0.00034544, 0.00031496, 0.00029464, 0.00027432, 0.000254, 0.00023368,
0.00021336, 0.00019304, 0.00017272, 0.0001524, 0.00013208, 0.00012192, 0.00011176,
0.0001016, 9.144e-05, 8.128e-05, 7.112e-05, 6.096e-05, 5.08e-05, 4.064e-05, 3.048e-05,
2.54e-05], True), 'BWG': ([0.2, 0.25, 0.33, 0.5, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11,
12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33,
34, 35, 36], [0.5, 0.454, 0.425, 0.38, 0.34, 0.3, 0.284, 0.259, 0.238, 0.22, 0.203, 0.18,
0.165, 0.148, 0.134, 0.12, 0.109, 0.095, 0.083, 0.072, 0.065, 0.058, 0.049, 0.042, 0.035,
0.032, 0.028, 0.025, 0.022, 0.02, 0.018, 0.016, 0.014, 0.013, 0.012, 0.01, 0.009, 0.008,
0.007, 0.005, 0.004], [0.0127, 0.011532, 0.010795, 0.009652, 0.008636, 0.00762, 0.007214,
0.006579, 0.006045, 0.005588, 0.005156, 0.004572, 0.004191, 0.003759, 0.003404, 0.003048,
0.002769, 0.002413, 0.002108, 0.001829, 0.001651, 0.001473, 0.001245, 0.001067, 0.000889,
0.000813, 0.000711, 0.000635, 0.000559, 0.000508, 0.000457, 0.000406, 0.000356, 0.00033,
0.000305, 0.000254, 0.000229, 0.000203, 0.000178, 0.000127, 0.000102], True), 'MWG':
([45, 44, 43, 42, 41, 40, 39, 38, 37, 36, 35, 34, 33, 32, 31, 30, 29, 28, 27, 26, 25, 24,
23, 22, 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0,
0.5, 0.33, 0.25, 0.2, 0.167], [0.18, 0.17, 0.162, 0.154, 0.146, 0.138, 0.13, 0.124,
0.118, 0.112, 0.106, 0.1, 0.095, 0.09, 0.085, 0.08, 0.075, 0.071, 0.067, 0.063, 0.059,
0.055, 0.051, 0.049, 0.047, 0.045, 0.043, 0.041, 0.039, 0.037, 0.035, 0.033, 0.031,
0.029, 0.026, 0.024, 0.022, 0.02, 0.018, 0.016, 0.014, 0.013, 0.012, 0.011, 0.01, 0.009,
0.008, 0.007, 0.006, 0.005, 0.004], [0.004572, 0.004318, 0.0041148, 0.0039116, 0.0037084,
0.0035052, 0.003302, 0.0031496, 0.0029972, 0.0028448, 0.0026924, 0.00254, 0.002413,
0.002286, 0.002159, 0.002032, 0.001905, 0.0018034, 0.0017018, 0.0016002, 0.0014986,
0.001397, 0.0012954, 0.0012446, 0.0011938, 0.001143, 0.0010922, 0.0010414, 0.0009906,
0.0009398, 0.000889, 0.0008382, 0.0007874, 0.0007366, 0.0006604, 0.0006096, 0.0005588,
0.000508, 0.0004572, 0.0004064, 0.0003556, 0.0003302, 0.0003048, 0.0002794, 0.000254,
0.0002286, 0.0002032, 0.0001778, 0.0001524, 0.000127, 0.0001016], False), 'SSWG': ([1, 2,
3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26,
27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48,
414 Chapter
49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 2. 68,
66, 67, API 69,
Reference
70,
71, 72, 73, 74, 75, 76, 77, 78, 79, 80], [0.227, 0.219, 0.212, 0.207, 0.204, 0.201,
0.199, 0.197, 0.194, 0.191, 0.188, 0.185, 0.182, 0.18, 0.178, 0.175, 0.172, 0.168, 0.164,
0.161, 0.157, 0.155, 0.153, 0.151, 0.148, 0.146, 0.143, 0.139, 0.134, 0.127, 0.12, 0.115,
Fluids Documentation, Release 1.0.21

2.19 Pump and motor sizing (fluids.pump)

This module contains correlations for calculating the efficiency of a pump, motor, or VFD. It also contains some
functions for modeling the performance of a pump, and has been adapted to contain electrical information relevant to
chemical engineering design.
For reporting bugs, adding feature requests, or submitting pull requests, please use the GitHub issue tracker or contact
the author at Caleb.Andrew.Bell@gmail.com.

• Pump Efficiency
• Motor Efficiency
• VFD Efficiency
• Pump Utilities
• Motor Utilities
• Electrical Utilities

2.19.1 Pump Efficiency

fluids.pump.Corripio_pump_efficiency(Q)
Estimates pump efficiency using the method in Corripio (1982) as shown in [1] and originally in [2]. Estimation
only

𝜂𝑃 = −0.316 + 0.24015 ln(𝑄) − 0.01199 ln(𝑄)2

Parameters
Q [float] Volumetric flow rate, [m^3/s]
Returns
efficiency [float] Pump efficiency, [-]

Notes

For Centrifugal pumps only. Range is 50 to 5000 GPM, but input variable is in metric. Values above this range
and below this range will go negative, although small deviations are acceptable. Example 16.5 in [1].

References

[1], [2]

2.19. Pump and motor sizing (fluids.pump) 415


Fluids Documentation, Release 1.0.21

Examples

>>> Corripio_pump_efficiency(461./15850.323)
0.705888867095162

2.19.2 Motor Efficiency

fluids.pump.CSA_motor_efficiency(P, closed=False, poles=2, high_efficiency=False)


Returns the efficiency of a NEMA motor according to [1]. These values are standards, but are only for full-load
operation.
Parameters
P [float] Power, [W]
closed [bool, optional] Whether or not the motor is enclosed
poles [int, optional] The number of poles of the motor
high_efficiency [bool, optional] Whether or not to look up the high-efficiency value
Returns
efficiency [float] Guaranteed full-load motor efficiency, [-]

Notes

Criteria for being required to meet the high-efficiency standard is:


• Designed for continuous operation
• Operates by three-phase induction
• Is a squirrel-cage or cage design
• Is NEMA type A, B, or C with T or U frame; or IEC design N or H
• Is designed for single-speed operation
• Has a nominal voltage of less than 600 V AC
• Has a nominal frequency of 60 Hz or 50/60 Hz
• Has 2, 4, or 6 pole construction
• Is either open or closed
Pretty much every motor is required to meet the low-standard efficiency table, however.
Several low-efficiency standard high power values were added to allow for easy programming; values are the last
listed efficiency in the table.

416 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

References

[1]

Examples

>>> CSA_motor_efficiency(100*hp)
0.93
>>> CSA_motor_efficiency(100*hp, closed=True, poles=6, high_efficiency=True)
0.95

fluids.pump.motor_efficiency_underloaded(P, load=0.5)
Returns the efficiency of a motor operating under its design power according to [1].These values are generic;
manufacturers usually list 4 points on their product information, but full-scale data is hard to find and not regu-
lated.
Parameters
P [float] Power, [W]
load [float, optional] Fraction of motor’s rated electrical capacity being used
Returns
efficiency [float] Motor efficiency, [-]

Notes

If the efficiency returned by this function is unattractive, use a VFD. The curves used here are polynomial fits to
[1]’s graph, and curves were available for the following motor power ranges: 0-1 hp, 1.5-5 hp, 10 hp, 15-25 hp,
30-60 hp, 75-100 hp If above the upper limit of one range, the next value is returned.

References

[1]

Examples

>>> motor_efficiency_underloaded(1*hp)
0.8705179600980149
>>> motor_efficiency_underloaded(10.1*hp, .1)
0.6728425932357025

fluids.pump.Corripio_motor_efficiency(P)
Estimates motor efficiency using the method in Corripio (1982) as shown in [1] and originally in [2]. Estimation
only.
𝜂𝑀 = 0.8 + 0.0319 ln(𝑃𝐵 ) − 0.00182 ln(𝑃𝐵 )2
Parameters
P [float] Power, [W]
Returns
efficiency [float] Motor efficiency, [-]

2.19. Pump and motor sizing (fluids.pump) 417


Fluids Documentation, Release 1.0.21

Notes

Example 16.5 in [1].

References

[1], [2]

Examples

>>> Corripio_motor_efficiency(137*745.7)
0.9128920875679222

2.19.3 VFD Efficiency

fluids.pump.VFD_efficiency(P, load=1)
Returns the efficiency of a Variable Frequency Drive according to [1]. These values are generic, and not stan-
dardized as minimum values. Older VFDs often have much worse performance.
Parameters
P [float] Power, [W]
load [float, optional] Fraction of motor’s rated electrical capacity being used
Returns
efficiency [float] VFD efficiency, [-]

Notes

The use of a VFD does change the characteristics of a pump curve’s efficiency, but this has yet to be quantified.
The effect is small. This value should be multiplied by the product of the pump and motor efficiency to determine
the overall efficiency.
Efficiency table is in units of hp, so a conversion is performed internally. If load not specified, assumed 1 -
where maximum efficiency occurs. Table extends down to 3 hp and up to 400 hp; values outside these limits are
rounded to the nearest known value. Values between standardized sizes are interpolated linearly. Load values
extend down to 0.016.
The table used is for Pulse Width Modulation (PWM) VFDs.

References

[1]

418 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

Examples

>>> VFD_efficiency(10*hp)
0.96
>>> VFD_efficiency(100*hp, load=0.2)
0.92

2.19.4 Pump Utilities

fluids.pump.specific_speed(Q, H, n=3600.0)
Returns the specific speed of a pump operating at a specified Q, H, and n.

𝑛 𝑄
𝑛𝑆 = 0.75
𝐻
Parameters
Q [float] Flow rate, [m^3/s]
H [float] Head generated by the pump, [m]
n [float, optional] Speed of pump [rpm]
Returns
nS [float] Specific Speed, [rpm*m^0.75/s^0.5]

Notes

Defined at the BEP, with maximum fitting diameter impeller, at a given rotational speed.

References

[1]

Examples

Example from [1].

>>> specific_speed(0.0402, 100, 3550)


22.50823182748925

fluids.pump.specific_diameter(Q, H, D)
Returns the specific diameter of a pump operating at a specified Q, H, and D.

𝐷𝐻 1/4
𝐷𝑠 = √
𝑄
Parameters
Q [float] Flow rate, [m^3/s]
H [float] Head generated by the pump, [m]
D [float] Pump impeller diameter [m]

2.19. Pump and motor sizing (fluids.pump) 419


Fluids Documentation, Release 1.0.21

Returns
Ds [float] Specific diameter, [m^0.25/s^0.5]

Notes

Used in certain pump sizing calculations.

References

[1]

Examples

>>> specific_diameter(Q=0.1, H=10., D=0.1)


0.5623413251903492

fluids.pump.speed_synchronous(f, poles=2, phase=3)


Returns the synchronous speed of a synchronous motor according to [1].

120𝑓 · phase
𝑁𝑠 =
poles

Parameters
f [float] Line frequency, [Hz]
poles [int, optional] The number of poles of the motor
phase [int, optional] Line AC phase
Returns
Ns [float] Speed of synchronous motor, [rpm]

Notes

Synchronous motors have no slip. Large synchronous motors are not self-starting.

References

[1]

Examples

>>> speed_synchronous(50, poles=12)


1500.0
>>> speed_synchronous(60, phase=1)
3600.0

420 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

2.19.5 Motor Utilities

fluids.pump.motor_round_size(P)
Rounds up the power for a motor to the nearest NEMA standard power. The returned power is always larger or
equal to the input power.
Parameters
P [float] Power, [W]
Returns
P_actual [float] Actual power, equal to or larger than input [W]

Notes

An exception is raised if the power required is larger than any of the NEMA sizes. Larger motors are available,
but are unstandardized.

References

[1]

Examples

>>> motor_round_size(1E5)
111854.98073734052

fluids.pump.nema_sizes = [186.42496789556753, 248.5666238607567, 372.84993579113507,


559.2749036867026, 745.6998715822701, 1118.5498073734052, 1491.3997431645403,
2237.0996147468104, 2982.7994863290805, 3728.4993579113507, 4101.349293702486,
5592.749036867026, 7456.998715822701, 11185.498073734052, 14913.997431645403,
18642.496789556753, 22370.996147468104, 29827.994863290805, 37284.99357911351,
44741.99229493621, 55927.49036867026, 74569.98715822701, 93212.48394778377,
111854.98073734052, 130497.47752689727, 149139.97431645403, 186424.96789556753,
223709.96147468104, 260994.95505379455, 298279.94863290805, 335564.94221202156,
372849.93579113507]
list: all NEMA motor sizes in increasing order, in Watts.
fluids.pump.nema_sizes_hp = [0.25, 0.3333333333333333, 0.5, 0.75, 1.0, 1.5, 2.0, 3.0,
4.0, 5.0, 5.5, 7.5, 10.0, 15.0, 20.0, 25.0, 30.0, 40.0, 50.0, 60.0, 75.0, 100.0, 125.0,
150.0, 175.0, 200.0, 250.0, 300.0, 350.0, 400.0, 450.0, 500.0]
list: all NEMA motor sizes in increasing order, in horsepower.

2.19. Pump and motor sizing (fluids.pump) 421


Fluids Documentation, Release 1.0.21

2.19.6 Electrical Utilities

fluids.pump.current_ideal(P, V, phase=3, PF=1)


Returns the current drawn by a motor of power P operating at voltage V, with line AC of phase phase and power
factor PF according to [1].
Single-phase power:

𝑃
𝐼=
𝑉 · PF
3-phase power:

𝑃
𝐼= √
𝑉 · PF 3
Parameters
P [float] Power, [W]
V [float] Voltage, [V]
phase [int, optional] Line AC phase, either 1 or 3
PF [float, optional] Power factor of motor
Returns
I [float] Power drawn by motor, [A]

Notes

Does not include power used by the motor’s fan, or startor, or internal losses. These are all significant.

References

[1]

Examples

>>> current_ideal(V=120, P=1E4, PF=1, phase=1)


83.33333333333333

class fluids.pump.CountryPower(country, voltage, freq, plugs=None)


Class to hold information on the residential or electrical data of a country. Data from Wikipedia, obtained in
2017.
Parameters
plugs [tuple(str)] Tuple of residential plug letter codes in use in the country, [-]
voltage [float or tuple(float)] Voltage or voltages in common use of the country (residential data
has one voltage; industrial data has multiple often), [V]
freq [float] The electrical frequency in use in the country, [Hz]
country [str] The name of the country, [-]
Attributes

422 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

country
freq
plugs
voltage
fluids.pump.electrical_plug_types = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J',
'K', 'L', 'M', 'N']
List of all electrical plug types in use around the world.
fluids.pump.voltages_1_phase_residential = [100, 110, 115, 120, 127, 220, 230, 240]
List of all AC 1-phase voltages used in residential settings around the world.
fluids.pump.voltages_3_phase = [120, 190, 200, 208, 220, 230, 240, 277, 380, 400, 415,
440, 480]
List of all AC 3-phase voltages used in industrial settings around the world.
fluids.pump.residential_power_frequencies = [50, 60]
List of all AC 1-phase frequencies used in residential settings around the world.

2.19. Pump and motor sizing (fluids.pump) 423


Fluids Documentation, Release 1.0.21

fluids.pump.industrial_power = {'ad': CountryPower(country="None", voltage=(400,),


freq=50, plugs=Andorra), 'ae': CountryPower(country="None", voltage=(400,), freq=50,
plugs=United Arab Emirates), 'af': CountryPower(country="None", voltage=(380,), freq=50,
plugs=Afghanistan), 'ag': CountryPower(country="None", voltage=(400,), freq=60,
plugs=Antigua and Barbuda), 'ai': CountryPower(country="None", voltage=(120, 208, 127,
220, 240, 415), freq=60, plugs=Anguilla), 'al': CountryPower(country="None",
voltage=(400,), freq=50, plugs=Albania), 'am': CountryPower(country="None",
voltage=(400,), freq=50, plugs=Armenia), 'ao': CountryPower(country="None",
voltage=(380,), freq=50, plugs=Angola), 'ar': CountryPower(country="None",
voltage=(380,), freq=50, plugs=Argentina), 'at': CountryPower(country="None",
voltage=(400,), freq=50, plugs=Austria), 'au': CountryPower(country="None",
voltage=(400,), freq=50, plugs=Australia), 'az': CountryPower(country="None",
voltage=(380,), freq=50, plugs=Azerbaijan), 'ba': CountryPower(country="None",
voltage=(400,), freq=50, plugs=Bosnia & Herzegovina), 'bb': CountryPower(country="None",
voltage=(200,), freq=50, plugs=Barbados), 'bd': CountryPower(country="None",
voltage=(380,), freq=50, plugs=Bangladesh), 'be': CountryPower(country="None",
voltage=(400,), freq=50, plugs=Belgium), 'bf': CountryPower(country="None",
voltage=(380,), freq=50, plugs=Burkina Faso), 'bg': CountryPower(country="None",
voltage=(400,), freq=50, plugs=Bulgaria), 'bh': CountryPower(country="None",
voltage=(400,), freq=50, plugs=Bahrain), 'bi': CountryPower(country="None",
voltage=(380,), freq=50, plugs=Burundi), 'bj': CountryPower(country="None",
voltage=(380,), freq=50, plugs=Benin), 'bm': CountryPower(country="None", voltage=(208,),
freq=60, plugs=Bermuda), 'bn': CountryPower(country="None", voltage=(415,), freq=50,
plugs=Brunei), 'bo': CountryPower(country="None", voltage=(400,), freq=50,
plugs=Bolivia), 'br': CountryPower(country="None", voltage=(220, 380), freq=60,
plugs=Brazil), 'bs': CountryPower(country="None", voltage=(208,), freq=60,
plugs=Bahamas), 'bt': CountryPower(country="None", voltage=(400,), freq=50,
plugs=Bhutan), 'bw': CountryPower(country="None", voltage=(400,), freq=50,
plugs=Botswana), 'by': CountryPower(country="None", voltage=(380,), freq=50,
plugs=Belarus), 'bz': CountryPower(country="None", voltage=(190, 380), freq=60,
plugs=Belize), 'ca': CountryPower(country="None", voltage=(120, 208, 240, 480, 347, 600),
freq=60, plugs=Canada), 'cd': CountryPower(country="None", voltage=(380,), freq=50,
plugs=Democratic Republic of Congo), 'cf': CountryPower(country="None", voltage=(380,),
freq=50, plugs=Central African Republic), 'cg': CountryPower(country="None",
voltage=(400,), freq=50, plugs=People's Republic of Congo), 'ch':
CountryPower(country="None", voltage=(400,), freq=50, plugs=Switzerland), 'ci':
CountryPower(country="None", voltage=(380,), freq=50, plugs=Côte d’Ivoire), 'cl':
CountryPower(country="None", voltage=(380,), freq=50, plugs=Chile), 'cm':
CountryPower(country="None", voltage=(380,), freq=50, plugs=Cameroon), 'cn':
CountryPower(country="None", voltage=(380,), freq=50, plugs=China), 'co':
CountryPower(country="None", voltage=(220, 440), freq=60, plugs=Colombia), 'cr':
CountryPower(country="None", voltage=(240,), freq=60, plugs=Costa Rica), 'cu':
CountryPower(country="None", voltage=(190, 440), freq=60, plugs=Cuba), 'cv':
CountryPower(country="None", voltage=(400,), freq=50, plugs=Cape Verde), 'cy':
CountryPower(country="None", voltage=(400,), freq=50, plugs=Cyprus), 'cz':
CountryPower(country="None", voltage=(400,), freq=50, plugs=Czech Republic), 'de':
CountryPower(country="None", voltage=(400,), freq=50, plugs=Germany), 'dj':
CountryPower(country="None", voltage=(380,), freq=50, plugs=Djibouti), 'dk':
CountryPower(country="None", voltage=(400,), freq=50, plugs=Denmark), 'dm':
CountryPower(country="None", voltage=(400,), freq=50, plugs=Dominica), 'do':
CountryPower(country="None", voltage=(120, 208, 277, 480), freq=60, plugs=Dominican
Republic), 'dz': CountryPower(country="None", voltage=(400,), freq=50, plugs=Algeria),
'ec': CountryPower(country="None", voltage=(208,), freq=60, plugs=Ecuador), 'ee':
CountryPower(country="None", voltage=(400,), freq=50, plugs=Estonia), 'eg':
CountryPower(country="None", voltage=(380,), freq=50, plugs=Egypt), 'er':
CountryPower(country="None", voltage=(400,), freq=50, plugs=Eritrea), 'es':
424
CountryPower(country="None", 'et': 2. API Reference
Chapter
voltage=(400,), freq=50, plugs=Spain),
CountryPower(country="None", voltage=(380,), freq=50, plugs=Ethiopia), 'fi':
CountryPower(country="None", voltage=(400,), freq=50, plugs=Finland), 'fj':
CountryPower(country="None", voltage=(415,), freq=50, plugs=Fiji), 'fk':
Fluids Documentation, Release 1.0.21

Dictionary of country-code to CountryPower instances for industrial use.

2.19. Pump and motor sizing (fluids.pump) 425


Fluids Documentation, Release 1.0.21

fluids.pump.residential_power = {'ad': CountryPower(country="('C', 'F')", voltage=230,


freq=50, plugs=Andorra), 'ae': CountryPower(country="('C', 'D', 'G')", voltage=220,
freq=50, plugs=United Arab Emirates), 'af': CountryPower(country="('C', 'F')",
voltage=220, freq=50, plugs=Afghanistan), 'ag': CountryPower(country="('A', 'B')",
voltage=230, freq=60, plugs=Antigua and Barbuda), 'ai': CountryPower(country="('A',)",
voltage=110, freq=60, plugs=Anguilla), 'al': CountryPower(country="('C', 'F')",
voltage=230, freq=50, plugs=Albania), 'am': CountryPower(country="('C', 'F')",
voltage=230, freq=50, plugs=Armenia), 'ao': CountryPower(country="('C',)", voltage=220,
freq=50, plugs=Angola), 'ar': CountryPower(country="('C', 'I')", voltage=220, freq=50,
plugs=Argentina), 'at': CountryPower(country="('C', 'F')", voltage=230, freq=50,
plugs=Austria), 'au': CountryPower(country="('I',)", voltage=230, freq=50,
plugs=Australia), 'az': CountryPower(country="('C', 'F')", voltage=230, freq=50,
plugs=Azerbaijan), 'ba': CountryPower(country="('C', 'F')", voltage=230, freq=50,
plugs=Bosnia and Herzegovina), 'bb': CountryPower(country="('A', 'B')", voltage=115,
freq=50, plugs=Barbados), 'bd': CountryPower(country="('C', 'D', 'G', 'K')", voltage=220,
freq=50, plugs=Bangladesh), 'be': CountryPower(country="('C', 'E')", voltage=230,
freq=50, plugs=Belgium), 'bf': CountryPower(country="('C', 'E')", voltage=220, freq=50,
plugs=Burkina Faso), 'bg': CountryPower(country="('C', 'F')", voltage=230, freq=50,
plugs=Bulgaria), 'bh': CountryPower(country="('G',)", voltage=230, freq=50,
plugs=Bahrain), 'bi': CountryPower(country="('C', 'E')", voltage=220, freq=50,
plugs=Burundi), 'bj': CountryPower(country="('C', 'E')", voltage=220, freq=50,
plugs=Benin), 'bm': CountryPower(country="('A', 'B')", voltage=120, freq=60,
plugs=Bermuda), 'bn': CountryPower(country="('G',)", voltage=240, freq=50, plugs=Brunei),
'bo': CountryPower(country="('A', 'C')", voltage=115, freq=50, plugs=Bolivia), 'br':
CountryPower(country="('C', 'N')", voltage=220, freq=60, plugs=Brazil), 'bs':
CountryPower(country="('A', 'B')", voltage=120, freq=60, plugs=Bahamas), 'bt':
CountryPower(country="('C', 'D', 'F', 'G', 'M')", voltage=230, freq=50, plugs=Bhutan),
'bw': CountryPower(country="('D', 'G', 'M')", voltage=230, freq=50, plugs=Botswana),
'by': CountryPower(country="('C', 'F')", voltage=230, freq=50, plugs=Belarus), 'bz':
CountryPower(country="('A', 'B', 'G')", voltage=110, freq=60, plugs=Belize), 'ca':
CountryPower(country="('A', 'B')", voltage=120, freq=60, plugs=Canada), 'cd':
CountryPower(country="('C', 'D', 'E')", voltage=220, freq=50, plugs=Congo, Democratic
Republic of the), 'cf': CountryPower(country="('C', 'E')", voltage=220, freq=50,
plugs=Central African Republic), 'cg': CountryPower(country="('C', 'E')", voltage=230,
freq=50, plugs=Congo, Republic of the), 'ch': CountryPower(country="('C', 'J')",
voltage=230, freq=50, plugs=Switzerland), 'ci': CountryPower(country="('C', 'E')",
voltage=230, freq=50, plugs=Côte d'Ivoire), 'cl': CountryPower(country="('L',)",
voltage=220, freq=50, plugs=Chile), 'cm': CountryPower(country="('C', 'E')", voltage=220,
freq=50, plugs=Cameroon), 'cn': CountryPower(country="('A', 'I', 'C')", voltage=220,
freq=50, plugs=China), 'co': CountryPower(country="('A', 'B')", voltage=110, freq=60,
plugs=Colombia), 'cr': CountryPower(country="('A', 'B')", voltage=120, freq=60,
plugs=Costa Rica), 'cu': CountryPower(country="('A', 'B', 'C')", voltage=110, freq=60,
plugs=Cuba), 'cv': CountryPower(country="('C', 'F')", voltage=220, freq=50, plugs=Cape
Verde), 'cy': CountryPower(country="('G',)", voltage=240, freq=50, plugs=Cyprus), 'cz':
CountryPower(country="('C', 'E')", voltage=230, freq=50, plugs=Czech Republic), 'de':
CountryPower(country="('C', 'F')", voltage=230, freq=50, plugs=Germany), 'dj':
CountryPower(country="('C', 'E')", voltage=220, freq=50, plugs=Djibouti), 'dk':
CountryPower(country="('C', 'E', 'F', 'K')", voltage=230, freq=50, plugs=Denmark), 'dm':
CountryPower(country="('D', 'G')", voltage=230, freq=50, plugs=Dominica), 'do':
CountryPower(country="('A', 'B')", voltage=110, freq=60, plugs=Dominican Republic), 'dz':
CountryPower(country="('C', 'F')", voltage=230, freq=50, plugs=Algeria), 'ec':
CountryPower(country="('A', 'B')", voltage=120, freq=60, plugs=Ecuador), 'ee':
CountryPower(country="('C', 'F')", voltage=230, freq=50, plugs=Estonia), 'eg':
CountryPower(country="('C', 'F')", voltage=220, freq=50, plugs=Egypt), 'er':
CountryPower(country="('C', 'L')", voltage=230, freq=50, plugs=Eritrea), 'es':
CountryPower(country="('C', 'F')", voltage=230, freq=50, plugs=Spain), 'et':
CountryPower(country="('C', 'E', 'F', 'L')", voltage=220, freq=50,Chapter
426 'fi':
2. API Reference
plugs=Ethiopia),
CountryPower(country="('C', 'F')", voltage=230, freq=50, plugs=Finland), 'fj':
CountryPower(country="('I',)", voltage=240, freq=50, plugs=Fiji), 'fk':
CountryPower(country="('G',)", voltage=240, freq=50, plugs=Falkland Islands), 'fm':
Fluids Documentation, Release 1.0.21

Dictionary of country-code to CountryPower instances for residential use.

2.20 Safety/relief valve sizing (fluids.safety_valve)

This module contains functions for sizing and rating pressure relief valves. At present, this consists of several functions
from API 520.
For reporting bugs, adding feature requests, or submitting pull requests, please use the GitHub issue tracker or contact
the author at Caleb.Andrew.Bell@gmail.com.

• Interfaces
• Functions and Data

2.20.1 Interfaces

fluids.safety_valve.API520_A_g(m, T, Z, MW, k, P1, P2=101325, Kd=0.975, Kb=1, Kc=1)


Calculates required relief valve area for an API 520 valve passing a gas or a vapor, at either critical or sub-critical
flow.
For critical flow:
√︂
𝑚 𝑇𝑍
𝐴=
𝐶𝐾𝑑 𝑃1 𝐾𝑏 𝐾𝑐 𝑀
For sub-critical flow:
√︃
17.9𝑚 𝑇𝑍
𝐴=
𝐹2 𝐾𝑑 𝐾𝑐 𝑀 𝑃1 (𝑃1 − 𝑃2 )

Parameters
m [float] Mass flow rate of vapor through the valve, [kg/s]
T [float] Temperature of vapor entering the valve, [K]
Z [float] Compressibility factor of the vapor, [-]
MW [float] Molecular weight of the vapor, [g/mol]
k [float] Isentropic coefficient or ideal gas heat capacity ratio [-]
P1 [float] Upstream relieving pressure; the set pressure plus the allowable overpressure, plus
atmospheric pressure, [Pa]
P2 [float, optional] Built-up backpressure; the increase in pressure during flow at the outlet of a
pressure-relief device after it opens, [Pa]
Kd [float, optional] The effective coefficient of discharge, from the manufacturer or for prelimi-
nary sizing, using 0.975 normally or 0.62 when used with a rupture disc as described in [1],
[]
Kb [float, optional] Correction due to vapor backpressure [-]
Kc [float, optional] Combination correction factor for installation with a ruture disk upstream
of the PRV, []

2.20. Safety/relief valve sizing (fluids.safety_valve) 427


Fluids Documentation, Release 1.0.21

Returns
A [float] Minimum area for relief valve according to [1], [m^2]

Notes

Units are interlally kg/hr, kPa, and mm^2 to match [1].

References

[1]

Examples

Example 1 from [1] for critical flow, matches:


>>> API520_A_g(m=24270/3600., T=348., Z=0.90, MW=51., k=1.11, P1=670E3, Kb=1, Kc=1)
0.0036990460646834414

Example 2 from [1] for sub-critical flow, matches:


>>> API520_A_g(m=24270/3600., T=348., Z=0.90, MW=51., k=1.11, P1=670E3, P2=532E3,␣
˓→Kd=0.975, Kb=1, Kc=1)

0.004248358775943481

The mass flux in (kg/(s*m^2)) can be found by dividing the specified mass flow by the calculated area:
>>> (24270/3600.)/API520_A_g(m=24270/3600., T=348., Z=0.90, MW=51., k=1.11,␣
˓→P1=670E3, Kb=1, Kc=1)

1822.541960488834

fluids.safety_valve.API520_A_steam(m, T, P1, Kd=0.975, Kb=1, Kc=1)


Calculates required relief valve area for an API 520 valve passing a steam, at either saturation or superheat but
not partially condensed.
190.5𝑚
𝐴=
𝑃1 𝐾𝑑 𝐾𝑏 𝐾𝑐 𝐾𝑁 𝐾𝑆𝐻
Parameters
m [float] Mass flow rate of steam through the valve, [kg/s]
T [float] Temperature of steam entering the valve, [K]
P1 [float] Upstream relieving pressure; the set pressure plus the allowable overpressure, plus
atmospheric pressure, [Pa]
Kd [float, optional] The effective coefficient of discharge, from the manufacturer or for prelimi-
nary sizing, using 0.975 normally or 0.62 when used with a rupture disc as described in [1],
[]
Kb [float, optional] Correction due to vapor backpressure [-]
Kc [float, optional] Combination correction factor for installation with a rupture disk upstream
of the PRV, []
Returns
A [float] Minimum area for relief valve according to [1], [m^2]

428 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

Notes

Units are interlally kg/hr, kPa, and mm^2 to match [1]. With the provided temperature and pressure, the KN
coefficient is calculated with the function API520_N; as is the superheat correction KSH, with the function
API520_SH.

References

[1]

Examples

Example 4 from [1], matches:

>>> API520_A_steam(m=69615/3600., T=592.5, P1=12236E3, Kd=0.975, Kb=1, Kc=1)


0.0011034712423692733

2.20.2 Functions and Data

fluids.safety_valve.API520_round_size(A)
Rounds up the area from an API 520 calculation to an API526 standard valve area. The returned area is always
larger or equal to the input area.
Parameters
A [float] Minimum discharge area [m^2]
Returns
area [float] Actual discharge area [m^2]

Notes

To obtain the letter designation of an input area, lookup the area with the following:
API526_letters[API526_A.index(area)]
An exception is raised if the required relief area is larger than any of the API 526 sizes.

References

[1]

2.20. Safety/relief valve sizing (fluids.safety_valve) 429


Fluids Documentation, Release 1.0.21

Examples

From [1], checked with many points on Table 8.

>>> API520_round_size(1E-4)
0.00012645136
>>> API526_letters[API526_A.index(API520_round_size(1E-4))]
'E'

fluids.safety_valve.API520_C(k)
Calculates coefficient C for use in API 520 critical flow relief valve sizing.
√︃ 𝑘+1
(︂ )︂ 𝑘−1
2
𝐶 = 0.03948 𝑘
𝑘+1

Parameters
k [float] Isentropic coefficient or ideal gas heat capacity ratio [-]
Returns
C [float] Coefficient C [-]

Notes

If C cannot be established, assume a coefficient of 0.0239, the highest value possible for C.
Although not dimensional, C varies with the units used.
If k is exactly equal to 1, the expression is undefined, and the formula must be simplified as follows from an
application of L’Hopital’s rule.
√︂
1
𝐶 = 0.03948
𝑒

References

[1]

Examples

From [1], checked with many points on Table 8.

>>> API520_C(1.35)
0.02669419967057233

fluids.safety_valve.API520_F2(k, P1, P2)


Calculates coefficient F2 for subcritical flow for use in API 520 subcritical flow relief valve sizing.

⎸(︂ )︂ [︃ 𝑘−1
]︃
⎸ 𝑘 2 1−𝑟 𝑘
𝐹2 = ⎷ 𝑟𝑘
𝑘−1 1−𝑟

𝑃2
𝑟=
𝑃1

430 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

Parameters
k [float] Isentropic coefficient or ideal gas heat capacity ratio [-]
P1 [float] Upstream relieving pressure; the set pressure plus the allowable overpressure, plus
atmospheric pressure, [Pa]
P2 [float] Built-up backpressure; the increase in pressure during flow at the outlet of a pressure-
relief device after it opens, [Pa]
Returns
F2 [float] Subcritical flow coefficient F2 [-]

Notes

F2 is completely dimensionless.

References

[1]

Examples

From [1] example 2, matches.

>>> API520_F2(1.8, 1E6, 7E5)


0.8600724121105563

fluids.safety_valve.API520_Kv(Re)
Calculates correction due to viscosity for liquid flow for use in API 520 relief valve sizing.
(︂ )︂−1
2.878 342.75
𝐾𝑣 = 0.9935 + +
𝑅𝑒0.5 𝑅𝑒1.5
Parameters
Re [float] Reynolds number for flow out the valve [-]
Returns
Kv [float] Correction due to viscosity [-]

Notes

Reynolds number in the standard is defined as follows, with Q in L/min, G1 as specific gravity, mu in centipoise,
and area in mm^2:
𝑄(18800𝐺1 )
𝑅𝑒 = √
𝜇 𝐴
It is unclear how this expression was derived with a constant of 18800; the following code demonstrates what
the constant should be:

>>> from scipy.constants import *


>>> liter/minute*1000./(0.001*(milli**2)**0.5)
16666.666666666668

2.20. Safety/relief valve sizing (fluids.safety_valve) 431


Fluids Documentation, Release 1.0.21

References

[1]

Examples

From [1], checked with example 5.

>>> API520_Kv(100)
0.6157445891444229

fluids.safety_valve.API520_N(P1)
Calculates correction due to steam pressure for steam flow for use in API 520 relief valve sizing.
For pressures below 10339 kPa, the correction factor is 1.
0.02764𝑃1 − 1000
𝐾𝑁 =
0.03324𝑃1 − 1061
Parameters
P1 [float] Upstream relieving pressure; the set pressure plus the allowable overpressure, plus
atmospheric pressure, [Pa]
Returns
KN [float] Correction due to steam temperature [-]

Notes

Although not dimensional, KN varies with the units used.


For temperatures above 922 K or 22057 kPa, KN is not defined.
Internally, units of kPa are used to match the equation in the standard.

References

[1]

Examples

>>> API520_N(10500e3)
0.9969100255

fluids.safety_valve.API520_SH(T1, P1)
Calculates correction due to steam superheat for steam flow for use in API 520 relief valve sizing. 2D interpola-
tion among a table with 28 pressures and 10 temperatures is performed.
Parameters
T1 [float] Temperature of the fluid entering the valve [K]
P1 [float] Upstream relieving pressure; the set pressure plus the allowable overpressure, plus
atmospheric pressure, [Pa]
Returns

432 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

KSH [float] Correction due to steam superheat [-]

Notes

For P above 20679 kPag, use the critical flow model. Superheat cannot be above 649 degrees Celsius. If T1 is
above 149 degrees Celsius, returns 1.

References

[1]

Examples

Custom example from table 9:

>>> API520_SH(593+273.15, 1066.325E3)


0.7201800000000002

fluids.safety_valve.API520_B(Pset, Pback, overpressure=0.1)


Calculates capacity correction due to backpressure on balanced spring-loaded PRVs in vapor service. For pilot
operated valves, this is always 1. Applicable up to 50% of the percent gauge backpressure, For use in API 520
relief valve sizing. 1D interpolation among a table with 53 backpressures is performed.
Parameters
Pset [float] Set pressure for relief [Pa]
Pback [float] Backpressure, [Pa]
overpressure [float, optional] The maximum fraction overpressure; one of 0.1, 0.16, or 0.21, [-]
Returns
Kb [float] Correction due to vapor backpressure [-]

Notes

If the calculated gauge backpressure is less than 30%, 38%, or 50% for overpressures of 0.1, 0.16, or 0.21, a
value of 1 is returned.
Percent gauge backpressure must be under 50%.

References

[1]

2.20. Safety/relief valve sizing (fluids.safety_valve) 433


Fluids Documentation, Release 1.0.21

Examples

Custom examples from figure 30:

>>> API520_B(1E6, 5E5)


0.7929945420944432

fluids.safety_valve.API520_W(Pset, Pback)
Calculates capacity correction due to backpressure on balanced spring-loaded PRVs in liquid service. For pilot
operated valves, this is always 1. Applicable up to 50% of the percent gauge backpressure, For use in API 520
relief valve sizing. 1D interpolation among a table with 53 backpressures is performed.
Parameters
Pset [float] Set pressure for relief [Pa]
Pback [float] Backpressure, [Pa]
Returns
KW [float] Correction due to liquid backpressure [-]

Notes

If the calculated gauge backpressure is less than 15%, a value of 1 is returned.

References

[1]

Examples

Custom example from figure 31:

>>> API520_W(1E6, 3E5) # 22% overpressure


0.9511471848008564

fluids.safety_valve.API526_letters = ['D', 'E', 'F', 'G', 'H', 'J', 'K', 'L', 'M', 'N',
'P', 'Q', 'R', 'T']
list: Letter size designations for different valve sizes in API 520
fluids.safety_valve.API526_A_sq_inch = [0.11, 0.196, 0.307, 0.503, 0.785, 1.287, 1.838,
2.853, 3.6, 4.34, 6.38, 11.05, 16.0, 26.0]
list: Nominal relief area in for different valve sizes in API 520, [in^2]
fluids.safety_valve.API526_A = [7.09676e-05, 0.00012645136, 0.00019806412,
0.00032451547999999997, 0.0005064506, 0.00083032092, 0.00118580408, 0.00184064148,
0.002322576, 0.0027999944, 0.004116120799999999, 0.007129018, 0.01032256, 0.01677416]
list: Nominal relief area in for different valve sizes in API 520, [m^2]

434 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

2.21 Liquid-Vapor Separators (fluids.separator)

This module contains functionality for calculating rating and designing vapor-liquid separators.
For reporting bugs, adding feature requests, or submitting pull requests, please use the GitHub issue tracker or contact
the author at Caleb.Andrew.Bell@gmail.com.

• Functions

2.21.1 Functions

fluids.separator.v_Sounders_Brown(K, rhol, rhog)


Calculates the maximum allowable vapor velocity in a two-phase separator to permit separation between en-
trained droplets and the gas using an empirical K factor, named after Sounders and Brown [1]. This is a simpli-
fying expression for terminal velocity and drag on particles.
√︃
𝜌𝑙 − 𝜌𝑔
𝑣𝑚𝑎𝑥 = 𝐾𝑆𝐵
𝜌𝑔

Parameters
K [float] Sounders Brown K factor for two-phase separator design, [m/s]
rhol [float] Density of liquid phase [kg/m^3]
rhog [float] Density of gas phase [kg/m^3]
Returns
v_max [float] Maximum allowable vapor velocity in a two-phase separator to permit separation
between entrained droplets and the gas, [m/s]

Notes

The Sounders Brown K factor is related to the terminal velocity as shown in the following expression.
√︃
4𝑔𝑑𝑝 (𝜌𝑝 − 𝜌𝑓 )
𝑣𝑡𝑒𝑟𝑚 = 𝑣𝑚𝑎𝑥 =
3𝐶𝐷 𝜌𝑓
√︃ √︂
(𝜌𝑝 − 𝜌𝑓 ) 4𝑔𝑑𝑝
𝑣𝑡𝑒𝑟𝑚 =
𝜌𝑓 3𝐶𝐷
√︂
4𝑔𝑑𝑝
𝑣𝑡𝑒𝑟𝑚 = 𝐾𝑆𝐵
3𝐶𝐷
Note this form corresponds to the Newton’s law range (Re > 500), but in reality droplets are normally in the
intermediate or Stoke’s law region [2]. For this reason using the drag coefficient expression directly is cleaner,
but identical results can be found with the Sounders Brown equation.

2.21. Liquid-Vapor Separators (fluids.separator) 435


Fluids Documentation, Release 1.0.21

References

[1], [2]

Examples

>>> v_Sounders_Brown(K=0.08, rhol=985.4, rhog=1.3)


2.2010906387516167

fluids.separator.K_separator_Watkins(x, rhol, rhog, horizontal=False, method='spline')


Calculates the Sounders-Brown K factor as used in determining maximum allowable gas velocity in a two-phase
separator in either a horizontal or vertical orientation. This function approximates a graph published in [1] to
determine K as used in the following equation:
√︃
𝜌𝑙 − 𝜌𝑔
𝑣𝑚𝑎𝑥 = 𝐾𝑆𝐵
𝜌𝑔

The graph has K_{SB} on its y-axis, and the following as its x-axis:

𝑚𝑙 (1 − 𝑥)
√︁ √︁
𝜌𝑔 /𝜌𝑙 = 𝜌𝑔 /𝜌𝑙
𝑚𝑔 𝑥

Cubic spline interpolation is the default method of retrieving a value from the graph, which was digitized with
Engauge-Digitizer.
Also supported are two published curve fits to the graph. The first is that of Blackwell (1984) [2], as follows:

𝐾𝑆𝐵 = exp(−1.942936 − 0.814894𝑋 − 0.179390𝑋 2 − 0.0123790𝑋 3 + 0.000386235𝑋 4 + 0.000259550𝑋 5 )


[︂ ]︂
(1 − 𝑥)
√︁
𝑋 = ln 𝜌𝑔 /𝜌𝑙
𝑥

The second is that of Branan (1999), as follows:

𝐾𝑆𝐵 = exp(−1.877478097 − 0.81145804597𝑋 − 0.1870744085𝑋 2 − 0.0145228667𝑋 3 − 0.00101148518𝑋 4 )


[︂ ]︂
(1 − 𝑥)
√︁
𝑋 = ln 𝜌𝑔 /𝜌𝑙
𝑥

Parameters
x [float] Quality of fluid entering separator, [-]
rhol [float] Density of liquid phase [kg/m^3]
rhog [float] Density of gas phase [kg/m^3]
horizontal [bool, optional] Whether to use the vertical or horizontal value; horizontal is 1.25
higher
method [str] One of ‘spline, ‘blackwell’, or ‘branan’
Returns
K [float] Sounders Brown horizontal or vertical K factor for two-phase separator design only,
[m/s]

436 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

Notes

Both the ‘branan’ and ‘blackwell’ models are used frequently. However, the spline is much more accurate.
No limits checking is enforced. However, the x-axis spans only 0.006 to 5.4, and the function should not be used
outside those limits.

References

[1], [2], [3]

Examples

>>> K_separator_Watkins(0.88, 985.4, 1.3, horizontal=True)


0.07951613600476297

fluids.separator.K_separator_demister_York(P, horizontal=False)
Calculates the Sounders Brown K factor as used in determining maximum permissible gas velocity in a two-
phase separator in either a horizontal or vertical orientation, with a demister. This function is a curve fit to [1]
published in [2] and is widely used.
For 1 < P < 15 psia:

𝐾 = 0.1821 + 0.0029𝑃 + 0.0460 ln 𝑃

For 15 <= P <= 40 psia:

𝐾 = 0.35

For P < 5500 psia:

𝐾 = 0.430 − 0.023 ln 𝑃

In the above equations, P is in units of psia.


Parameters
P [float] Pressure of separator, [Pa]
horizontal [bool, optional] Whether to use the vertical or horizontal value; horizontal is 1.25
times higher, [-]
Returns
K [float] Sounders Brown Horizontal or vertical K factor for two-phase separator design with a
demister, [m/s]

Notes

If the input pressure is under 1 psia, 1 psia is used. If the input pressure is over 5500 psia, 5500 psia is used.

2.21. Liquid-Vapor Separators (fluids.separator) 437


Fluids Documentation, Release 1.0.21

References

[2], [1]

Examples

>>> K_separator_demister_York(975*psi)
0.08281536035331669

fluids.separator.K_Sounders_Brown_theoretical(D, Cd, g=9.80665)


Converts a known drag coefficient into a Sounders-Brown K factor for two-phase separator design. This factor
is the traditional way for separator diameters to be obtained although it is unnecessary and the theoretical drag
coefficient method can be used instead.
√︃ √︂
(𝜌𝑝 − 𝜌𝑓 ) 4𝑔𝑑𝑝
𝐾𝑆𝐵 = =
𝜌𝑓 3𝐶𝐷

Parameters
D [float] Design diameter of the droplets, [m]
Cd [float] Drag coefficient [-]
g [float, optional] Acceleration due to gravity, [m/s^2]
Returns
K [float] Sounders Brown K factor for two-phase separator design, [m/s]

Notes

Drag coefficient is a function of velocity; so iteration is needed to obtain the most correct answer. The following
example shows the use of iteration to obtain the final velocity:

>>> from fluids import *


>>> V = 2.0
>>> D = 150E-6
>>> rho = 1.3
>>> rhol = 700.
>>> mu = 1E-5
>>> for i in range(10):
... Re = Reynolds(V=V, rho=rho, mu=mu, D=D)
... Cd = drag_sphere(Re)
... K = K_Sounders_Brown_theoretical(D=D, Cd=Cd)
... V = v_Sounders_Brown(K, rhol=rhol, rhog=rho)
... print('%.14f ' %V)
0.76093307417658
0.56242939340131
0.50732895050696
0.48957142095508
0.48356021946899
0.48149076033622
0.48077414934614
0.48052549959141
(continues on next page)

438 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

(continued from previous page)


0.48043916249756
0.48040917690193

The use of Sounders-Brown constants can be replaced as follows (the v_terminal method includes its own solver
for terminal velocity):

>>> from fluids.drag import v_terminal


>>> v_terminal(D=D, rhop=rhol, rho=rho, mu=mu)
0.4803932186998

References

[1]

Examples

>>> K_Sounders_Brown_theoretical(D=150E-6, Cd=0.5)


0.06263114241333939

2.22 Pneumatic conveying (fluids.saltation)

This module contains correlations for calculating the saltation velocity of entrained particles.
For reporting bugs, adding feature requests, or submitting pull requests, please use the GitHub issue tracker or contact
the author at Caleb.Andrew.Bell@gmail.com.

• Correlations

2.22.1 Correlations

fluids.saltation.Rizk(mp, dp, rhog, D)


Calculates saltation velocity of the gas for pneumatic conveying, according to [1] as described in [2] and many
others.
(︂ )︂
1 1100𝑑𝑝 +2.5
𝜇= (𝐹 𝑟𝑠 )
101440𝑑𝑝 +1.96

𝑉𝑠𝑎𝑙𝑡
𝐹 𝑟𝑠 = √
𝑔𝐷
𝑚𝑝
𝜇= 𝜋 2
4 𝐷 𝑉 𝜌𝑓
Parameters
mp [float] Solid mass flow rate, [kg/s]
dp [float] Particle diameter, [m]

2.22. Pneumatic conveying (fluids.saltation) 439


Fluids Documentation, Release 1.0.21

rhog [float] Gas density, [kg/m^3]


D [float] Diameter of pipe, [m]
Returns
V [float] Saltation velocity of gas, [m/s]

Notes

Model is rearranged to be explicit in terms of saltation velocity internally.

References

[1], [2], [3]

Examples

Example is from [3].

>>> Rizk(mp=0.25, dp=100E-6, rhog=1.2, D=.078)


9.8833092829357

fluids.saltation.Matsumoto_1974(mp, rhop, dp, rhog, D, Vterminal=1)


Calculates saltation velocity of the gas for pneumatic conveying, according to [1]. Also described in [2].
(︂ )︂0.50 (︂ )︂−1.75 (︂ )︂3
𝜌𝑝 𝐹 𝑟𝑝 𝐹 𝑟𝑠
𝜇 = 0.448
𝜌𝑓 10 10

𝑉𝑠𝑎𝑙𝑡
𝐹 𝑟𝑠 = √
𝑔𝐷
𝑉𝑡𝑒𝑟𝑚𝑖𝑛𝑎𝑙
𝐹 𝑟𝑝 = √︀
𝑔𝑑𝑝
𝑚𝑝
𝜇= 𝜋 2
4 𝐷 𝑉 𝜌𝑓
Parameters
mp [float] Solid mass flow rate, [kg/s]
rhop [float] Particle density, [kg/m^3]
dp [float] Particle diameter, [m]
rhog [float] Gas density, [kg/m^3]
D [float] Diameter of pipe, [m]
Vterminal [float] Terminal velocity of particle settling in gas, [m/s]
Returns
V [float] Saltation velocity of gas, [m/s]

440 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

Notes

Model is rearranged to be explicit in terms of saltation velocity internally. Result looks high, something may be
wrong. For particles > 0.3 mm.

References

[1], [2]

Examples

>>> Matsumoto_1974(mp=1., rhop=1000., dp=1E-3, rhog=1.2, D=0.1, Vterminal=5.24)


19.583617317317895

fluids.saltation.Matsumoto_1975(mp, rhop, dp, rhog, D, Vterminal=1)


Calculates saltation velocity of the gas for pneumatic conveying, according to [1]. Also described in [2].
(︂ )︂0.55 (︂ )︂−2.3 (︂ )︂3
𝜌𝑝 𝐹 𝑟𝑝 𝐹 𝑟𝑠
𝜇 = 1.11
𝜌𝑓 10 10

𝑉𝑠𝑎𝑙𝑡
𝐹 𝑟𝑠 = √
𝑔𝐷
𝑉𝑡𝑒𝑟𝑚𝑖𝑛𝑎𝑙
𝐹 𝑟𝑝 = √︀
𝑔𝑑𝑝
𝑚𝑝
𝜇= 𝜋 2
4 𝐷 𝑉 𝜌𝑓
Parameters
mp [float] Solid mass flow rate, [kg/s]
rhop [float] Particle density, [kg/m^3]
dp [float] Particle diameter, [m]
rhog [float] Gas density, [kg/m^3]
D [float] Diameter of pipe, [m]
Vterminal [float] Terminal velocity of particle settling in gas, [m/s]
Returns
V [float] Saltation velocity of gas, [m/s]

Notes

Model is rearranged to be explicit in terms of saltation velocity internally. Result looks high, something may be
wrong. For particles > 0.3 mm.

2.22. Pneumatic conveying (fluids.saltation) 441


Fluids Documentation, Release 1.0.21

References

[1], [2]

Examples

>>> Matsumoto_1975(mp=1., rhop=1000., dp=1E-3, rhog=1.2, D=0.1, Vterminal=5.24)


18.04523091703009

fluids.saltation.Matsumoto_1977(mp, rhop, dp, rhog, D, Vterminal=1)


Calculates saltation velocity of the gas for pneumatic conveying, according to [1] and reproduced in [2], [3], and
[4].
First equation is used if third equation yields d* higher than dp. Otherwise, use equation 2.
(︂ )︂1.43 (︂ )︂4
𝑑𝑝 𝐹 𝑟𝑠
𝜇 = 5560
𝐷 10
(︂ )︂−3.7 (︂
)︂1.06 (︂ )︂3.61
𝜌𝑝 𝐹 𝑟𝑝 𝐹 𝑟𝑠
𝜇 = 0.373
𝜌𝑓 10 10
−0.74
𝑑*𝑝
(︂ )︂
𝜌𝑝
= 1.39
𝐷 𝜌𝑓
𝑉𝑠𝑎𝑙𝑡
𝐹 𝑟𝑠 = √
𝑔𝐷
𝑉𝑡𝑒𝑟𝑚𝑖𝑛𝑎𝑙
𝐹 𝑟𝑝 = √︀
𝑔𝑑𝑝
𝑚𝑝
𝜇= 𝜋 2
4 𝐷 𝑉 𝜌𝑓
Parameters
mp [float] Solid mass flow rate, [kg/s]
rhop [float] Particle density, [kg/m^3]
dp [float] Particle diameter, [m]
rhog [float] Gas density, [kg/m^3]
D [float] Diameter of pipe, [m]
Vterminal [float] Terminal velocity of particle settling in gas, [m/s]
Returns
V [float] Saltation velocity of gas, [m/s]

Notes

Model is rearanged to be explicit in terms of saltation velocity internally.r

442 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

References

[1], [2], [3], [4]

Examples

Example is only a self-test.


Course routine, terminal velocity input is from example in [2].

>>> Matsumoto_1977(mp=1., rhop=1000., dp=1E-3, rhog=1.2, D=0.1, Vterminal=5.24)


16.64284834446686

fluids.saltation.Schade(mp, rhop, dp, rhog, D)


Calculates saltation velocity of the gas for pneumatic conveying, according to [1] as described in [2], [3], [4],
and [5].
(︂ )︂0.025 (︂ )︂0.34
𝐷 𝜌𝑝
𝐹 𝑟𝑠 = 𝜇0.11
𝑑𝑝 𝜌𝑓

𝑉𝑠𝑎𝑙𝑡
𝐹 𝑟𝑠 = √
𝑔𝐷
𝑚𝑝
𝜇= 𝜋 2
4 𝐷 𝑉 𝜌𝑓
Parameters
mp [float] Solid mass flow rate, [kg/s]
rhop [float] Particle density, [kg/m^3]
dp [float] Particle diameter, [m]
rhog [float] Gas density, [kg/m^3]
D [float] Diameter of pipe, [m]
Returns
V [float] Saltation velocity of gas, [m/s]

Notes

Model is rearranged to be explicit in terms of saltation velocity internally.

References

[1], [2], [3], [4], [5]

2.22. Pneumatic conveying (fluids.saltation) 443


Fluids Documentation, Release 1.0.21

Examples

>>> Schade(mp=1., rhop=1000., dp=1E-3, rhog=1.2, D=0.1)


13.697415809497912

fluids.saltation.Weber_saltation(mp, rhop, dp, rhog, D, Vterminal=4)


Calculates saltation velocity of the gas for pneumatic conveying, according to [1] as described in [2], [3], [4],
and [5].
If Vterminal is under 3 m/s, use equation 1; otherwise, equation 2.
(︂ )︂ (︂ )︂0.1
8 0.25 𝑑𝑝
𝐹 𝑟𝑠 = 7 + 𝑉𝑡𝑒𝑟𝑚𝑖𝑛𝑎𝑙 𝜇
3 𝐷
(︂ )︂0.1
𝑑𝑝
𝐹 𝑟𝑠 = 15𝜇0.25
𝐷
𝑉𝑠𝑎𝑙𝑡
𝐹 𝑟𝑠 = √
𝑔𝐷
𝑚𝑝
𝜇= 𝜋 2
4 𝐷 𝑉 𝜌𝑓
Parameters
mp [float] Solid mass flow rate, [kg/s]
rhop [float] Particle density, [kg/m^3]
dp [float] Particle diameter, [m]
rhog [float] Gas density, [kg/m^3]
D [float] Diameter of pipe, [m]
Vterminal [float] Terminal velocity of particle settling in gas, [m/s]
Returns
V [float] Saltation velocity of gas, [m/s]

Notes

Model is rearranged to be explicit in terms of saltation velocity internally.

References

[1], [2], [3], [4], [5]

Examples

Examples are only a self-test.

>>> Weber_saltation(mp=1, rhop=1000., dp=1E-3, rhog=1.2, D=0.1, Vterminal=4)


15.227445436331474

444 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

fluids.saltation.Geldart_Ling(mp, rhog, D, mug)


Calculates saltation velocity of the gas for pneumatic conveying, according to [1] as described in [2] and [3].
if Gs/D < 47000, use equation 1, otherwise use equation 2.

𝑉𝑠𝑎𝑙𝑡 = 1.5𝐺0.465
𝑠 𝐷−0.01 𝜇0.055 𝜌𝑓−0.42

𝑉𝑠𝑎𝑙𝑡 = 8.7𝐺0.302
𝑠 𝐷0.153 𝜇0.055 𝜌𝑓−0.42
(︂ )︂0.1
𝑑𝑝
𝐹 𝑟𝑠 = 15𝜇0.25
𝐷
𝑉𝑠𝑎𝑙𝑡
𝐹 𝑟𝑠 = √
𝑔𝐷
𝑚𝑝
𝜇= 𝜋 2
4 𝐷 𝑉 𝜌𝑓
𝑚𝑝
𝐺𝑠 =
𝐴
Parameters
mp [float] Solid mass flow rate, [kg/s]
rhog [float] Gas density, [kg/m^3]
D [float] Diameter of pipe, [m]
mug [float] Gas viscosity, [Pa*s]
Returns
V [float] Saltation velocity of gas, [m/s]

Notes

Model is rearranged to be explicit in terms of saltation velocity internally.

References

[1], [2], [3]

Examples

>>> Geldart_Ling(1., 1.2, 0.1, 2E-5)


7.467495862402707

2.23 Two phase flow (fluids.two_phase)

This module contains functions for calculating two-phase pressure drop. It also contains correlations for flow regime.
For reporting bugs, adding feature requests, or submitting pull requests, please use the GitHub issue tracker or contact
the author at Caleb.Andrew.Bell@gmail.com.

2.23. Two phase flow (fluids.two_phase) 445


Fluids Documentation, Release 1.0.21

• Interfaces
• Two Phase Pressure Drop Correlations
• Two Phase Flow Regime Correlations

2.23.1 Interfaces

fluids.two_phase.two_phase_dP(m, x, rhol, D, L=1.0, rhog=None, mul=None, mug=None, sigma=None,


P=None, Pc=None, roughness=0.0, angle=None, Method=None)
This function handles calculation of two-phase liquid-gas pressure drop for flow inside channels. 23 calculation
methods are available, with varying input requirements. A correlation will be automatically selected if none is
specified. The full list of correlation can be obtained with the AvailableMethods flag.
If no correlation is selected, the following rules are used, with the earlier options attempted first:
• If rhog, mul, mug, and sigma are specified, use the Kim_Mudawar model
• If rhog, mul, and mug are specified, use the Chisholm model
• If mul, P, and Pc are specified, use the Zhang_Webb model
• If rhog and sigma are specified, use the Lombardi_Pedrocchi model

Parameters
m [float] Mass flow rate of fluid, [kg/s]
x [float] Quality of fluid, [-]
rhol [float] Liquid density, [kg/m^3]
D [float] Diameter of pipe, [m]
L [float, optional] Length of pipe, [m]
rhog [float, optional] Gas density, [kg/m^3]
mul [float, optional] Viscosity of liquid, [Pa*s]
mug [float, optional] Viscosity of gas, [Pa*s]
sigma [float, optional] Surface tension, [N/m]
P [float, optional] Pressure of fluid, [Pa]
Pc [float, optional] Critical pressure of fluid, [Pa]
roughness [float, optional] Roughness of pipe for use in calculating friction factor, [m]
angle [float, optional] The angle of the pipe with respect to the horizontal, [degrees]
Returns
dP [float] Pressure drop of the two-phase flow, [Pa]
Other Parameters
Method [string, optional] A string of the function name to use, as in the dictionary
two_phase_correlations.

446 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

Notes

These functions may be integrated over, with properties recalculated as the fluid’s quality changes.
This model considers only the frictional pressure drop, not that due to gravity or acceleration.

Examples

>>> two_phase_dP(m=0.6, x=0.1, rhol=915., rhog=2.67, mul=180E-6, mug=14E-6,


... sigma=0.0487, D=0.05, L=1.0)
840.4137796786074

fluids.two_phase.two_phase_dP_methods(m, x, rhol, D, L=1.0, rhog=None, mul=None, mug=None,


sigma=None, P=None, Pc=None, roughness=0.0, angle=0,
check_ranges=False)
This function returns a list of names of correlations for two-phase liquid-gas pressure drop for flow inside chan-
nels. 24 calculation methods are available, with varying input requirements.
Parameters
m [float] Mass flow rate of fluid, [kg/s]
x [float] Quality of fluid, [-]
rhol [float] Liquid density, [kg/m^3]
D [float] Diameter of pipe, [m]
L [float, optional] Length of pipe, [m]
rhog [float, optional] Gas density, [kg/m^3]
mul [float, optional] Viscosity of liquid, [Pa*s]
mug [float, optional] Viscosity of gas, [Pa*s]
sigma [float, optional] Surface tension, [N/m]
P [float, optional] Pressure of fluid, [Pa]
Pc [float, optional] Critical pressure of fluid, [Pa]
roughness [float, optional] Roughness of pipe for use in calculating friction factor, [m]
angle [float, optional] The angle of the pipe with respect to the horizontal, [degrees]
check_ranges [bool, optional] Added for Future use only
Returns
methods [list] List of methods which can be used to calculate two-phase pressure drop with the
given inputs.

2.23. Two phase flow (fluids.two_phase) 447


Fluids Documentation, Release 1.0.21

Examples

>>> len(two_phase_dP_methods(m=0.6, x=0.1, rhol=915., rhog=2.67, mul=180E-6,␣


˓→mug=14E-6, sigma=0.0487, D=0.05, L=1.0, angle=30.0, roughness=1e-4, P=1e5,␣

˓→Pc=1e6))

24

fluids.two_phase.two_phase_dP_acceleration(m, D, xi, xo, alpha_i, alpha_o, rho_li, rho_gi, rho_lo=None,


rho_go=None)
This function handles calculation of two-phase liquid-gas pressure drop due to acceleration for flow inside chan-
nels. This is a discrete calculation for a segment with a known difference in quality (and ideally known inlet and
outlet pressures so density dependence can be included).

(1 − 𝑥𝑜 )2 𝑥2𝑜 (1 − 𝑥𝑖 )2 𝑥2𝑖
{︂[︂ ]︂ [︂ ]︂}︂
2
∆𝑃𝑎𝑐𝑐 = 𝐺 + − +
𝜌𝑙,𝑜 (1 − 𝛼𝑜 ) 𝜌𝑔,𝑜 𝛼𝑜 𝜌𝑙,𝑖 (1 − 𝛼𝑖 ) 𝜌𝑔,𝑖 𝛼𝑖

Parameters
m [float] Mass flow rate of fluid, [kg/s]
D [float] Diameter of pipe, [m]
xi [float] Quality of fluid at inlet, [-]
xo [float] Quality of fluid at outlet, [-]
alpha_i [float] Void fraction at inlet (area of gas / total area of channel), [-]
alpha_o [float] Void fraction at outlet (area of gas / total area of channel), [-]
rho_li [float] Liquid phase density at inlet, [kg/m^3]
rho_gi [float] Gas phase density at inlet, [kg/m^3]
rho_lo [float, optional] Liquid phase density at outlet, [kg/m^3]
rho_go [float, optional] Gas phase density at outlet, [kg/m^3]
Returns
dP [float] Acceleration component of pressure drop for two-phase flow, [Pa]

Notes

The use of different gas and liquid phase densities at the inlet and outlet is optional; the outlet densities conditions
will be assumed to be those of the inlet if they are not specified.
There is a continuous variant of this method which can be integrated over, at the expense of a speed. The
differential form of this is as follows ([1], [3]):

(1 − 𝑥)2 𝑥2
(︂ )︂ [︂ ]︂
𝑑𝑃 2 𝑑
− =𝐺 +
𝑑𝑧 𝑎𝑐𝑐 𝑑𝑧 𝜌𝑙 (1 − 𝛼) 𝜌𝑔 𝛼

448 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

References

[1], [2], [3]

Examples

>>> two_phase_dP_acceleration(m=1, D=0.1, xi=0.372, xo=0.557, rho_li=827.1,


... rho_gi=3.919, alpha_i=0.992, alpha_o=0.996)
706.8560377214725

fluids.two_phase.two_phase_dP_gravitational(angle, z, alpha_i, rho_li, rho_gi, alpha_o=None,


rho_lo=None, rho_go=None, g=9.80665)
This function handles calculation of two-phase liquid-gas pressure drop due to gravitation for flow inside chan-
nels. This is a discrete calculation for a segment with a known difference in elevation (and ideally known inlet
and outlet pressures so density dependence can be included).
{︂ }︂
[𝛼𝑜 𝜌𝑔,𝑜 + (1 − 𝛼𝑜 )𝜌𝑙,𝑜 ] + [𝛼𝑖 𝜌𝑔,𝑖 + (1 − 𝛼𝑖 )𝜌𝑙,𝑖 ]
−∆𝑃𝑔𝑟𝑎𝑣 = 𝑔 sin 𝜃𝑧
2

Parameters
angle [float] The angle of the pipe with respect to the horizontal, [degrees]
z [float] The total length of the pipe, [m]
alpha_i [float] Void fraction at inlet (area of gas / total area of channel), [-]
rho_li [float] Liquid phase density at inlet, [kg/m^3]
rho_gi [float] Gas phase density at inlet, [kg/m^3]
alpha_o [float, optional] Void fraction at outlet (area of gas / total area of channel), [-]
rho_lo [float, optional] Liquid phase density at outlet, [kg/m^3]
rho_go [float, optional] Gas phase density at outlet, [kg/m^3]
g [float, optional] Acceleration due to gravity, [m/s^2]
Returns
dP [float] Gravitational component of pressure drop for two-phase flow, [Pa]

Notes

The use of different gas and liquid phase densities and void fraction at the inlet and outlet is optional; the outlet
densities and void fraction will be assumed to be those of the inlet if they are not specified. This does not add
much accuracy.
There is a continuous variant of this method which can be integrated over, at the expense of a speed. The
differential form of this is as follows ([1], [2]):
(︂ )︂
𝑑𝑃
− = [𝛼𝜌𝑔 + (1 − 𝛼)𝜌𝑙 ]𝑔 sin 𝜃
𝑑𝑧 𝑔𝑟𝑎𝑣

2.23. Two phase flow (fluids.two_phase) 449


Fluids Documentation, Release 1.0.21

References

[1], [2], [3]

Examples

Example calculation, page 13-2 from [3]:

>>> two_phase_dP_gravitational(angle=90, z=2, alpha_i=0.9685, rho_li=1518.,


... rho_gi=2.6)
987.237416829999

The same calculation, but using average inlet and outlet conditions:

>>> two_phase_dP_gravitational(angle=90, z=2, alpha_i=0.9685, rho_li=1518.,


... rho_gi=2.6, alpha_o=0.968, rho_lo=1517.9, rho_go=2.59)
994.5416058829999

fluids.two_phase.two_phase_dP_dz_acceleration(m, D, x, rhol, rhog, dv_dP_l, dv_dP_g, dx_dP, dP_dL,


dA_dL)
This function handles calculation of two-phase liquid-gas pressure drop due to acceleration for flow inside chan-
nels. This is a continuous calculation, providing the differential in pressure per unit length and should be called
as part of an integration routine ([1], [2], [3]).

𝐺2 1 𝜕𝐴
(︂ )︂ (︂(︂ )︂ [︂ ]︂)︂
𝜕𝑃 2 1 1 𝜕𝑃 𝜕𝑥 𝜕𝑃 𝜕(1/𝜌𝑔 ) 𝜕(1/𝜌𝑙 )
− =𝐺 − + 𝑥 + (1 − 𝑥) −
𝜕𝐿 𝐴 𝜌𝑔 𝜌𝑙 𝜕𝐿 𝜕𝑃 𝜕𝐿 𝜕𝑃 𝜕𝑃 𝜌ℎ𝑜𝑚 𝐴 𝜕𝐿

Parameters
m [float] Mass flow rate of fluid, [kg/s]
D [float] Diameter of pipe, [m]
x [float] Quality of fluid [-]
rhol [float] Liquid density, [kg/m^3]
rhog [float] Gas density, [kg/m^3]
dv_dP_l [float] Derivative of mass specific volume of the liquid phase with respect to pressure,
[m^3/(kg*Pa)]
dv_dP_g [float] Derivative of mass specific volume of the gas phase with respect to pressure,
[m^3/(kg*Pa)]
dx_dP [float] Derivative of mass quality of the two-phase fluid with respect to pressure (numer-
ical derivatives may be convenient for this), [1/Pa]
dP_dL [float] Pressure drop per unit length of pipe, [Pa/m]
dA_dL [float] Change in area of pipe per unit length of pipe, [m^2/m]
Returns
dP_dz [float] Acceleration component of pressure drop for two-phase flow, [Pa/m]

450 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

Notes

This calculation has the homogeneous model built in to it as its derivation is shown in [1]. The discrete calculation
is more flexible as different void fractions may be used.

References

[1], [2], [3]

Examples

>>> two_phase_dP_dz_acceleration(m=1, D=0.1, x=0.372, rhol=827.1,


... rhog=3.919, dv_dP_l=-5e-12, dv_dP_g=-4e-7, dx_dP=-2e-7, dP_dL=120.0,
... dA_dL=0.0001)
20.137876617489034

fluids.two_phase.two_phase_dP_dz_gravitational(angle, alpha, rhol, rhog, g=9.80665)


This function handles calculation of two-phase liquid-gas pressure drop due to gravitation for flow inside chan-
nels. This is a differential calculation for a segment with an infinitesimal difference in elevation for use in per-
forming integration over a pipe as shown in [1] and [2].
(︂ )︂
𝑑𝑃
− = [𝛼𝜌𝑔 + (1 − 𝛼)𝜌𝑙 ]𝑔 sin 𝜃
𝑑𝑧 𝑔𝑟𝑎𝑣

Parameters
angle [float] The angle of the pipe with respect to the horizontal, [degrees]
alpha [float] Void fraction (area of gas / total area of channel), [-]
rhol [float] Liquid phase density, [kg/m^3]
rhog [float] Gas phase density, [kg/m^3]
g [float, optional] Acceleration due to gravity, [m/s^2]
Returns
dP_dz [float] Gravitational component of pressure drop for two-phase flow, [Pa/m]

References

[1], [2]

Examples

>>> two_phase_dP_dz_gravitational(angle=90, alpha=0.9685, rhol=1518,


... rhog=2.6)
493.6187084149995

2.23. Two phase flow (fluids.two_phase) 451


Fluids Documentation, Release 1.0.21

2.23.2 Two Phase Pressure Drop Correlations

fluids.two_phase.Beggs_Brill(m, x, rhol, rhog, mul, mug, sigma, P, D, angle, roughness=0.0, L=1.0,


g=9.80665, acceleration=True)
Calculates the two-phase pressure drop according to the Beggs-Brill correlation ([1], [2], [3]).
Parameters
m [float] Mass flow rate of fluid, [kg/s]
x [float] Mass quality of fluid, [-]
rhol [float] Liquid density, [kg/m^3]
rhog [float] Gas density, [kg/m^3]
mul [float] Viscosity of liquid, [Pa*s]
mug [float] Viscosity of gas, [Pa*s]
sigma [float] Surface tension, [N/m]
P [float] Pressure of fluid (used only if acceleration=True), [Pa]
D [float] Diameter of pipe, [m]
angle [float] The angle of the pipe with respect to the horizontal, [degrees]
roughness [float, optional] Roughness of pipe for use in calculating friction factor, [m]
L [float, optional] Length of pipe, [m]
g [float, optional] Acceleration due to gravity, [m/s^2]
acceleration [bool] Whether or not to include the original acceleration component, [-]
Returns
dP [float] Pressure drop of the two-phase flow, [Pa]

Notes

The original acceleration formula is fairly primitive and normally neglected. The model was developed assuming
smooth pipe, so leaving roughness to zero may be wise.
Note this is a “mechanistic” pressure drop model - the gravitational pressure drop cannot be separated from the
frictional pressure drop.

References

[1], [2], [3]

452 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

Examples

>>> Beggs_Brill(m=0.6, x=0.1, rhol=915., rhog=2.67, mul=180E-6, mug=14E-6,


... sigma=0.0487, P=1E7, D=0.05, angle=0, roughness=0.0, L=1.0)
686.9724506803469

fluids.two_phase.Lockhart_Martinelli(m, x, rhol, rhog, mul, mug, D, L=1.0, Re_c=2000.0)


Calculates two-phase pressure drop with the Lockhart and Martinelli (1949) correlation as presented in non-
graphical form by Chisholm (1967).

∆𝑃 = ∆𝑃𝑙 𝜑2𝑙

𝐶 1
𝜑2𝑙 = 1 + + 2
𝑋 𝑋
∆𝑃 𝑙
𝑋2 =
∆𝑃𝑔

Liquid Gas C
Turbulent Turbulent 20
Laminar Turbulent 12
Turbulent Laminar 10
Laminar Laminar 5

This model has its own friction factor calculations, to be consistent with its Reynolds number transition and
the procedure specified in the original work. The equation 64/Re is used up to Re_c, and above it the Blasius
equation is used as follows:
0.184
𝑓𝑑 =
𝑅𝑒0.2
Parameters
m [float] Mass flow rate of fluid, [kg/s]
x [float] Quality of fluid, [-]
rhol [float] Liquid density, [kg/m^3]
rhog [float] Gas density, [kg/m^3]
mul [float] Viscosity of liquid, [Pa*s]
mug [float] Viscosity of gas, [Pa*s]
D [float] Diameter of pipe, [m]
L [float, optional] Length of pipe, [m]
Re_c [float, optional] Transition Reynolds number, used to decide which friction factor equation
to use and which C value to use from the table above.
Returns
dP [float] Pressure drop of the two-phase flow, [Pa]

2.23. Two phase flow (fluids.two_phase) 453


Fluids Documentation, Release 1.0.21

Notes

Developed for horizontal flow. Very popular. Many implementations of this model assume turbulent-turbulent
flow.
The original model proposed that the transition Reynolds number was 1000 for laminar flow, and 2000 for tur-
bulent flow; it proposed no model for Re_l < 1000 and Re_g between 1000 and 2000 and also Re_g < 1000 and
Re_l between 1000 and 2000.
No correction is available in this model for rough pipe.
[3] examined the original data in [1] again, and fit more curves to the data, separating them into different flow
regimes. There were 229 datum in the turbulent-turbulent regime, 9 in the turbulent-laminar regime, 339 in the
laminar-turbulent regime, and 42 in the laminar-laminar regime. Errors from [3]’s curves were 13.4%, 3.5%,
14.3%, and 12.0% for the above regimes, respectively. [2]’s fits provide further error.

References

[1], [2], [3], [4]

Examples

>>> Lockhart_Martinelli(m=0.6, x=0.1, rhol=915., rhog=2.67, mul=180E-6,


... mug=14E-6, D=0.05, L=1.0)
716.4695654888484

fluids.two_phase.Friedel(m, x, rhol, rhog, mul, mug, sigma, D, roughness=0.0, L=1.0)


Calculates two-phase pressure drop with the Friedel correlation.

∆𝑃𝑓 𝑟𝑖𝑐𝑡𝑖𝑜𝑛 = ∆𝑃𝑙𝑜 𝜑2𝑙𝑜

3.24𝐹 𝐻
𝜑2𝑙𝑜 = 𝐸 +
𝐹 𝑟0.0454 𝑊 𝑒0.035
(︂ )︂0.91 (︂ )︂0.19 (︂ )︂0.7
𝜌𝑙 𝜇𝑔 𝜇𝑔
𝐻= 1−
𝜌𝑔 𝜇𝑙 𝜇𝑙
𝐹 = 𝑥0.78 (1 − 𝑥)0.224
(︂ )︂
𝜌𝑙 𝑓𝑑,𝑔𝑜
𝐸 = (1 − 𝑥)2 + 𝑥2
𝜌𝑔 𝑓𝑑,𝑙𝑜
𝐺2𝑡𝑝
𝐹𝑟 =
𝑔𝐷𝜌2𝐻
𝐺2𝑡𝑝 𝐷
𝑊𝑒 =
𝜎𝜌𝐻
(︂ )︂−1
𝑥 1−𝑥
𝜌𝐻 = +
𝜌𝑔 𝜌𝑙
Parameters
m [float] Mass flow rate of fluid, [kg/s]
x [float] Quality of fluid, [-]
rhol [float] Liquid density, [kg/m^3]

454 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

rhog [float] Gas density, [kg/m^3]


mul [float] Viscosity of liquid, [Pa*s]
mug [float] Viscosity of gas, [Pa*s]
sigma [float] Surface tension, [N/m]
D [float] Diameter of pipe, [m]
roughness [float, optional] Roughness of pipe for use in calculating friction factor, [m]
L [float, optional] Length of pipe, [m]
Returns
dP [float] Pressure drop of the two-phase flow, [Pa]

Notes

Applicable to vertical upflow and horizontal flow. Known to work poorly when mul/mug > 1000. Gives mean
errors on the order of 40%. Tested on data with diameters as small as 4 mm.
The power of 0.0454 is given as 0.045 in [2], [3], [4], and [5]; [6] and [2] give 0.0454 and [2] also gives a similar
correlation said to be presented in [1], so it is believed this 0.0454 was the original power. [6] also gives an
expression for friction factor claimed to be presented in [1]; it is not used here.

References

[1], [2], [3], [4], [5], [6]

Examples

Example 4 in [6]:

>>> Friedel(m=0.6, x=0.1, rhol=915., rhog=2.67, mul=180E-6, mug=14E-6,


... sigma=0.0487, D=0.05, roughness=0.0, L=1.0)
738.6500525002241

fluids.two_phase.Chisholm(m, x, rhol, rhog, mul, mug, D, roughness=0.0, L=1.0, rough_correction=False)


Calculates two-phase pressure drop with the Chisholm (1973) correlation from [1], also in [2] and [3].

∆𝑃𝑡𝑝
= 𝜑2𝑐ℎ
∆𝑃𝑙𝑜
{︁ }︁
𝜑2𝑐ℎ = 1 + (Γ2 − 1) 𝐵𝑥(2−𝑛)/2 (1 − 𝑥)(2−𝑛)/2 + 𝑥2−𝑛
(︀ Δ𝑃 )︀
𝐿 𝑔𝑜
Γ2 = (︀ Δ𝑃 )︀
𝐿 𝑙𝑜
For Gamma < 9.5:
55
𝐵= for 𝐺𝑡𝑝 > 1900
𝐺0.5
𝑡𝑝

2400
𝐵= for 500 < 𝐺𝑡𝑝 < 1900
𝐺𝑡𝑝

2.23. Two phase flow (fluids.two_phase) 455


Fluids Documentation, Release 1.0.21

𝐵 = 4.8 for 𝐺𝑡𝑝 < 500


For 9.5 < Gamma < 28:
520
𝐵= for 𝐺𝑡𝑝 < 600
Γ𝐺0.5
𝑡𝑝

21
𝐵= for 𝐺𝑡𝑝 > 600
Γ
For Gamma > 28:
15000
𝐵= 0.5
Γ2 𝐺𝑡𝑝

If rough_correction is True, the following correction to B is applied:


[︃ {︃ (︂ )︂2 }︃]︃ 0.25−𝑛
0.25
𝐵𝑟𝑜𝑢𝑔ℎ 𝜇𝑔 −600𝜖/𝐷
= 0.5 1 + + 10
𝐵𝑠𝑚𝑜𝑜𝑡ℎ 𝜇𝑙

𝑓
𝑑,𝑙𝑜
ln 𝑓𝑑,𝑔𝑜
𝑛= 𝑅𝑒𝑔𝑜
ln 𝑅𝑒𝑙𝑜

Parameters
m [float] Mass flow rate of fluid, [kg/s]
x [float] Quality of fluid, [-]
rhol [float] Liquid density, [kg/m^3]
rhog [float] Gas density, [kg/m^3]
mul [float] Viscosity of liquid, [Pa*s]
mug [float] Viscosity of gas, [Pa*s]
D [float] Diameter of pipe, [m]
roughness [float, optional] Roughness of pipe for use in calculating friction factor, [m]
L [float, optional] Length of pipe, [m]
rough_correction [bool, optional] Whether or not to use the roughness correction proposed in
the 1968 version of the correlation
Returns
dP [float] Pressure drop of the two-phase flow, [Pa]

Notes

Applicable for 0 < x < 1. n = 0.25, the exponent in the Blassius equation. Originally developed for smooth pipes,
a roughness correction is included as well from the Chisholm’s 1968 work [4]. Neither [2] nor [3] have any
mention of the correction however.

456 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

References

[1], [2], [3], [4]

Examples

>>> Chisholm(m=0.6, x=0.1, rhol=915., rhog=2.67, mul=180E-6,


... mug=14E-6, D=0.05, roughness=0.0, L=1.0)
1084.1489922923738

fluids.two_phase.Kim_Mudawar(m, x, rhol, rhog, mul, mug, sigma, D, L=1.0)


Calculates two-phase pressure drop with the Kim and Mudawar (2012) correlation as in [1], also presented in
[2].

∆𝑃 = ∆𝑃𝑙 𝜑2𝑙

𝐶 1
𝜑2𝑙 = 1 + + 2
𝑋 𝑋
∆𝑃𝑙
𝑋2 =
∆𝑃𝑔
For turbulent liquid, turbulent gas:
(︂ )︂0.35
𝜌𝑙
𝐶 = 0.39𝑅𝑒0.03 0.10
𝑙𝑜 𝑆𝑢𝑔𝑜
𝜌𝑔

For turbulent liquid, laminar gas:


(︂ )︂0.14
−4 𝜌𝑙
𝐶 = 8.7 × 10 𝑅𝑒0.17 0.50
𝑙𝑜 𝑆𝑢𝑔𝑜
𝜌𝑔

For laminar liquid, turbulent gas:


(︂ )︂0.36
0.59 𝜌𝑙
𝐶= 0.0015𝑅𝑒𝑙𝑜 𝑆𝑢0.19
𝑔𝑜
𝜌𝑔

For laminar liquid, laminar gas:


(︂ )︂0.48
−5 𝜌𝑙
𝐶 = 3.5 × 10 𝑅𝑒0.44 0.50
𝑙𝑜 𝑆𝑢𝑔𝑜
𝜌𝑔

This model has its own friction factor calculations, to be consistent with its Reynolds number transition. As their
model was regressed with these equations, more error is obtained when using any other friction factor calculation.
The laminar equation 64/Re is used up to Re=2000, then the Blasius equation with a coefficient of 0.316, and
above Re = 20000,
0.184
𝑓𝑑 =
𝑅𝑒0.2
Parameters
m [float] Mass flow rate of fluid, [kg/s]
x [float] Quality of fluid, [-]
rhol [float] Liquid density, [kg/m^3]
rhog [float] Gas density, [kg/m^3]

2.23. Two phase flow (fluids.two_phase) 457


Fluids Documentation, Release 1.0.21

mul [float] Viscosity of liquid, [Pa*s]


mug [float] Viscosity of gas, [Pa*s]
sigma [float] Surface tension, [N/m]
D [float] Diameter of pipe, [m]
L [float, optional] Length of pipe, [m]
Returns
dP [float] Pressure drop of the two-phase flow, [Pa]

Notes

The critical Reynolds number in this model is 2000, with a Reynolds number definition using actual liquid and
gas flows. This model also requires liquid-only Reynolds number to be calculated.
No attempt to incorporate roughness into the model was made in [1].
The model was developed with hydraulic diameter from 0.0695 to 6.22 mm, mass velocities 4 to 8528 kg/m^2/s,
flow qualities from 0 to 1, reduced pressures from 0.0052 to 0.91, superficial liquid Reynolds numbers up to
79202, superficial gas Reynolds numbers up to 253810, liquid-only Reynolds numbers up to 89798, 7115 data
points from 36 sources and working fluids air, CO2, N2, water, ethanol, R12, R22, R134a, R236ea, R245fa,
R404A, R407C, propane, methane, and ammonia.

References

[1], [2]

Examples

>>> Kim_Mudawar(m=0.6, x=0.1, rhol=915., rhog=2.67, mul=180E-6, mug=14E-6,


... sigma=0.0487, D=0.05, L=1.0)
840.4137796786074

fluids.two_phase.Baroczy_Chisholm(m, x, rhol, rhog, mul, mug, D, roughness=0.0, L=1.0)


Calculates two-phase pressure drop with the Baroczy (1966) model. It was presented in graphical form originally;
Chisholm (1973) made the correlation non-graphical. The model is also shown in [3].
∆𝑃𝑡𝑝
= 𝜑2𝑐ℎ
∆𝑃𝑙𝑜
{︁ }︁
𝜑2𝑐ℎ = 1 + (Γ2 − 1) 𝐵𝑥(2−𝑛)/2 (1 − 𝑥)(2−𝑛)/2 + 𝑥2−𝑛
(︀ Δ𝑃 )︀
𝐿 𝑔𝑜
Γ2 = (︀ Δ𝑃 )︀
𝐿 𝑙𝑜
For Gamma < 9.5:
55
𝐵= 0.5
𝐺𝑡𝑝

For 9.5 < Gamma < 28:


520
𝐵=
Γ𝐺0.5
𝑡𝑝

458 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

For Gamma > 28:


15000
𝐵= 0.5
Γ2 𝐺𝑡𝑝
Parameters
m [float] Mass flow rate of fluid, [kg/s]
x [float] Quality of fluid, [-]
rhol [float] Liquid density, [kg/m^3]
rhog [float] Gas density, [kg/m^3]
mul [float] Viscosity of liquid, [Pa*s]
mug [float] Viscosity of gas, [Pa*s]
D [float] Diameter of pipe, [m]
roughness [float, optional] Roughness of pipe for use in calculating friction factor, [m]
L [float, optional] Length of pipe, [m]
Returns
dP [float] Pressure drop of the two-phase flow, [Pa]

Notes

Applicable for 0 < x < 1. n = 0.25, the exponent in the Blassius equation. The Chisholm_1973 function should
be used in preference to this.

References

[1], [2], [3]

Examples

>>> Baroczy_Chisholm(m=0.6, x=0.1, rhol=915., rhog=2.67, mul=180E-6,


... mug=14E-6, D=0.05, roughness=0.0, L=1.0)
1084.1489922923738

fluids.two_phase.Theissing(m, x, rhol, rhog, mul, mug, D, roughness=0.0, L=1.0)


Calculates two-phase pressure drop with the Theissing (1980) correlation as shown in [2] and [3].
[︁ ]︁𝑛𝜖
1/𝑛𝜖 1/𝜖 1/(𝑛𝜖) 1/𝜖
∆𝑃𝑡𝑝 = ∆𝑃𝑙𝑜 (1 − 𝑥) + ∆𝑃𝑔𝑜 𝑥
(︃ √︀ )︃0.7/𝑛
2 𝜌𝑙 /𝜌𝑔
𝜖=3−2
1 + 𝜌𝑙 /𝜌𝑔
0.1
𝑛1 + 𝑛2 (∆𝑃𝑔 /∆𝑃𝑙 )
𝑛= 0.1
1 + (∆𝑃𝑔 /∆𝑃𝑙 )
ln (∆𝑃𝑙 /∆𝑃𝑙𝑜 )
𝑛1 =
ln (1 − 𝑥)
ln (∆𝑃𝑔 /∆𝑃𝑔𝑜 )
𝑛2 =
ln 𝑥

2.23. Two phase flow (fluids.two_phase) 459


Fluids Documentation, Release 1.0.21

Parameters
m [float] Mass flow rate of fluid, [kg/s]
x [float] Quality of fluid, [-]
rhol [float] Liquid density, [kg/m^3]
rhog [float] Gas density, [kg/m^3]
mul [float] Viscosity of liquid, [Pa*s]
mug [float] Viscosity of gas, [Pa*s]
D [float] Diameter of pipe, [m]
roughness [float, optional] Roughness of pipe for use in calculating friction factor, [m]
L [float, optional] Length of pipe, [m]
Returns
dP [float] Pressure drop of the two-phase flow, [Pa]

Notes

Applicable for 0 < x < 1. Notable, as it can be used for two-phase liquid- liquid flow as well as liquid-gas flow.

References

[1], [2], [3]

Examples

>>> Theissing(m=0.6, x=.1, rhol=915., rhog=2.67, mul=180E-6, mug=14E-6,


... D=0.05, roughness=0.0, L=1.0)
497.6156370699538

fluids.two_phase.Muller_Steinhagen_Heck(m, x, rhol, rhog, mul, mug, D, roughness=0.0, L=1.0)


Calculates two-phase pressure drop with the Muller-Steinhagen and Heck (1986) correlation from [1], also in [2]
and [3].

∆𝑃𝑡𝑝 = 𝐺𝑀 𝑆𝐻 (1 − 𝑥)1/3 + ∆𝑃𝑔𝑜 𝑥3

𝐺𝑀 𝑆𝐻 = ∆𝑃𝑙𝑜 + 2 [∆𝑃𝑔𝑜 − ∆𝑃𝑙𝑜 ] 𝑥


Parameters
m [float] Mass flow rate of fluid, [kg/s]
x [float] Quality of fluid, [-]
rhol [float] Liquid density, [kg/m^3]
rhog [float] Gas density, [kg/m^3]
mul [float] Viscosity of liquid, [Pa*s]
mug [float] Viscosity of gas, [Pa*s]
D [float] Diameter of pipe, [m]

460 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

roughness [float, optional] Roughness of pipe for use in calculating friction factor, [m]
L [float, optional] Length of pipe, [m]
Returns
dP [float] Pressure drop of the two-phase flow, [Pa]

Notes

Applicable for 0 < x < 1. Developed to be easily integrated. The contribution of each term to the overall pressure
drop can be understood in this model.

References

[1], [2], [3]

Examples

>>> Muller_Steinhagen_Heck(m=0.6, x=0.1, rhol=915., rhog=2.67, mul=180E-6,


... mug=14E-6, D=0.05, roughness=0.0, L=1.0)
793.4465457435081

fluids.two_phase.Gronnerud(m, x, rhol, rhog, mul, mug, D, roughness=0.0, L=1.0)


Calculates two-phase pressure drop with the Gronnerud correlation as presented in [2], [3], and [4].

∆𝑃𝑓 𝑟𝑖𝑐𝑡𝑖𝑜𝑛 = ∆𝑃𝑔𝑑 𝜑2𝑙𝑜


⎡ ⎤
(︂ )︂ 𝜌𝑙
𝑑𝑃 𝜌𝑔
𝜑𝑔𝑑 = 1 + )︁0.25 − 1⎦
⎢ ⎥
𝑑𝐿
⎣ (︁
𝐹𝑟 𝜇𝑙
𝜇𝑔
(︂ )︂
𝑑𝑃
= 𝑓𝐹 𝑟 𝑥 + 4(𝑥1.8 − 𝑥10 𝑓𝐹0.5
[︀ ]︀
𝑟)
𝑑𝐿 𝐹𝑟
(︂ )︂2
1
𝑓𝐹 𝑟 = 𝐹 𝑟𝑙0.3 + 0.0055 ln
𝐹 𝑟𝑙
𝐺2𝑡𝑝
𝐹 𝑟𝑙 =
𝑔𝐷𝜌2𝑙
Parameters
m [float] Mass flow rate of fluid, [kg/s]
x [float] Quality of fluid, [-]
rhol [float] Liquid density, [kg/m^3]
rhog [float] Gas density, [kg/m^3]
mul [float] Viscosity of liquid, [Pa*s]
mug [float] Viscosity of gas, [Pa*s]
D [float] Diameter of pipe, [m]
roughness [float, optional] Roughness of pipe for use in calculating friction factor, [m]

2.23. Two phase flow (fluids.two_phase) 461


Fluids Documentation, Release 1.0.21

L [float, optional] Length of pipe, [m]


Returns
dP [float] Pressure drop of the two-phase flow, [Pa]

Notes

Developed for evaporators. Applicable from 0 < x < 1.


In the model, if Fr_l is more than 1, f_Fr is set to 1.

References

[1], [2], [3], [4]

Examples

>>> Gronnerud(m=0.6, x=0.1, rhol=915., rhog=2.67, mul=180E-6, mug=14E-6,


... D=0.05, roughness=0.0, L=1.0)
384.12541144474085

fluids.two_phase.Lombardi_Pedrocchi(m, x, rhol, rhog, sigma, D, L=1.0)


Calculates two-phase pressure drop with the Lombardi-Pedrocchi (1972) correlation from [1] as shown in [2]
and [3].

0.83𝐺1.4
𝑡𝑝 𝜎
0.4
𝐿
∆𝑃𝑡𝑝 = 0.866
𝐷1.2 𝜌ℎ

Parameters
m [float] Mass flow rate of fluid, [kg/s]
x [float] Quality of fluid, [-]
rhol [float] Liquid density, [kg/m^3]
rhog [float] Gas density, [kg/m^3]
sigma [float] Surface tension, [N/m]
D [float] Diameter of pipe, [m]
L [float, optional] Length of pipe, [m]
Returns
dP [float] Pressure drop of the two-phase flow, [Pa]

462 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

Notes

This is a purely empirical method. [3] presents a review of this and other correlations. It did not perform best,
but there were also correlations worse than it.

References

[1], [2], [3]

Examples

>>> Lombardi_Pedrocchi(m=0.6, x=0.1, rhol=915., rhog=2.67, sigma=0.045,


... D=0.05, L=1.0)
1567.328374498781

fluids.two_phase.Jung_Radermacher(m, x, rhol, rhog, mul, mug, D, roughness=0.0, L=1.0)


Calculates two-phase pressure drop with the Jung-Radermacher (1989) correlation, also shown in [2] and [3].

∆𝑃𝑡𝑝
= 𝜑2𝑡𝑝
∆𝑃𝑙𝑜
−1.47
𝜑2𝑡𝑝 = 12.82𝑋𝑡𝑡 (1 − 𝑥)1.8
Parameters
m [float] Mass flow rate of fluid, [kg/s]
x [float] Quality of fluid, [-]
rhol [float] Liquid density, [kg/m^3]
rhog [float] Gas density, [kg/m^3]
mul [float] Viscosity of liquid, [Pa*s]
mug [float] Viscosity of gas, [Pa*s]
D [float] Diameter of pipe, [m]
roughness [float, optional] Roughness of pipe for use in calculating friction factor, [m]
L [float, optional] Length of pipe, [m]
Returns
dP [float] Pressure drop of the two-phase flow, [Pa]

Notes

Applicable for 0 < x < 1. Developed for the annular flow regime in turbulent-turbulent flow.

2.23. Two phase flow (fluids.two_phase) 463


Fluids Documentation, Release 1.0.21

References

[1], [2], [3]

Examples

>>> Jung_Radermacher(m=0.6, x=0.1, rhol=915., rhog=2.67, mul=180E-6,


... mug=14E-6, D=0.05, roughness=0.0, L=1.0)
552.0686123725568

fluids.two_phase.Tran(m, x, rhol, rhog, mul, mug, sigma, D, roughness=0.0, L=1.0)


Calculates two-phase pressure drop with the Tran (2000) correlation, also shown in [2] and [3].

∆𝑃 = 𝑑𝑃𝑙𝑜 𝜑2𝑙𝑜

𝜑2𝑙𝑜 = 1 + (4.3Γ2 − 1)[Co · 𝑥0.875 (1 − 𝑥)0.875 + 𝑥1.75 ]


(︀ Δ𝑃 )︀
𝐿 𝑔𝑜
Γ2 = (︀ Δ𝑃 )︀
𝐿 𝑙𝑜
Parameters
m [float] Mass flow rate of fluid, [kg/s]
x [float] Quality of fluid, [-]
rhol [float] Liquid density, [kg/m^3]
rhog [float] Gas density, [kg/m^3]
mul [float] Viscosity of liquid, [Pa*s]
mug [float] Viscosity of gas, [Pa*s]
sigma [float] Surface tension, [N/m]
D [float] Diameter of pipe, [m]
roughness [float, optional] Roughness of pipe for use in calculating friction factor, [m]
L [float, optional] Length of pipe, [m]
Returns
dP [float] Pressure drop of the two-phase flow, [Pa]

Notes

Developed for boiling refrigerants in channels with hydraulic diameters of 2.4 mm to 2.92 mm.

464 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

References

[1], [2], [3]

Examples

>>> Tran(m=0.6, x=0.1, rhol=915., rhog=2.67, mul=180E-6, mug=14E-6,


... sigma=0.0487, D=0.05, roughness=0.0, L=1.0)
423.2563312951232

fluids.two_phase.Chen_Friedel(m, x, rhol, rhog, mul, mug, sigma, D, roughness=0.0, L=1.0)


Calculates two-phase pressure drop with the Chen modification of the Friedel correlation, as given in [1] and
also shown in [2] and [3].
∆𝑃 = ∆𝑃𝐹 𝑟𝑖𝑒𝑑𝑒𝑙 Ω
For Bo < 2.5:
0.0333𝑅𝑒0.45
𝑙𝑜
Ω=
𝑅𝑒𝑔0.09 (1 + 0.4 exp(−𝐵𝑜))
For Bo >= 2.5:
𝑊 𝑒0.2
Ω=
2.5 + 0.06𝐵𝑜
Parameters
m [float] Mass flow rate of fluid, [kg/s]
x [float] Quality of fluid, [-]
rhol [float] Liquid density, [kg/m^3]
rhog [float] Gas density, [kg/m^3]
mul [float] Viscosity of liquid, [Pa*s]
mug [float] Viscosity of gas, [Pa*s]
sigma [float] Surface tension, [N/m]
D [float] Diameter of pipe, [m]
roughness [float, optional] Roughness of pipe for use in calculating friction factor, [m]
L [float, optional] Length of pipe, [m]
Returns
dP [float] Pressure drop of the two-phase flow, [Pa]

Notes

Applicable ONLY to mini/microchannels; yields drastically too low pressure drops for larger channels. For more
details, see the Friedel correlation.
It is not explicitly stated in [1] how to calculate the liquid mixture density for use in calculation of Weber number;
the homogeneous model is assumed as it is used in the Friedel model.
The bond number used here is 1/4 the normal value, i.e.:
𝑔(𝜌𝑙 − 𝜌𝑔 )𝐷2
𝐵𝑜 =
4𝜎

2.23. Two phase flow (fluids.two_phase) 465


Fluids Documentation, Release 1.0.21

References

[1], [2], [3]

Examples

>>> Chen_Friedel(m=.0005, x=0.9, rhol=950., rhog=1.4, mul=1E-3, mug=1E-5,


... sigma=0.02, D=0.003, roughness=0.0, L=1.0)
6249.247540588871

fluids.two_phase.Zhang_Webb(m, x, rhol, mul, P, Pc, D, roughness=0.0, L=1.0)


Calculates two-phase pressure drop with the Zhang-Webb (2001) correlation as shown in [1] and also given in
[2].
(︂ )︂−1 (︂ )︂−1.64
𝑃 𝑃
𝜑2𝑙𝑜 = (1 − 𝑥)2 + 2.87𝑥2 + 1.68𝑥0.8 (1 − 𝑥)0.25
𝑃𝑐 𝑃𝑐

Parameters
m [float] Mass flow rate of fluid, [kg/s]
x [float] Quality of fluid, [-]
rhol [float] Liquid density, [kg/m^3]
mul [float] Viscosity of liquid, [Pa*s]
P [float] Pressure of fluid, [Pa]
Pc [float] Critical pressure of fluid, [Pa]
D [float] Diameter of pipe, [m]
roughness [float, optional] Roughness of pipe for use in calculating friction factor, [m]
L [float, optional] Length of pipe, [m]
Returns
dP [float] Pressure drop of the two-phase flow, [Pa]

Notes

Applicable for 0 < x < 1. Corresponding-states method developed with R-134A, R-22 and R-404A in tubes of
hydraulic diameters of 2.13 mm, 6.25 mm, and 3.25 mm. For the author’s 119 data points, the mean deviation
was 11.5%. Recommended for reduced pressures larger than 0.2 and tubes of diameter 1-7 mm.
Does not require known properties for the gas phase.

466 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

References

[1], [2]

Examples

>>> Zhang_Webb(m=0.6, x=0.1, rhol=915., mul=180E-6, P=2E5, Pc=4055000,


... D=0.05, roughness=0.0, L=1.0)
712.0999804205617

fluids.two_phase.Xu_Fang(m, x, rhol, rhog, mul, mug, sigma, D, roughness=0.0, L=1.0)


Calculates two-phase pressure drop with the Xu and Fang (2013) correlation. Developed after a comprehensive
review of available correlations, likely meaning it is quite accurate.

∆𝑃 = ∆𝑃𝑙𝑜 𝜑2𝑙𝑜

𝜑2𝑙𝑜 = 𝑌 2 𝑥3 + (1 − 𝑥2.59 )0.632 [1 + 2𝑥1.17 (𝑌 2 − 1) + 0.00775𝑥−0.475 𝐹 𝑟𝑡𝑝


0.535
𝑊 𝑒0.188
𝑡𝑝 ]
∆𝑃𝑔𝑜
𝑌2 =
∆𝑃𝑙𝑜
𝐺2𝑡𝑝
𝐹 𝑟𝑡𝑝 =
𝑔𝐷𝜌2𝑡𝑝
𝐺2𝑡𝑝 𝐷
𝑊 𝑒𝑡𝑝 =
𝜎𝜌𝑡𝑝
1 1−𝑥 𝑥
= +
𝜌𝑡𝑝 𝜌𝑙 𝜌𝑔
Parameters
m [float] Mass flow rate of fluid, [kg/s]
x [float] Quality of fluid, [-]
rhol [float] Liquid density, [kg/m^3]
rhog [float] Gas density, [kg/m^3]
mul [float] Viscosity of liquid, [Pa*s]
mug [float] Viscosity of gas, [Pa*s]
sigma [float] Surface tension, [N/m]
D [float] Diameter of pipe, [m]
roughness [float, optional] Roughness of pipe for use in calculating friction factor, [m]
L [float, optional] Length of pipe, [m]
Returns
dP [float] Pressure drop of the two-phase flow, [Pa]

2.23. Two phase flow (fluids.two_phase) 467


Fluids Documentation, Release 1.0.21

References

[1]

Examples

>>> Xu_Fang(m=0.6, x=0.1, rhol=915., rhog=2.67, mul=180E-6, mug=14E-6,


... sigma=0.0487, D=0.05, roughness=0.0, L=1.0)
604.0595632116267

fluids.two_phase.Yu_France(m, x, rhol, rhog, mul, mug, D, roughness=0.0, L=1.0)


Calculates two-phase pressure drop with the Yu, France, Wambsganss, and Hull (2002) correlation given in [1]
and reviewed in [2] and [3].

∆𝑃 = ∆𝑃𝑙 𝜑2𝑙

𝜑2𝑙 = 𝑋 −1.9
(︂ )︂0.5 (︂
1 − 𝑥 𝑅𝑒0.1
)︂
𝜌𝑔 𝑔
𝑋 = 18.65
𝜌𝑙 𝑥 𝑅𝑒0.5
𝑙
Parameters
m [float] Mass flow rate of fluid, [kg/s]
x [float] Quality of fluid, [-]
rhol [float] Liquid density, [kg/m^3]
rhog [float] Gas density, [kg/m^3]
mul [float] Viscosity of liquid, [Pa*s]
mug [float] Viscosity of gas, [Pa*s]
D [float] Diameter of pipe, [m]
roughness [float, optional] Roughness of pipe for use in calculating friction factor, [m]
L [float, optional] Length of pipe, [m]
Returns
dP [float] Pressure drop of the two-phase flow, [Pa]

References

[1], [2], [3]

Examples

>>> Yu_France(m=0.6, x=.1, rhol=915., rhog=2.67, mul=180E-6, mug=14E-6,


... D=0.05, roughness=0.0, L=1.0)
1146.9833225539571

468 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

fluids.two_phase.Wang_Chiang_Lu(m, x, rhol, rhog, mul, mug, D, roughness=0.0, L=1.0)


Calculates two-phase pressure drop with the Wang, Chiang, and Lu (1997) correlation given in [1] and reviewed
in [2] and [3].

∆𝑃 = ∆𝑃𝑔 𝜑2𝑔

𝜑2𝑔 = 1 + 9.397𝑋 0.62 + 0.564𝑋 2.45 for 𝐺 >= 200𝑘𝑔/𝑚2 /𝑠


𝜑2𝑔 = 1 + 𝐶𝑋 + 𝑋 2 for lower mass fluxes
(︂ )︂−2.15 (︂ )︂5.1
0.128 0.938 𝜌𝑙 𝜇𝑙
𝐶 = 0.000004566𝑋 𝑅𝑒𝑙𝑜
𝜌𝑔 𝜇𝑔
∆𝑃𝑙
𝑋2 =
∆𝑃𝑔
Parameters
m [float] Mass flow rate of fluid, [kg/s]
x [float] Quality of fluid, [-]
rhol [float] Liquid density, [kg/m^3]
rhog [float] Gas density, [kg/m^3]
mul [float] Viscosity of liquid, [Pa*s]
mug [float] Viscosity of gas, [Pa*s]
D [float] Diameter of pipe, [m]
roughness [float, optional] Roughness of pipe for use in calculating friction factor, [m]
L [float, optional] Length of pipe, [m]
Returns
dP [float] Pressure drop of the two-phase flow, [Pa]

References

[1], [2], [3]

Examples

>>> Wang_Chiang_Lu(m=0.6, x=0.1, rhol=915., rhog=2.67, mul=180E-6,


... mug=14E-6, D=0.05, roughness=0.0, L=1.0)
448.29981978639137

fluids.two_phase.Hwang_Kim(m, x, rhol, rhog, mul, mug, sigma, D, roughness=0.0, L=1.0)


Calculates two-phase pressure drop with the Hwang and Kim (2006) correlation as in [1], also presented in [2]
and [3].

∆𝑃 = ∆𝑃𝑙 𝜑2𝑙

𝐶 = 0.227𝑅𝑒0.452
𝑙𝑜 𝑋 −0.32 𝐶𝑜−0.82
𝐶 1
𝜑2𝑙 = 1 + + 2
𝑋 𝑋
2 ∆𝑃𝑙
𝑋 =
∆𝑃𝑔

2.23. Two phase flow (fluids.two_phase) 469


Fluids Documentation, Release 1.0.21

Parameters
m [float] Mass flow rate of fluid, [kg/s]
x [float] Quality of fluid, [-]
rhol [float] Liquid density, [kg/m^3]
rhog [float] Gas density, [kg/m^3]
mul [float] Viscosity of liquid, [Pa*s]
mug [float] Viscosity of gas, [Pa*s]
sigma [float] Surface tension, [N/m]
D [float] Diameter of pipe, [m]
roughness [float, optional] Roughness of pipe for use in calculating friction factor, [m]
L [float, optional] Length of pipe, [m]
Returns
dP [float] Pressure drop of the two-phase flow, [Pa]

Notes

Developed with data for microtubes of diameter 0.244 mm and 0.792 mm only. Not likely to be suitable to larger
diameters.

References

[1], [2], [3]

Examples

>>> Hwang_Kim(m=0.0005, x=0.1, rhol=915., rhog=2.67, mul=180E-6, mug=14E-6,


... sigma=0.0487, D=0.003, roughness=0.0, L=1.0)
798.302774184557

fluids.two_phase.Zhang_Hibiki_Mishima(m, x, rhol, rhog, mul, mug, sigma, D, roughness=0.0, L=1.0,


flowtype='adiabatic vapor')
Calculates two-phase pressure drop with the Zhang, Hibiki, Mishima and (2010) correlation as in [1], also pre-
sented in [2] and [3].

∆𝑃 = ∆𝑃𝑙 𝜑2𝑙

𝐶 1
𝜑2𝑙 = 1 + + 2
𝑋 𝑋
∆𝑃𝑙
𝑋2 =
∆𝑃𝑔
For adiabatic liquid-vapor two-phase flow:

𝐶 = 21[1 − exp(−0.142/𝐶𝑜)]

470 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

For adiabatic liquid-gas two-phase flow:

𝐶 = 21[1 − exp(−0.674/𝐶𝑜)]

For flow boiling:

𝐶 = 21[1 − exp(−0.358/𝐶𝑜)]

Parameters
m [float] Mass flow rate of fluid, [kg/s]
x [float] Quality of fluid, [-]
rhol [float] Liquid density, [kg/m^3]
rhog [float] Gas density, [kg/m^3]
mul [float] Viscosity of liquid, [Pa*s]
mug [float] Viscosity of gas, [Pa*s]
sigma [float] Surface tension, [N/m]
D [float] Diameter of pipe, [m]
roughness [float, optional] Roughness of pipe for use in calculating friction factor, [m]
L [float, optional] Length of pipe, [m]
flowtype [str] One of ‘adiabatic vapor’, ‘adiabatic gas’, or ‘flow boiling’
Returns
dP [float] Pressure drop of the two-phase flow, [Pa]

Notes

Seems fairly reliable.

References

[1], [2], [3]

Examples

>>> Zhang_Hibiki_Mishima(m=0.0005, x=0.1, rhol=915., rhog=2.67, mul=180E-6,


... mug=14E-6, sigma=0.0487, D=0.003, roughness=0.0, L=1.0)
444.9718476894804

fluids.two_phase.Mishima_Hibiki(m, x, rhol, rhog, mul, mug, sigma, D, roughness=0.0, L=1.0)


Calculates two-phase pressure drop with the Mishima and Hibiki (1996) correlation as in [1], also presented in
[2] and [3].

∆𝑃 = ∆𝑃𝑙 𝜑2𝑙

𝐶 = 21[1 − exp(−319𝐷)]
𝐶 1
𝜑2𝑙 = 1 + + 2
𝑋 𝑋

2.23. Two phase flow (fluids.two_phase) 471


Fluids Documentation, Release 1.0.21

∆𝑃𝑙
𝑋2 =
∆𝑃𝑔
Parameters
m [float] Mass flow rate of fluid, [kg/s]
x [float] Quality of fluid, [-]
rhol [float] Liquid density, [kg/m^3]
rhog [float] Gas density, [kg/m^3]
mul [float] Viscosity of liquid, [Pa*s]
mug [float] Viscosity of gas, [Pa*s]
sigma [float] Surface tension, [N/m]
D [float] Diameter of pipe, [m]
roughness [float, optional] Roughness of pipe for use in calculating friction factor, [m]
L [float, optional] Length of pipe, [m]
Returns
dP [float] Pressure drop of the two-phase flow, [Pa]

References

[1], [2], [3]

Examples

>>> Mishima_Hibiki(m=0.6, x=0.1, rhol=915., rhog=2.67, mul=180E-6,


... mug=14E-6, sigma=0.0487, D=0.05, roughness=0.0, L=1.0)
732.4268200606265

fluids.two_phase.Bankoff(m, x, rhol, rhog, mul, mug, D, roughness=0.0, L=1.0)


Calculates two-phase pressure drop with the Bankoff (1960) correlation, as shown in [2], [3], and [4].
7/4
∆𝑃𝑡𝑝 = 𝜑𝑙 ∆𝑃𝑙
[︂ (︂ )︂]︂3/7 [︂ (︂ )︂]︂
1 𝜌𝑔 𝜌𝑙
𝜑𝑙 = 1−𝛾 1− 1+𝑥 −1
1−𝑥 𝜌𝑙 𝜌𝑔
(︁ )︁
𝜌
0.71 + 2.35 𝜌𝑔𝑙
𝛾= 𝜌𝑔
1 + 1−𝑥𝑥 · 𝜌𝑙

Parameters
m [float] Mass flow rate of fluid, [kg/s]
x [float] Quality of fluid, [-]
rhol [float] Liquid density, [kg/m^3]
rhog [float] Gas density, [kg/m^3]
mul [float] Viscosity of liquid, [Pa*s]
mug [float] Viscosity of gas, [Pa*s]

472 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

D [float] Diameter of pipe, [m]


roughness [float, optional] Roughness of pipe for use in calculating friction factor, [m]
L [float, optional] Length of pipe, [m]
Returns
dP [float] Pressure drop of the two-phase flow, [Pa]

Notes

This correlation is not actually shown in [1]. Its origin is unknown. The author recommends against using this.

References

[1], [2], [3], [4]

Examples

>>> Bankoff(m=0.6, x=0.1, rhol=915., rhog=2.67, mul=180E-6, mug=14E-6,


... D=0.05, roughness=0.0, L=1.0)
4746.0594424533965

2.23.3 Two Phase Flow Regime Correlations

fluids.two_phase.Mandhane_Gregory_Aziz_regime(m, x, rhol, rhog, mul, mug, sigma, D)


Classifies the regime of a two-phase flow according to Mandhane, Gregory, and Azis (1974) flow map.
The flow regimes in this method are ‘elongated bubble’, ‘stratified’, ‘annular mist’, ‘slug’, ‘dispersed bubble’,
and ‘wave’.
The parameters used are just the superficial liquid and gas velocity (i.e. if only the mass flow of that phase were
flowing in the pipe).
Parameters
m [float] Mass flow rate of fluid, [kg/s]
x [float] Mass quality of fluid, [-]
rhol [float] Liquid density, [kg/m^3]
rhog [float] Gas density, [kg/m^3]
mul [float] Viscosity of liquid, [Pa*s]
mug [float] Viscosity of gas, [Pa*s]
sigma [float] Surface tension, [N/m]
D [float] Diameter of pipe, [m]
Returns
regime [str] One of ‘elongated bubble’, ‘stratified’, ‘annular mist’, ‘slug’, ‘dispersed bubble’, or
‘wave’, [-]
v_gs [float] The superficial gas velocity in the pipe (x axis coordinate), [ft/s]

2.23. Two phase flow (fluids.two_phase) 473


Fluids Documentation, Release 1.0.21

v_ls [float] The superficial liquid velocity in the pipe (x axis coordinate), [ft/s]

Notes

[1] contains a Fortran implementation of this model, which this has been validated against. This is a very fast
flow map as all transitions were spelled out with clean transitions.

References

[1]

Examples

>>> Mandhane_Gregory_Aziz_regime(m=0.6, x=0.112, rhol=915.12, rhog=2.67,


... mul=180E-6, mug=14E-6, sigma=0.065, D=0.05)
('slug', 0.9728397701853173, 42.05456634236875)

fluids.two_phase.Taitel_Dukler_regime(m, x, rhol, rhog, mul, mug, D, angle, roughness=0.0, g=9.80665)


Classifies the regime of a two-phase flow according to Taitel and Dukler (1976) ([1], [2]).
The flow regimes in this method are ‘annular’, ‘bubbly’, ‘intermittent’, ‘stratified wavy’, and ‘stratified smooth’.
The four dimensionless parameters used are ‘X’, ‘T’, ‘F’, and ‘K’.
[︂ ]︂0.5
(𝑑𝑃/𝑑𝐿)𝑙,𝑠,𝑓
𝑋=
(𝑑𝑃/𝑑𝐿)𝑔,𝑠,𝑓
[︂ ]︂0.5
(𝑑𝑃/𝑑𝐿)𝑙,𝑠,𝑓
𝑇 =
(𝜌𝑙 − 𝜌𝑔 )𝑔 cos 𝜃
𝜌𝑔 𝑣
√︂
𝐹 = √ 𝑔,𝑠
(𝜌𝑙 − 𝜌𝑔 ) 𝐷𝑔 cos 𝜃
[︂ ]︂0.5
𝐷𝑣𝑙,𝑠 √︀
𝐾=𝐹 = 𝐹 𝑅𝑒𝑙,𝑠
𝜈𝑙
Note that ‘l’ refers to liquid, ‘g’ gas, ‘f’ friction-only, and ‘s’ superficial (i.e. if only the mass flow of that phase
were flowing in the pipe).
Parameters
m [float] Mass flow rate of fluid, [kg/s]
x [float] Mass quality of fluid, [-]
rhol [float] Liquid density, [kg/m^3]
rhog [float] Gas density, [kg/m^3]
mul [float] Viscosity of liquid, [Pa*s]
mug [float] Viscosity of gas, [Pa*s]
D [float] Diameter of pipe, [m]
angle [float] The angle of the pipe with respect to the horizontal, [degrees]
roughness [float, optional] Roughness of pipe for use in calculating friction factor, [m]

474 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

g [float, optional] Acceleration due to gravity, [m/s^2]


Returns
regime [str] One of ‘annular’, ‘bubbly’, ‘intermittent’, ‘stratified wavy’, ‘stratified smooth’, [-]
X [float] X dimensionless group used in the calculation, [-]
T [float] T dimensionless group used in the calculation, [-]
F [float] F dimensionless group used in the calculation, [-]
K [float] K dimensionless group used in the calculation, [-]

Notes

The original friction factor used in this model is that of Blasius.

References

[1], [2], [3]

Examples

>>> Taitel_Dukler_regime(m=0.6, x=0.112, rhol=915.12, rhog=2.67,


... mul=180E-6, mug=14E-6, D=0.05, roughness=0.0, angle=0)[0]
'annular'

2.24 Two-phase flow voidage (fluids.two_phase_voidage)

This module contains functions for calculating void fraction/holdup in two-phase flow. This is an important parameter
for predicting pressure drop. Also included are empirical “two phase viscosity” definitions which do not have a physical
meaning but are often used in pressure drop correlations.
For reporting bugs, adding feature requests, or submitting pull requests, please use the GitHub issue tracker or contact
the author at Caleb.Andrew.Bell@gmail.com.

• Interfaces
• Void Fraction/Holdup Correlations
• Utilities
• Gas/Liquid Viscosity

2.24. Two-phase flow voidage (fluids.two_phase_voidage) 475


Fluids Documentation, Release 1.0.21

2.24.1 Interfaces

fluids.two_phase_voidage.liquid_gas_voidage(x, rhol, rhog, D=None, m=None, mul=None, mug=None,


sigma=None, P=None, Pc=None, angle=0, g=9.80665,
Method=None)
This function handles calculation of two-phase liquid-gas voidage for flow inside channels. 29 calculation meth-
ods are available, with varying input requirements. A correlation will be automatically selected if none is speci-
fied.
This function is used to calculate the (liquid) holdup as well, as:

holdup = 1 − voidage

If no correlation is selected, the following rules are used, with the earlier options attempted first:
• TODO: defaults

Parameters
x [float] Quality of fluid, [-]
rhol [float] Liquid density, [kg/m^3]
rhog [float] Gas density, [kg/m^3]
D [float, optional] Diameter of pipe, [m]
m [float, optional] Mass flow rate of fluid, [kg/s]
mul [float, optional] Viscosity of liquid, [Pa*s]
mug [float, optional] Viscosity of gas, [Pa*s]
sigma [float, optional] Surface tension, [N/m]
P [float, optional] Pressure of fluid, [Pa]
Pc [float, optional] Critical pressure of fluid, [Pa]
angle [float, optional] Angle of the channel with respect to the horizontal (vertical = 90), [de-
grees]
g [float, optional] Acceleration due to gravity, [m/s^2]
Returns
alpha [float] Void fraction (area of gas / total area of channel), [-]
Other Parameters
Method [string, optional] A string of the function name to use, as in the dictionary
two_phase_voidage_correlations.

Examples

>>> liquid_gas_voidage(m=0.6, x=0.1, rhol=915., rhog=2.67, mul=180E-6, mug=14E-6,


... sigma=0.0487, D=0.05)
0.9744097632663492

476 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

fluids.two_phase_voidage.liquid_gas_voidage_methods(x, rhol, rhog, D=None, m=None, mul=None,


mug=None, sigma=None, P=None, Pc=None,
angle=0.0, g=9.80665, check_ranges=False)
This function returns a list of liquid-gas voidage correlation names which can perform the calculation with the
provided inputs. The holdup is for two-phase liquid-gas flow inside channels. 29 calculation methods are avail-
able, with varying input requirements.
Parameters
x [float] Quality of fluid, [-]
rhol [float] Liquid density, [kg/m^3]
rhog [float] Gas density, [kg/m^3]
D [float, optional] Diameter of pipe, [m]
m [float, optional] Mass flow rate of fluid, [kg/s]
mul [float, optional] Viscosity of liquid, [Pa*s]
mug [float, optional] Viscosity of gas, [Pa*s]
sigma [float, optional] Surface tension, [N/m]
P [float, optional] Pressure of fluid, [Pa]
Pc [float, optional] Critical pressure of fluid, [Pa]
angle [float, optional] Angle of the channel with respect to the horizontal (vertical = 90), [de-
grees]
g [float, optional] Acceleration due to gravity, [m/s^2]
check_ranges [bool, optional] Added for future use only
Returns
methods [list, only returned if AvailableMethods == True] List of methods which can be used
to calculate two-phase liquid-gas voidage with the given inputs.

Examples

>>> len(liquid_gas_voidage_methods(m=0.6, x=0.1, rhol=915., rhog=2.67, mul=180E-6,␣


˓→mug=14E-6, sigma=0.0487, D=0.05))

27

fluids.two_phase_voidage.density_two_phase(alpha, rhol, rhog)


Calculates the “effective” density of fluid in a liquid-gas flow. If the weight of fluid in a pipe pipe could be mea-
sured and the volume of the pipe were known, an effective density of the two-phase mixture could be calculated.
This is directly relatable to the void fraction of the pipe, a parameter used to predict the pressure drop. This
function converts void fraction to effective two-phase density.

𝜌𝑚 = 𝛼𝜌𝑔 + (1 − 𝛼)𝜌𝑙

Parameters
alpha [float] Void fraction (area of gas / total area of channel), [-]
rhol [float] Density of the liquid [kg/m^3]
rhog [float] Density of the gas [kg/m^3]

2.24. Two-phase flow voidage (fluids.two_phase_voidage) 477


Fluids Documentation, Release 1.0.21

Returns
rho_lg [float] Two-phase effective density [kg/m^3]

Notes

THERE IS NO THERMODYNAMIC DEFINITION FOR THIS QUANTITY. DO NOT USE THIS


VALUE IN SINGLE-PHASE CORRELATIONS.

References

[1]

Examples

>>> density_two_phase(.4, 800, 2.5)


481.0

fluids.two_phase_voidage.gas_liquid_viscosity(x, mul, mug, rhol=None, rhog=None, Method=None)


This function handles the calculation of two-phase liquid-gas viscosity. Six calculation methods are available;
three of them require only x, mul, and mug; the other three require rhol and rhog as well.
The ‘McAdams’ method will be used if no method is specified. The full list of correlation can be obtained with
the AvailableMethods flag.
ALL OF THESE METHODS ARE ONLY SUGGESTED DEFINITIONS, POTENTIALLY USEFUL
FOR EMPIRICAL WORK ONLY!
Parameters
x [float] Quality of fluid, [-]
mul [float] Viscosity of liquid, [Pa*s]
mug [float] Viscosity of gas, [Pa*s]
rhol [float, optional] Liquid density, [kg/m^3]
rhog [float, optional] Gas density, [kg/m^3]
Returns
mu_lg [float] Liquid-gas viscosity (a suggested definition, potentially useful for empirical
work only!) [Pa*s]
Other Parameters
Method [string, optional] A string of the function name to use, as in the dictionary liq-
uid_gas_viscosity_correlations.

478 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

Notes

All of these models converge to the liquid or gas viscosity as the quality approaches either limits. Other definitions
have been proposed, such as using only liquid viscosity.
These values cannot just be plugged into single phase correlations!

Examples

>>> gas_liquid_viscosity(x=0.4, mul=1E-3, mug=1E-5, rhol=850, rhog=1.2, Method=


˓→'Duckler')

1.2092040385066917e-05
>>> gas_liquid_viscosity(x=0.4, mul=1E-3, mug=1E-5)
2.4630541871921184e-05

fluids.two_phase_voidage.gas_liquid_viscosity_methods(rhol=None, rhog=None,
check_ranges=False)
This function returns a list of methods which can be used for calculating two-phase liquid-gas viscosity. Six
calculation methods are available; three of them require only x, mul, and mug; the other three require rhol and
rhog as well.
Parameters
rhol [float, optional] Liquid density, [kg/m^3]
rhog [float, optional] Gas density, [kg/m^3]
check_ranges [bool, optional] Added for compatibility only, never used
Returns
methods [list] List of methods which can be used to calculate two-phase liquid-gas viscosity
with the given inputs.

Examples

>>> gas_liquid_viscosity_methods()
['McAdams', 'Cicchitti', 'Lin Kwok']
>>> gas_liquid_viscosity_methods(rhol=1000, rhog=2)
['Beattie Whalley', 'Fourar Bories', 'Duckler', 'McAdams', 'Cicchitti', 'Lin Kwok']

2.24.2 Void Fraction/Holdup Correlations

fluids.two_phase_voidage.Thom(x, rhol, rhog, mul, mug)


Calculates void fraction in two-phase flow according to the model of [1] as given in [2].
[︃ (︂ )︂ (︂ )︂0.89 (︂ )︂0.18 ]︃−1
1−𝑥 𝜌𝑔 𝜇𝑙
𝛼= 1+
𝑥 𝜌𝑙 𝜇𝑔

Parameters
x [float] Quality at the specific tube interval []
rhol [float] Density of the liquid [kg/m^3]

2.24. Two-phase flow voidage (fluids.two_phase_voidage) 479


Fluids Documentation, Release 1.0.21

rhog [float] Density of the gas [kg/m^3]


mul [float] Viscosity of liquid [Pa*s]
mug [float] Viscosity of gas [Pa*s]
Returns
alpha [float] Void fraction (area of gas / total area of channel), [-]

Notes

Based on experimental data for boiling of water. [3] presents a slightly different model. However, its results are
almost identical. A comparison can be found in the unit tests. Neither expression was found in [1] in a brief
review.

References

[1], [2], [3]

Examples

>>> Thom(.4, 800, 2.5, 1E-3, 1E-5)


0.9801482164042417

fluids.two_phase_voidage.Zivi(x, rhol, rhog)


Calculates void fraction in two-phase flow according to the model of [1] as given in [2] and [3].
[︃ (︂ )︂ (︂ )︂2/3 ]︃−1
1−𝑥 𝜌𝑔
𝛼= 1+
𝑥 𝜌𝑙

Parameters
x [float] Quality at the specific tube interval []
rhol [float] Density of the liquid [kg/m^3]
rhog [float] Density of the gas [kg/m^3]
Returns
alpha [float] Void fraction (area of gas / total area of channel), [-]

Notes

Based on experimental data for boiling of water. More complicated variants of this are also in [1].

480 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

References

[1], [2], [3]

Examples

>>> Zivi(.4, 800, 2.5)


0.9689339909056356

fluids.two_phase_voidage.Smith(x, rhol, rhog)


Calculates void fraction in two-phase flow according to the model of [1], also given in [2] and [3].

(︀ 1−𝑥 )︀ ⎪−1
⎧ ⎡ ⎯ ⎤⎫
⎸ 𝜌𝑙
+ 𝐾
⎪ (︂ )︂ (︂ )︂
⎨ 1−𝑥 𝜌𝑔 ⎢ ⎸
⎷ 𝜌𝑔 𝑥

𝛼= 1+ ⎣𝐾 + (1 − 𝐾) (︀ 1−𝑥 )︀ ⎥
𝑥 𝜌𝑙 1+𝐾 𝑥


⎩ ⎪

Parameters
x [float] Quality at the specific tube interval []
rhol [float] Density of the liquid [kg/m^3]
rhog [float] Density of the gas [kg/m^3]
Returns
alpha [float] Void fraction (area of gas / total area of channel), [-]

Notes

[1] is an easy to read paper and has been reviewed. The form of the expression here is rearranged somewhat
differently than in [1] but has been verified to be numerically equivalent. The form of this in [3] is missing a
square root on a bracketed term; this appears in multiple papers by the authors.

References

[1], [2], [3]

Examples

>>> Smith(.4, 800, 2.5)


0.959981235534199

fluids.two_phase_voidage.Fauske(x, rhol, rhog)


Calculates void fraction in two-phase flow according to the model of [1], as given in [2] and [3].
[︃ (︂ )︂ (︂ )︂0.5 ]︃−1
1−𝑥 𝜌𝑔
𝛼= 1+
𝑥 𝜌𝑙

Parameters
x [float] Quality at the specific tube interval []
rhol [float] Density of the liquid [kg/m^3]

2.24. Two-phase flow voidage (fluids.two_phase_voidage) 481


Fluids Documentation, Release 1.0.21

rhog [float] Density of the gas [kg/m^3]


Returns
alpha [float] Void fraction (area of gas / total area of channel), [-]

Notes

[1] has not been reviewed. However, both [2] and [3] present it the same way.

References

[1], [2], [3]

Examples

>>> Fauske(.4, 800, 2.5)


0.9226347262627932

fluids.two_phase_voidage.Chisholm_voidage(x, rhol, rhog)


Calculates void fraction in two-phase flow according to the model of [1], as given in [2] and [3].
[︃ (︂ )︂ (︂ )︂ √︃ (︂ )︂]︃−1
1−𝑥 𝜌𝑔 𝜌𝑙
𝛼= 1+ 1−𝑥 1−
𝑥 𝜌𝑙 𝜌𝑔

Parameters
x [float] Quality at the specific tube interval []
rhol [float] Density of the liquid [kg/m^3]
rhog [float] Density of the gas [kg/m^3]
Returns
alpha [float] Void fraction (area of gas / total area of channel), [-]

Notes

[1] has not been reviewed. However, both [2] and [3] present it the same way.

References

[1], [2], [3]

482 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

Examples

>>> Chisholm_voidage(.4, 800, 2.5)


0.949525900374774

fluids.two_phase_voidage.Turner_Wallis(x, rhol, rhog, mul, mug)


Calculates void fraction in two-phase flow according to the model of [1], as given in [2] and [3].
[︃ (︂ )︂0.72 (︂ )︂0.4 (︂ )︂0.08 ]︃−1
1−𝑥 𝜌𝑔 𝜇𝑙
𝛼= 1+
𝑥 𝜌𝑙 𝜇𝑔

Parameters
x [float] Quality at the specific tube interval []
rhol [float] Density of the liquid [kg/m^3]
rhog [float] Density of the gas [kg/m^3]
mul [float] Viscosity of liquid [Pa*s]
mug [float] Viscosity of gas [Pa*s]
Returns
alpha [float] Void fraction (area of gas / total area of channel), [-]

Notes

[1] has not been reviewed. However, both [2] and [3] present it the same way, if slightly differently rearranged.

References

[1], [2], [3]

Examples

>>> Turner_Wallis(.4, 800, 2.5, 1E-3, 1E-5)


0.8384824581634625

fluids.two_phase_voidage.homogeneous(x, rhol, rhog)


Calculates void fraction in two-phase flow according to the homogeneous flow model, reviewed in [1], [2], and
[3].
1
𝛼= (︀ 1−𝑥 )︀ 𝜌𝑔
1+ 𝑥 𝜌𝑙

Parameters
x [float] Quality at the specific tube interval []
rhol [float] Density of the liquid [kg/m^3]
rhog [float] Density of the gas [kg/m^3]
Returns
alpha [float] Void fraction (area of gas / total area of channel), [-]

2.24. Two-phase flow voidage (fluids.two_phase_voidage) 483


Fluids Documentation, Release 1.0.21

References

[1], [2], [3]

Examples

>>> homogeneous(.4, 800, 2.5)


0.995334370139969

fluids.two_phase_voidage.Chisholm_Armand(x, rhol, rhog)


Calculates void fraction in two-phase flow according to the model presented in [1] based on that of [2] as shown
in [3], [4], and [5].
𝛼ℎ
𝛼=
𝛼ℎ + (1 − 𝛼ℎ )0.5

Parameters
x [float] Quality at the specific tube interval []
rhol [float] Density of the liquid [kg/m^3]
rhog [float] Density of the gas [kg/m^3]
Returns
alpha [float] Void fraction (area of gas / total area of channel), [-]

References

[1], [2], [3], [4], [5]

Examples

>>> Chisholm_Armand(.4, 800, 2.5)


0.9357814394262114

fluids.two_phase_voidage.Armand(x, rhol, rhog)


Calculates void fraction in two-phase flow according to the model presented in [1] as shown in [2], [3], and [4].

𝛼 = 0.833𝛼ℎ

Parameters
x [float] Quality at the specific tube interval []
rhol [float] Density of the liquid [kg/m^3]
rhog [float] Density of the gas [kg/m^3]
Returns
alpha [float] Void fraction (area of gas / total area of channel), [-]

484 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

References

[1], [2], [3], [4]

Examples

>>> Armand(.4, 800, 2.5)


0.8291135303265941

fluids.two_phase_voidage.Nishino_Yamazaki(x, rhol, rhog)


Calculates void fraction in two-phase flow according to the model presented in [1] as shown in [2].
(︂ )︂0.5
1 − 𝑥 𝜌𝑔
𝛼=1− 𝛼ℎ0.5
𝑥 𝜌𝑙

Parameters
x [float] Quality at the specific tube interval []
rhol [float] Density of the liquid [kg/m^3]
rhog [float] Density of the gas [kg/m^3]
Returns
alpha [float] Void fraction (area of gas / total area of channel), [-]

Notes

[1] is in Japanese.
[3] either shows this model as iterative in terms of voidage, or forgot to add a H subscript to its second voidage
term; the second is believed more likely.

References

[1], [2], [3]

Examples

>>> Nishino_Yamazaki(.4, 800, 2.5)


0.931694583962682

fluids.two_phase_voidage.Guzhov(x, rhol, rhog, m, D)


Calculates void fraction in two-phase flow according to the model in [1] as shown in [2] and [3].
√︀
𝛼 = 0.81[1 − exp(−2.2 𝐹 𝑟𝑡𝑝 )]𝛼ℎ
𝐺2𝑡𝑝
𝐹 𝑟𝑡𝑝 =
𝑔𝐷𝜌2𝑡𝑝
(︂ )︂−1
1−𝑥 𝑥
𝜌𝑡𝑝 = +
𝜌𝑙 𝜌𝑔

Parameters

2.24. Two-phase flow voidage (fluids.two_phase_voidage) 485


Fluids Documentation, Release 1.0.21

x [float] Quality at the specific tube interval []


rhol [float] Density of the liquid [kg/m^3]
rhog [float] Density of the gas [kg/m^3]
m [float] Mass flow rate of both phases, [kg/s]
D [float] Diameter of the channel, [m]
Returns
alpha [float] Void fraction (area of gas / total area of channel), [-]

References

[1], [2], [3]

Examples

>>> Guzhov(.4, 800, 2.5, 1, .3)


0.7626030108534588

fluids.two_phase_voidage.Kawahara(x, rhol, rhog, D)


Calculates void fraction in two-phase flow according to the model presented in [1], also reviewed in [2] and [3].
This expression is for microchannels.

𝐶1 𝛼ℎ0.5
𝛼=
1 − 𝐶2 𝛼ℎ0.5

Parameters
x [float] Quality at the specific tube interval []
rhol [float] Density of the liquid [kg/m^3]
rhog [float] Density of the gas [kg/m^3]
D [float] Diameter of the channel, [m]
Returns
alpha [float] Void fraction (area of gas / total area of channel), [-]

Notes

C1 and C2 were constants for different diameters. Only diameters of 100 and 50 mircometers were studied in
[1]. Here, the coefficients are distributed for three ranges, > 250 micrometers, 250-75 micrometers, and < 75
micrometers.
The Armand model is used for the first, C1 and C2 are 0.03 and 0.97 for the second, and C1 and C2 are 0.02 and
0.98 for the third.

486 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

References

[1], [2], [3]

Examples

>>> Kawahara(.4, 800, 2.5, 100E-6)


0.9276148194410238

fluids.two_phase_voidage.Baroczy(x, rhol, rhog, mul, mug)


Calculates void fraction in two-phase flow according to the model of [1] as given in [2], [3], and [4].
[︃ (︂ )︂0.74 (︂ )︂0.65 (︂ )︂0.13 ]︃−1
1−𝑥 𝜌𝑔 𝜇𝑙
𝛼= 1+
𝑥 𝜌𝑙 𝜇𝑔

Parameters
x [float] Quality at the specific tube interval []
rhol [float] Density of the liquid [kg/m^3]
rhog [float] Density of the gas [kg/m^3]
mul [float] Viscosity of liquid [Pa*s]
mug [float] Viscosity of gas [Pa*s]
Returns
alpha [float] Void fraction (area of gas / total area of channel), [-]

References

[1], [2], [3], [4]

Examples

>>> Baroczy(.4, 800, 2.5, 1E-3, 1E-5)


0.9453544598460807

fluids.two_phase_voidage.Tandon_Varma_Gupta(x, rhol, rhog, mul, mug, m, D)


Calculates void fraction in two-phase flow according to the model of [1] also given in [2], [3], and [4].
For 50 < Rel < 1125:

𝛼 = 1 − 1.928𝑅𝑒𝑙−0.315 [𝐹 (𝑋𝑡𝑡 )]−1 + 0.9293𝑅𝑒𝑙−0.63 [𝐹 (𝑋𝑡𝑡 )]−2

For Rel > 1125:

𝛼 = 1 − 0.38𝑅𝑒−0.088
𝑙 [𝐹 (𝑋𝑡𝑡 )]−1 + 0.0361𝑅𝑒𝑙−0.176 [𝐹 (𝑋𝑡𝑡 )]−2

−1 −0.476
𝐹 (𝑋𝑡𝑡 ) = 0.15[𝑋𝑡𝑡 + 2.85𝑋𝑡𝑡 ]
Parameters
x [float] Quality at the specific tube interval []

2.24. Two-phase flow voidage (fluids.two_phase_voidage) 487


Fluids Documentation, Release 1.0.21

rhol [float] Density of the liquid [kg/m^3]


rhog [float] Density of the gas [kg/m^3]
mul [float] Viscosity of liquid [Pa*s]
mug [float] Viscosity of gas [Pa*s]
m [float] Mass flow rate of both phases, [kg/s]
D [float] Diameter of the channel, [m]
Returns
alpha [float] Void fraction (area of gas / total area of channel), [-]

Notes

[1] does not specify how it defines the liquid Reynolds number. [2] disagrees with [3] and [4]; the later variant
was selected, with:
𝐺𝑡𝑝 𝐷
𝑅𝑒𝑙 =
𝜇𝑙
The lower limit on Reynolds number is not enforced.

References

[1], [2], [3], [4]

Examples

>>> Tandon_Varma_Gupta(.4, 800, 2.5, 1E-3, 1E-5, m=1, D=0.3)


0.9228265670341428

fluids.two_phase_voidage.Harms(x, rhol, rhog, mul, mug, m, D)


Calculates void fraction in two-phase flow according to the model of [1] also given in [2] and [3].
[︃ (︂ )︂−0.5 ]︃2
7.242
𝛼 = 1 − 10.06𝑅𝑒𝑙−0.875 (1.74 + 0.104𝑅𝑒0.5
𝑙 )
2
1.376 + 1.655
𝑋𝑡𝑡

𝐺𝑡𝑝 (1 − 𝑥)𝐷
𝑅𝑒𝑙 =
𝜇𝑙
Parameters
x [float] Quality at the specific tube interval []
rhol [float] Density of the liquid [kg/m^3]
rhog [float] Density of the gas [kg/m^3]
mul [float] Viscosity of liquid [Pa*s]
mug [float] Viscosity of gas [Pa*s]
m [float] Mass flow rate of both phases, [kg/s]
D [float] Diameter of the channel, [m]

488 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

Returns
alpha [float] Void fraction (area of gas / total area of channel), [-]

Notes

[1] has been reviewed.

References

[1], [2], [3]

Examples

>>> Harms(.4, 800, 2.5, 1E-3, 1E-5, m=1, D=0.3)


0.9653289762907554

fluids.two_phase_voidage.Domanski_Didion(x, rhol, rhog, mul, mug)


Calculates void fraction in two-phase flow according to the model of [1] also given in [2] and [3].
if Xtt < 10:
0.8 −0.378
𝛼 = (1 + 𝑋𝑡𝑡 )

Otherwise:

𝛼 = 0.823 − 0.157 ln(𝑋𝑡𝑡 )

Parameters
x [float] Quality at the specific tube interval []
rhol [float] Density of the liquid [kg/m^3]
rhog [float] Density of the gas [kg/m^3]
mul [float] Viscosity of liquid [Pa*s]
mug [float] Viscosity of gas [Pa*s]
Returns
alpha [float] Void fraction (area of gas / total area of channel), [-]

Notes

[1] has been reviewed. [2] gives an exponent of -0.38 instead of -0.378 as is in [1]. [3] describes only the novel
half of the correlation. The portion for Xtt > 10 is novel; the other is said to be from their 31st reference, Wallis.
There is a discontinuity at Xtt = 10.

2.24. Two-phase flow voidage (fluids.two_phase_voidage) 489


Fluids Documentation, Release 1.0.21

References

[1], [2], [3]

Examples

>>> Domanski_Didion(.4, 800, 2.5, 1E-3, 1E-5)


0.9355795597059169

fluids.two_phase_voidage.Graham(x, rhol, rhog, mul, mug, m, D, g=9.80665)


Calculates void fraction in two-phase flow according to the model of [1] also given in [2] and [3].

𝛼 = 1 − exp{−1 − 0.3 ln(𝐹 𝑡) − 0.0328[ln(𝐹 𝑡)]2 }


[︃ ]︃0.5
𝐺2𝑡𝑝 𝑥3
𝐹𝑡 =
(1 − 𝑥)𝜌2𝑔 𝑔𝐷

𝛼 = 0 for 𝐹𝑡 ≤ 0.01032
Parameters
x [float] Quality at the specific tube interval []
rhol [float] Density of the liquid [kg/m^3]
rhog [float] Density of the gas [kg/m^3]
mul [float] Viscosity of liquid [Pa*s]
mug [float] Viscosity of gas [Pa*s]
m [float] Mass flow rate of both phases, [kg/s]
D [float] Diameter of the channel, [m]
g [float, optional] Acceleration due to gravity, [m/s^2]
Returns
alpha [float] Void fraction (area of gas / total area of channel), [-]

Notes

[1] has been reviewed. [2] does not list that the expression is not real below a certain value of Ft.

References

[1], [2], [3]

490 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

Examples

>>> Graham(.4, 800, 2.5, 1E-3, 1E-5, m=1, D=0.3)


0.6403336287530644

fluids.two_phase_voidage.Yashar(x, rhol, rhog, mul, mug, m, D, g=9.80665)


Calculates void fraction in two-phase flow according to the model of [1] also given in [2] and [3].
[︂ ]︂−0.321
1
𝛼= 1+ + 𝑋𝑡𝑡
𝐹𝑡
[︃ ]︃0.5
𝐺2𝑡𝑝 𝑥3
𝐹𝑡 =
(1 − 𝑥)𝜌2𝑔 𝑔𝐷
Parameters
x [float] Quality at the specific tube interval []
rhol [float] Density of the liquid [kg/m^3]
rhog [float] Density of the gas [kg/m^3]
mul [float] Viscosity of liquid [Pa*s]
mug [float] Viscosity of gas [Pa*s]
m [float] Mass flow rate of both phases, [kg/s]
D [float] Diameter of the channel, [m]
g [float, optional] Acceleration due to gravity, [m/s^2]
Returns
alpha [float] Void fraction (area of gas / total area of channel), [-]

Notes

[1] has been reviewed; both [2] and [3] give it correctly.

References

[1], [2], [3]

Examples

>>> Yashar(.4, 800, 2.5, 1E-3, 1E-5, m=1, D=0.3)


0.7934893185789146

fluids.two_phase_voidage.Huq_Loth(x, rhol, rhog)


Calculates void fraction in two-phase flow according to the model of [1], also given in [2], [3], and [4].

2(1 − 𝑥)2
𝛼=1− [︁ (︁ )︁]︁0.5
𝜌𝑙
1 − 2𝑥 + 1 + 4𝑥(1 − 𝑥) 𝜌𝑔 −1

Parameters

2.24. Two-phase flow voidage (fluids.two_phase_voidage) 491


Fluids Documentation, Release 1.0.21

x [float] Quality at the specific tube interval []


rhol [float] Density of the liquid [kg/m^3]
rhog [float] Density of the gas [kg/m^3]
Returns
alpha [float] Void fraction (area of gas / total area of channel), [-]

Notes

[1] has been reviewed, and matches the expressions given in the reviews [2], [3], and [4]; the form of the expres-
sion is rearranged somewhat differently.

References

[1], [2], [3], [4]

Examples

>>> Huq_Loth(.4, 800, 2.5)


0.9593868838476147

fluids.two_phase_voidage.Kopte_Newell_Chato(x, rhol, rhog, mul, mug, m, D, g=9.80665)


Calculates void fraction in two-phase flow according to the model of [1] also given in [2].

𝛼 = 1.045 − exp{−1 − 0.342 ln(𝐹 𝑡) − 0.0268[ln(𝐹 𝑡)]2 + 0.00597[ln(𝐹 𝑡)]3 }


[︃ ]︃0.5
𝐺2𝑡𝑝 𝑥3
𝐹𝑡 =
(1 − 𝑥)𝜌2𝑔 𝑔𝐷

𝛼 = 𝛼ℎ for 𝐹𝑡 ≤ 0.044
Parameters
x [float] Quality at the specific tube interval []
rhol [float] Density of the liquid [kg/m^3]
rhog [float] Density of the gas [kg/m^3]
mul [float] Viscosity of liquid [Pa*s]
mug [float] Viscosity of gas [Pa*s]
m [float] Mass flow rate of both phases, [kg/s]
D [float] Diameter of the channel, [m]
g [float, optional] Acceleration due to gravity, [m/s^2]
Returns
alpha [float] Void fraction (area of gas / total area of channel), [-]

492 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

Notes

[1] has been reviewed. If is recommended this expression not be used above Ft values of 454.

References

[1], [2]

Examples

>>> Kopte_Newell_Chato(.4, 800, 2.5, 1E-3, 1E-5, m=1, D=0.3)


0.6864466770087425

fluids.two_phase_voidage.Steiner(x, rhol, rhog, sigma, m, D, g=9.80665)


Calculates void fraction in two-phase flow according to the model of [1] also given in [2] and [3].
[︂ (︂ )︂ ]︂−1
𝑥 𝑥 1−𝑥 𝑣𝑔𝑚
𝛼= 𝐶0 + +
𝜌𝑔 𝜌𝑔 𝜌𝑙 𝐺

1.18(1 − 𝑥)
𝑣𝑔𝑚 = [𝑔𝜎(𝜌𝑙 − 𝜌𝑔 )]0.25
𝜌0.5
𝑙

𝐶0 = 1 + 0.12(1 − 𝑥)
Parameters
x [float] Quality at the specific tube interval []
rhol [float] Density of the liquid [kg/m^3]
rhog [float] Density of the gas [kg/m^3]
sigma [float] Surface tension of liquid [N/m]
m [float] Mass flow rate of both phases, [kg/s]
D [float] Diameter of the channel, [m]
g [float, optional] Acceleration due to gravity, [m/s^2]
Returns
alpha [float] Void fraction (area of gas / total area of channel), [-]

Notes

[1] has been reviewed.

2.24. Two-phase flow voidage (fluids.two_phase_voidage) 493


Fluids Documentation, Release 1.0.21

References

[1], [2], [3]

Examples

>>> Steiner(0.4, 800., 2.5, sigma=0.02, m=1, D=0.3)


0.895950181381335

fluids.two_phase_voidage.Rouhani_1(x, rhol, rhog, sigma, m, D, g=9.80665)


Calculates void fraction in two-phase flow according to the model of [1] as given in [2] and [3].
[︂ (︂ )︂ ]︂−1
𝑥 𝑥 1−𝑥 𝑣𝑔𝑚
𝛼= 𝐶0 + +
𝜌𝑔 𝜌𝑔 𝜌𝑙 𝐺

1.18(1 − 𝑥)
𝑣𝑔𝑚 = [𝑔𝜎(𝜌𝑙 − 𝜌𝑔 )]0.25
𝜌0.5
𝑙

𝐶0 = 1 + 0.2(1 − 𝑥)
Parameters
x [float] Quality at the specific tube interval []
rhol [float] Density of the liquid [kg/m^3]
rhog [float] Density of the gas [kg/m^3]
sigma [float] Surface tension of liquid [N/m]
m [float] Mass flow rate of both phases, [kg/s]
D [float] Diameter of the channel, [m]
g [float, optional] Acceleration due to gravity, [m/s^2]
Returns
alpha [float] Void fraction (area of gas / total area of channel), [-]

Notes

The expression as quoted in [2] and [3] could not be found in [1].

References

[1], [2], [3]

494 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

Examples

>>> Rouhani_1(0.4, 800., 2.5, sigma=0.02, m=1, D=0.3)


0.8588420244136714

fluids.two_phase_voidage.Rouhani_2(x, rhol, rhog, sigma, m, D, g=9.80665)


Calculates void fraction in two-phase flow according to the model of [1] as given in [2] and [3].
[︂ (︂ )︂ ]︂−1
𝑥 𝑥 1−𝑥 𝑣𝑔𝑚
𝛼= 𝐶0 + +
𝜌𝑔 𝜌𝑔 𝜌𝑙 𝐺
1.18(1 − 𝑥)
𝑣𝑔𝑚 = [𝑔𝜎(𝜌𝑙 − 𝜌𝑔 )]0.25
𝜌0.5
𝑙
(︂ )︂0.5
𝜌𝑙
𝐶0 = 1 + 0.2(1 − 𝑥)(𝑔𝐷)0.25
𝐺𝑡𝑝
Parameters
x [float] Quality at the specific tube interval []
rhol [float] Density of the liquid [kg/m^3]
rhog [float] Density of the gas [kg/m^3]
sigma [float] Surface tension of liquid [N/m]
m [float] Mass flow rate of both phases, [kg/s]
D [float] Diameter of the channel, [m]
g [float, optional] Acceleration due to gravity, [m/s^2]
Returns
alpha [float] Void fraction (area of gas / total area of channel), [-]

Notes

The expression as quoted in [2] and [3] could not be found in [1].

References

[1], [2], [3]

Examples

>>> Rouhani_2(0.4, 800., 2.5, sigma=0.02, m=1, D=0.3)


0.44819733138968865

fluids.two_phase_voidage.Nicklin_Wilkes_Davidson(x, rhol, rhog, m, D, g=9.80665)


Calculates void fraction in two-phase flow according to the model of [1] as given in [2] and [3].
[︂ (︂ )︂ ]︂−1
𝑥 𝑥 1−𝑥 𝑣𝑔𝑚
𝛼= 𝐶0 + +
𝜌𝑔 𝜌𝑔 𝜌𝑙 𝐺
√︀
𝑣𝑔𝑚 = 0.35 𝑔𝐷
𝐶0 = 1.2

2.24. Two-phase flow voidage (fluids.two_phase_voidage) 495


Fluids Documentation, Release 1.0.21

Parameters
x [float] Quality at the specific tube interval []
rhol [float] Density of the liquid [kg/m^3]
rhog [float] Density of the gas [kg/m^3]
m [float] Mass flow rate of both phases, [kg/s]
D [float] Diameter of the channel, [m]
g [float, optional] Acceleration due to gravity, [m/s^2]
Returns
alpha [float] Void fraction (area of gas / total area of channel), [-]

References

[1], [2], [3]

Examples

>>> Nicklin_Wilkes_Davidson(0.4, 800., 2.5, m=1, D=0.3)


0.6798826626721431

fluids.two_phase_voidage.Gregory_Scott(x, rhol, rhog)


Calculates void fraction in two-phase flow according to the model of [1] as given in [2] and [3].
[︂ (︂ )︂ ]︂−1
𝑥 𝑥 1−𝑥 𝑣𝑔𝑚
𝛼= 𝐶0 + +
𝜌𝑔 𝜌𝑔 𝜌𝑙 𝐺

𝑣𝑔𝑚 = 0

𝐶0 = 1.19
Parameters
x [float] Quality at the specific tube interval []
rhol [float] Density of the liquid [kg/m^3]
rhog [float] Density of the gas [kg/m^3]
Returns
alpha [float] Void fraction (area of gas / total area of channel), [-]

References

[1], [2], [3]

496 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

Examples

>>> Gregory_Scott(0.4, 800., 2.5)


0.8364154370924108

fluids.two_phase_voidage.Dix(x, rhol, rhog, sigma, m, D, g=9.80665)


Calculates void fraction in two-phase flow according to the model of [1] as given in [2] and [3].
[︂ (︂ )︂ ]︂−1
𝑥 𝑥 1−𝑥 𝑣𝑔𝑚
𝛼= 𝐶0 + +
𝜌𝑔 𝜌𝑔 𝜌𝑙 𝐺
(︂ )︂0.25
𝜌𝑙 − 𝜌𝑔
𝑣𝑔𝑚 = 2.9 𝑔𝜎
𝜌2𝑙
(︂(︁ )︁ )︂ ⎤
)︂ 𝜌𝜌𝑔 0.1

(︂
𝑣𝑠𝑔 ⎣ 𝑣𝑠𝑙 𝑙
𝐶0 = 1+ ⎦
𝑣𝑚 𝑣𝑠𝑔
𝑚𝑥
𝑣𝑔𝑠 =
𝜌𝑔 𝜋4 𝐷2
𝑚(1 − 𝑥)
𝑣𝑙𝑠 =
𝜌𝑙 𝜋4 𝐷2
𝑣𝑚 = 𝑣𝑔𝑠 + 𝑣𝑙𝑠
Parameters
x [float] Quality at the specific tube interval []
rhol [float] Density of the liquid [kg/m^3]
rhog [float] Density of the gas [kg/m^3]
sigma [float] Surface tension of liquid [N/m]
m [float] Mass flow rate of both phases, [kg/s]
D [float] Diameter of the channel, [m]
g [float, optional] Acceleration due to gravity, [m/s^2]
Returns
alpha [float] Void fraction (area of gas / total area of channel), [-]

Notes

Has formed the basis for several other correlations.

References

[1], [2], [3]

2.24. Two-phase flow voidage (fluids.two_phase_voidage) 497


Fluids Documentation, Release 1.0.21

Examples

>>> Dix(0.4, 800., 2.5, sigma=0.02, m=1, D=0.3)


0.8268737961156514

fluids.two_phase_voidage.Sun_Duffey_Peng(x, rhol, rhog, sigma, m, D, P, Pc, g=9.80665)


Calculates void fraction in two-phase flow according to the model of [1] as given in [2] and [3].
[︂ (︂ )︂ ]︂−1
𝑥 𝑥 1−𝑥 𝑣𝑔𝑚
𝛼= 𝐶0 + +
𝜌𝑔 𝜌𝑔 𝜌𝑙 𝐺
[︂ ]︂0.25
𝑔𝜎(𝜌𝑙 − 𝜌𝑔 )
𝑣𝑔𝑚 = 1.41
𝜌2𝑙
(︂ )︂−1
𝑃
𝐶0 = 0.82 + 0.18
𝑃𝑐
Parameters
x [float] Quality at the specific tube interval []
rhol [float] Density of the liquid [kg/m^3]
rhog [float] Density of the gas [kg/m^3]
sigma [float] Surface tension of liquid [N/m]
m [float] Mass flow rate of both phases, [kg/s]
D [float] Diameter of the channel, [m]
P [float] Pressure of the fluid, [Pa]
Pc [float] Critical pressure of the fluid, [Pa]
g [float, optional] Acceleration due to gravity, [m/s^2]
Returns
alpha [float] Void fraction (area of gas / total area of channel), [-]

References

[1], [2], [3]

Examples

>>> Sun_Duffey_Peng(0.4, 800., 2.5, sigma=0.02, m=1, D=0.3, P=1E5, Pc=7E6)


0.7696546506515833

fluids.two_phase_voidage.Xu_Fang_voidage(x, rhol, rhog, m, D, g=9.80665)


Calculates void fraction in two-phase flow according to the model developed in the review of [1].
[︂ (︂ )︂ (︂ )︂]︂−1
(︀ −0.2 3.5
)︀ 1 − 𝑥 𝜌𝑔
𝛼 = 1 + 1 + 2𝐹 𝑟𝑙𝑜 𝛼ℎ
𝑥 𝜌𝑙

Parameters
x [float] Quality at the specific tube interval []

498 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

rhol [float] Density of the liquid [kg/m^3]


rhog [float] Density of the gas [kg/m^3]
m [float] Mass flow rate of both phases, [kg/s]
D [float] Diameter of the channel, [m]
g [float, optional] Acceleration due to gravity, [m/s^2]
Returns
alpha [float] Void fraction (area of gas / total area of channel), [-]

Notes

Claims an AARD of 5.0%, and suitability for any flow regime, mini and micro channels, adiabatic, evaporating,
or condensing flow, and for Frlo from 0.02 to 145, rhog/rhol from 0.004-0.153, and x from 0 to 1.

References

[1]

Examples

>>> Xu_Fang_voidage(0.4, 800., 2.5, m=1, D=0.3)


0.9414660089942093

fluids.two_phase_voidage.Woldesemayat_Ghajar(x, rhol, rhog, sigma, m, D, P, angle=0, g=9.80665)


Calculates void fraction in two-phase flow according to the model of [1].
𝑣𝑔𝑠
𝛼= (︃ (︁ 𝜌 )︁0.1 )︃
𝑔
(︁ )︁ [︁ ]︁0.25 𝑃
𝑣𝑙𝑠 𝜌𝑙 𝑔𝐷𝜎(1+cos 𝜃)(𝜌𝑙 −𝜌𝑔 )
𝑣𝑔𝑠 1+ 𝑣𝑔𝑠 + 2.9 𝜌2𝑙
(1.22 + 1.22 sin 𝜃) 𝑃𝑎𝑡𝑚

𝑚𝑥
𝑣𝑔𝑠 =
𝜌𝑔 𝜋4 𝐷2
𝑚(1 − 𝑥)
𝑣𝑙𝑠 =
𝜌𝑙 𝜋4 𝐷2
Parameters
x [float] Quality at the specific tube interval []
rhol [float] Density of the liquid [kg/m^3]
rhog [float] Density of the gas [kg/m^3]
sigma [float] Surface tension of liquid [N/m]
m [float] Mass flow rate of both phases, [kg/s]
D [float] Diameter of the channel, [m]
P [float] Pressure of the fluid, [Pa]
angle [float] Angle of the channel with respect to the horizontal (vertical = 90), [degrees]
g [float, optional] Acceleration due to gravity, [m/s^2]

2.24. Two-phase flow voidage (fluids.two_phase_voidage) 499


Fluids Documentation, Release 1.0.21

Returns
alpha [float] Void fraction (area of gas / total area of channel), [-]

Notes

Strongly recommended.

References

[1]

Examples

>>> Woldesemayat_Ghajar(0.4, 800., 2.5, sigma=0.2, m=1, D=0.3, P=1E6, angle=45)


0.7640815513429202

2.24.3 Utilities

fluids.two_phase_voidage.Lockhart_Martinelli_Xtt(x, rhol, rhog, mul, mug, pow_x=0.9, pow_rho=0.5,


pow_mu=0.1, n=None)
Calculates the Lockhart-Martinelli Xtt two-phase flow parameter in a general way according to [2]. [1] is said to
describe this. However, very different definitions of this parameter have been used elsewhere. Accordingly, the
powers of each of the terms can be set. Alternatively, if the parameter n is provided, the powers for viscosity and
phase fraction will be calculated from it as shown below.
(︂ )︂0.9 (︂ )︂0.5 (︂ )︂0.1
1−𝑥 𝜌𝑔 𝜇𝑙
𝑋𝑡𝑡 =
𝑥 𝜌𝑙 𝜇𝑔
(︂ )︂(2−𝑛)/2 (︂ )︂0.5 (︂ )︂𝑛/2
1−𝑥 𝜌𝑔 𝜇𝑙
𝑋𝑡𝑡 =
𝑥 𝜌𝑙 𝜇𝑔
Parameters
x [float] Quality at the specific tube interval [-]
rhol [float] Density of the liquid [kg/m^3]
rhog [float] Density of the gas [kg/m^3]
mul [float] Viscosity of liquid [Pa*s]
mug [float] Viscosity of gas [Pa*s]
pow_x [float, optional] Power for the phase ratio (1-x)/x, [-]
pow_rho [float, optional] Power for the density ratio rhog/rhol, [-]
pow_mu [float, optional] Power for the viscosity ratio mul/mug, [-]
n [float, optional] Number to be used for calculating pow_x and pow_mu if provided, [-]
Returns
Xtt [float] Xtt Lockhart-Martinelli two-phase flow parameter [-]

500 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

Notes

Xtt is best regarded as an empirical parameter. If used, n is often 0.2 or 0.25.

References

[1], [2]

Examples

>>> Lockhart_Martinelli_Xtt(0.4, 800, 2.5, 1E-3, 1E-5)


0.12761659240532292

fluids.two_phase_voidage.two_phase_voidage_experimental(rho_lg, rhol, rhog)


Calculates the void fraction for two-phase liquid-gas pipeflow. If the weight of fluid in a pipe pipe could be mea-
sured and the volume of the pipe were known, an effective density of the two-phase mixture could be calculated.
This is directly relatable to the void fraction of the pipe, a parameter used to predict the pressure drop. This
function converts that measured effective two-phase density to void fraction for use in developing correlations.
𝜌𝑚 − 𝜌𝑙
𝛼=
𝜌𝑔 − 𝜌𝑙
Parameters
rho_lg [float] Two-phase effective density [kg/m^3]
rhol [float] Density of the liquid [kg/m^3]
rhog [float] Density of the gas [kg/m^3]
Returns
alpha [float] Void fraction (area of gas / total area of channel), [-]

References

[1]

Examples

>>> two_phase_voidage_experimental(481.0, 800, 2.5)


0.4

2.24.4 Gas/Liquid Viscosity

fluids.two_phase_voidage.Beattie_Whalley(x, mul, mug, rhol, rhog)


Calculates a suggested definition for liquid-gas two-phase flow viscosity in internal pipe flow according to the
form in [1] and shown in [2] and [3].

𝜇𝑚 = 𝜇𝑙 (1 − 𝛼𝑚 )(1 + 2.5𝛼𝑚 ) + 𝜇𝑔 𝛼𝑚

1
𝛼𝑚 = (︀ 1−𝑥 )︀ 𝜌𝑔 (homogeneous model)
1+ 𝑥 𝜌𝑙

2.24. Two-phase flow voidage (fluids.two_phase_voidage) 501


Fluids Documentation, Release 1.0.21

Parameters
x [float] Quality of the gas-liquid flow, [-]
mul [float] Viscosity of liquid, [Pa*s]
mug [float] Viscosity of gas, [Pa*s]
rhol [float] Density of the liquid [kg/m^3]
rhog [float] Density of the gas [kg/m^3]
Returns
mu_lg [float] Liquid-gas viscosity (a suggested definition, potentially useful for empirical
work only!) [Pa*s]

Notes

This model converges to the liquid or gas viscosity as the quality approaches either limits.

References

[1], [2], [3]

Examples

>>> Beattie_Whalley(x=0.4, mul=1E-3, mug=1E-5, rhol=850, rhog=1.2)


1.7363806909512365e-05

fluids.two_phase_voidage.McAdams(x, mul, mug)


Calculates a suggested definition for liquid-gas two-phase flow viscosity in internal pipe flow according to the
form in [1] and shown in [2] and [3].
(︂ )︂−1
𝑥 1−𝑥
𝜇𝑚 = +
𝜇𝑔 𝜇𝑙

Parameters
x [float] Quality of the gas-liquid flow, [-]
mul [float] Viscosity of liquid, [Pa*s]
mug [float] Viscosity of gas, [Pa*s]
Returns
mu_lg [float] Liquid-gas viscosity (a suggested definition, potentially useful for empirical
work only!) [Pa*s]

502 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

Notes

This model converges to the liquid or gas viscosity as the quality approaches either limits.
[3] states this is the most common definition of two-phase liquid-gas viscosity.

References

[1], [2], [3]

Examples

>>> McAdams(x=0.4, mul=1E-3, mug=1E-5)


2.4630541871921184e-05

fluids.two_phase_voidage.Cicchitti(x, mul, mug)


Calculates a suggested definition for liquid-gas two-phase flow viscosity in internal pipe flow according to the
form in [1] and shown in [2] and [3].

𝜇𝑚 = 𝑥𝜇𝑔 + (1 − 𝑥)𝜇𝑙

Parameters
x [float] Quality of the gas-liquid flow, [-]
mul [float] Viscosity of liquid, [Pa*s]
mug [float] Viscosity of gas, [Pa*s]
Returns
mu_lg [float] Liquid-gas viscosity (a suggested definition, potentially useful for empirical
work only!) [Pa*s]

Notes

This model converges to the liquid or gas viscosity as the quality approaches either limits.

References

[1], [2], [3]

Examples

>>> Cicchitti(x=0.4, mul=1E-3, mug=1E-5)


0.0006039999999999999

fluids.two_phase_voidage.Lin_Kwok(x, mul, mug)


Calculates a suggested definition for liquid-gas two-phase flow viscosity in internal pipe flow according to the
form in [1] and shown in [2].
𝜇𝑙 𝜇𝑔
𝜇𝑚 =
𝜇𝑔 + 𝑥1.4 (𝜇𝑙 − 𝜇𝑔 )

2.24. Two-phase flow voidage (fluids.two_phase_voidage) 503


Fluids Documentation, Release 1.0.21

Parameters
x [float] Quality of the gas-liquid flow, [-]
mul [float] Viscosity of liquid, [Pa*s]
mug [float] Viscosity of gas, [Pa*s]
Returns
mu_lg [float] Liquid-gas viscosity (a suggested definition, potentially useful for empirical
work only!) [Pa*s]

Notes

This model converges to the liquid or gas viscosity as the quality approaches either limits.

References

[1], [2]

Examples

>>> Lin_Kwok(x=0.4, mul=1E-3, mug=1E-5)


3.515119398126066e-05

fluids.two_phase_voidage.Fourar_Bories(x, mul, mug, rhol, rhog)


Calculates a suggested definition for liquid-gas two-phase flow viscosity in internal pipe flow according to the
form in [1] and shown in [2] and [3].
(︁√ √︀ )︁2
𝜇𝑚 = 𝜌𝑚 𝑥𝜈𝑔 + (1 − 𝑥)𝜈𝑙

Parameters
x [float] Quality of the gas-liquid flow, [-]
mul [float] Viscosity of liquid, [Pa*s]
mug [float] Viscosity of gas, [Pa*s]
rhol [float] Density of the liquid, [kg/m^3]
rhog [float] Density of the gas, [kg/m^3]
Returns
mu_lg [float] Liquid-gas viscosity (a suggested definition, potentially useful for empirical
work only!) [Pa*s]

504 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

Notes

This model converges to the liquid or gas viscosity as the quality approaches either limits.
This was first expressed in the equalivalent form as follows:
(︂ √︁ )︂
𝜇𝑚 = 𝜌𝑚 𝑥𝜈𝑔 + (1 − 𝑥)𝜈𝑙 + 2 𝑥(1 − 𝑥)𝜈𝑔 𝜈𝑙

References

[1], [2], [3]

Examples

>>> Fourar_Bories(x=0.4, mul=1E-3, mug=1E-5, rhol=850, rhog=1.2)


2.127617150298565e-05

fluids.two_phase_voidage.Duckler(x, mul, mug, rhol, rhog)


Calculates a suggested definition for liquid-gas two-phase flow viscosity in internal pipe flow according to the
form in [1] and shown in [2], [3], and [4].
𝑥𝜇𝑔 (1−𝑥)𝜇𝑙
𝜌𝑔 + 𝜌𝑙
𝜇𝑚 = (1−𝑥)
𝑥
𝜌𝑔 + 𝜌𝑙

Parameters
x [float] Quality of the gas-liquid flow, [-]
mul [float] Viscosity of liquid, [Pa*s]
mug [float] Viscosity of gas, [Pa*s]
rhol [float] Density of the liquid, [kg/m^3]
rhog [float] Density of the gas, [kg/m^3]
Returns
mu_lg [float] Liquid-gas viscosity (a suggested definition, potentially useful for empirical
work only!) [Pa*s]

Notes

This model converges to the liquid or gas viscosity as the quality approaches either limits.
This has also been expressed in the following form:
[︂ (︂ )︂ (︂ )︂]︂
𝜇𝑔 𝜇𝑙
𝜇𝑚 = 𝜌𝑚 𝑥 + (1 − 𝑥)
𝜌𝑔 𝜌𝑙

According to the homogeneous definition of two-phase density.

2.24. Two-phase flow voidage (fluids.two_phase_voidage) 505


Fluids Documentation, Release 1.0.21

References

[1], [2], [3], [4]

Examples

>>> Duckler(x=0.4, mul=1E-3, mug=1E-5, rhol=850, rhog=1.2)


1.2092040385066917e-05

2.25 Support for pint Quantities (fluids.units)

Basic module which wraps all fluids functions and classes to be compatible with the pint unit handling library. All
other object - dicts, lists, etc - are not wrapped.

>>> import fluids


>>> fluids.units.friction_factor
<function friction_factor at 0x...>

The fluids.units module also supports star imports; the same objects exported when importing from the main library
will be imported from fluids.units.

>>> from fluids.units import *

It is also possible to use fluids.units without the star import:


There is no global unit registry in pint, and each registry must be a singleton. However, there is a default registry which
is suitable for use in multiple modules at once.
This default registry should be imported in one of the following ways (it does not need to be called u; it can be imported
from pint as ureg or any other name):

>>> from pint import _DEFAULT_REGISTRY as u

Note that if the star import convention is used, the default unit registry be imported as u for you. Unlike the normal
convention, this registry is already initialized. To repeat it again, you CANNOT do the following in your project and
work with fluids.units.

>>> from pint import UnitRegistry


>>> u = UnitRegistry()

All dimensional arguments to functions in fluids.units must be provided as Quantity objects.

>>> Reynolds(V=3.5*u.m/u.s, D=2*u.m, rho=997.1*u.kg/u.m**3, mu=1E-3*u.Pa*u.s)


<Quantity(6979700.0, 'dimensionless')>

The result is always one or more Quantity objects, depending on the signature of the function called.
For arguments whose documentation specify they are dimensionless, they can optionally be passed in without making
them dimensionless numbers with pint.

>>> speed_synchronous(50*u.Hz, poles=12*u.dimensionless)


<Quantity(1500.0, 'revolutions_per_minute')>
(continues on next page)

506 Chapter 2. API Reference


Fluids Documentation, Release 1.0.21

(continued from previous page)


>>> speed_synchronous(50*u.Hz, poles=12)
<Quantity(1500.0, 'revolutions_per_minute')>

It is good practice to use dimensionless quantities as follows, but it is optional.

>>> K_separator_Watkins(0.88*u.dimensionless, 985.4*u.kg/u.m**3, 1.3*u.kg/u.m**3,␣


˓→horizontal=True)

<Quantity(0.079516136, 'meter / second')>

Like all pint registries, the default unit system can be changed. However, all functions will still return the unit their
documentation says they do. To convert to the new base units, use the method .to_base_units().

>>> u.default_system = 'imperial'


>>> K_separator_Watkins(0.88*u.dimensionless, 985.4*u.kg/u.m**3, 1.3*u.kg/u.m**3,␣
˓→horizontal=True).to_base_units()

<Quantity(0.0869599038, 'yard / second')>


>>> u.default_system = 'mks'

The order of the arguments to a function is the same as it is in the regular library; it won’t try to infer argument position
from their units, an exception will be raised.

>>> K_separator_Watkins(985.4*u.kg/u.m**3, 1.3*u.kg/u.m**3, 0.88*u.dimensionless,␣


˓→horizontal=True)

Exception: Converting 0.88 dimensionless to units of kg/m^3 raised DimensionalityError:␣


˓→Cannot convert from 'dimensionless' (dimensionless) to 'kilogram / meter ** 3' ([mass]␣

˓→/ [length] ** 3)

Support for classes is provided by wrapping each class by a proxy class which reads the docstrings of each method and
the main class to determine the inputs and outputs. Properties, attributes, inputs, and units are all included.

>>> T1 = TANK(L=3*u.m, D=150*u.cm, horizontal=True)


>>> T1.V_total, T1.h_max
(<Quantity(5.3014376, 'meter ** 3')>, <Quantity(1.5, 'meter')>)
>>> T1.V_from_h(0.1*u.m)
<Quantity(0.151783071, 'meter ** 3')>

>>> atm = ATMOSPHERE_NRLMSISE00(Z=1E3*u.m, latitude=45*u.degrees, longitude=45*u.degrees,


˓→ day=150*u.day)

>>> atm.rho, atm.O2_density


(<Quantity(1.1019062, 'kilogram / meter ** 3')>, <Quantity(4.80470351e+24, 'count /␣
˓→meter ** 3')>)

2.26 Support for NumPy arrays (fluids.vectorized)

Basic submodule that wraps all fluids functions with numpy’s vectorize. All other object - dicts, classes, etc - are not
wrapped. Where speed is a concern, the newer fluids.numba numpy interface may be used to obtain C/C++/Fortran-
level performance on array calculations.

>>> import numpy as np


>>> import fluids
(continues on next page)

2.26. Support for NumPy arrays (fluids.vectorized) 507


Fluids Documentation, Release 1.0.21

(continued from previous page)


>>> fluids.vectorized.Reynolds(V=2.5, D=np.array([0.25, 0.5, 0.75, 1.0]), rho=1.1613,␣
˓→mu=1.9E-5)

array([ 38200.65789474, 76401.31578947, 114601.97368421, 152802.63157895])

Vectorization follows the numpy broadcast rules.

>>> fluids.vectorized.Reynolds(V=np.array([1.5, 2.5, 3.5, 5.0]), D=np.array([0.25, 0.5,␣


˓→0.75, 1.0]), rho=1.1613, mu=1.9E-5)

array([ 22920.39473684, 76401.31578947, 160442.76315789, 305605.26315789])

Inputs do not need to be numpy arrays; they can be any iterable:

>>> fluids.vectorized.friction_factor(Re=[100, 1000, 10000], eD=0)


array([0.64 , 0.064 , 0.03088295])

If you just want to use numpy arrays as inputs to all fluids functions, you can use Python’s import aliasing feature to
replace fluids with the vectorized version. Note that there are no submodules in fluids.vectorized.

>>> import fluids.vectorized as fluids

Warning: This module does not replace the functions in the fluids module; it copies all the functions into the
fluids.vectorized module and makes them vectorized there.
For example by importing fluids.vectorized, fluids.friction.friction_factor won’t become vectorized, but flu-
ids.vectorized.friction_factor will become available and is vectorized.

Warning: np.vectorize does not use NumPy to accelerate any computations; it is a convenience wrapper. If
you are working on a problem large enough for speed to be an issue and Numba is compatible with your version of
Python, an interface to that library is available at fluids.numba which does accelerate NumPy array computations
and is normally faster than using numpy directly.

508 Chapter 2. API Reference


CHAPTER

THREE

SOLVED FLUIDS MECHANICS PROBLEMS

A collection of problems from Crane TP 410 have been solved using the fluids library. These are industrially relevant
problems. Crane TP 410 is used extensively as a source in fluids, although often there are better correlations that are
implemented and chosen as default methods. All problems include a description of the problems, but Crane TP 410
includes schematics that are not included here. A copy can be obtained from your local library or bought here.
These problems often make use of thermo and pint so make sure you have them installed! More details on the unit
handling library can be found at fluids.units.

3.1 7.1 Smooth Pipe (Plastic)

Water at 30 degrees Celsius flows through a 20 m length of 50 mm plastic (smooth wall) pipe, at a flow rate of 200
L/min.
Calculate the Reynolds number and friction factor.

[1]: from fluids.units import *


from thermo.units import Stream
from math import *

Q = 0.2*u.m**3/u.min
T = 30*u.degC
P = 2*u.bar # assumed
water = Stream('water', T=T, P=P, Q=Q)

NPS, Di, Do, t = nearest_pipe(Di=0.05*u.m)


v = Q/(pi/4*Di**2)
Re = Reynolds(D=Di, rho=water.rho, mu=water.mu, V=v)
print('Reynolds number = %s' %Re)
fd = friction_factor(Re=Re, eD=_roughness['Glass']/Di)
print('Darcy friction factor = %s' %fd)
Reynolds number = 101005.00473702731 dimensionless
Darcy friction factor = 0.01810865785217491 dimensionless

The values presented in their solution are Re=100600; and fd=0.0179. The difference in values is due to the precision
they used.

509
Fluids Documentation, Release 1.0.21

3.2 7.2 L, L over D and K from Kv for Conventional Type Valves

A 150 mm class 125 Y-pattern globe valve with a Kv=500 flow coefficient is given.
Calculate the resistance coefficient K, L/D equivalent, and the length for complete turbulence in the flow.
Use schedule 40, 150 mm pipe as a reference.

[1]: from fluids.units import *


D = .154*u.m
Kv = 500*u.m**3/u.hour

K = Kv_to_K(Kv, D)
L_D = L_equiv_from_K(K, fd=.015)
L = D*L_D

print('Loss coefficient = %s' %K)


print('Equivalent length = %s' % L_D)
print('Length for complete turbulence = %s' %L)
Loss coefficient = 3.5996713983999995 dimensionless
Equivalent length = 239.97809322666663 dimensionless
Length for complete turbulence = 36.95662635690666 meter

The results calculated in Crane TP 410M are 3.6, 240, and 37.0 respectively.

3.3 7.3 L, L over D, K, and Kv for Conventional Type Valves

A 100 mm class 600 steel angle valve, has a full area seat.
Calculate its resistance coefficient K, flow coefficient Kv, the equivalent length of it L/D, and the length for complete
turbulent L.

[1]: from fluids.units import *


NPS, Di, Do, t = nearest_pipe(Do=0.103*u.m, schedule='80')
fd = 0.0165 # provided - note equivalent length is proportional to this value
d = 0.0972*u.m # diameter of seat
K = K_angle_valve_Crane(D1=d, D2=Di, fd=fd, style=1)
Kv = K_to_Kv(K, d)
L_D = L_equiv_from_K(K, fd)
L = L_D*d

print('Loss coefficient = %s' %K)


print('Valve flow coefficient = %s' %Kv)
print('Equivalent length = %s' % L_D)
print('Length for complete turbulence = %s' %L)
Loss coefficient = 2.4729637821072443 dimensionless
Valve flow coefficient = 240.31652930826877 meter ** 3 / hour
Equivalent length = 149.8765928549845 dimensionless
Length for complete turbulence = 14.568004825504492 meter

The values given in the solution are K=2.475, Kv = 240.2, L/D=150, and L = 14.6.

510 Chapter 3. Solved Fluids Mechanics Problems


Fluids Documentation, Release 1.0.21

3.4 7.4 Venturi Type Valves

A 150 by 100 mm class 600 steel gate valve, conically tapered ports, length 550 mm, back of seat ring ~150 mm. The
valve is connected to 146 mm schedule 80 pipe. The angle can be calculated to be 13 degrees. The valve is specified
to be operating in turbulent conditions.

[1]: from fluids.units import *


D1 = 100*u.mm
D2 = 146*u.mm
angle = 13.115*u.degrees
fd = friction_factor(Re=1E5, eD=.0018*u.inch/D1)

K2 = K_gate_valve_Crane(D1, D2, angle, fd)


L_D = L_equiv_from_K(K2, fd)
L = (L_D*D2).to(u.m)

print('Darcy friction factor = %s' %fd)


print('K2 = %s' %K2)
print('Equivalent length L_D = %s' %L_D)
print('Length for flow in complete turbulence = %s' %L)
Darcy friction factor = 0.02015036859256496 dimensionless
K2 = 1.3330449717924238 dimensionless
Equivalent length L_D = 66.15486787096728 dimensionless
Length for flow in complete turbulence = 9.658610709161223 meter

The values calculated in the problem use a friction factor of 0.015; this is the source of the discrepancies. Their
procedure for loss in valves and fittings is based around the roughness of commercial steel pipe with a roughness of
0.0018 inches, but in their examples they simply look their friction factors up in a table which does not consider the
diameter of the pipe. Their calculated values are K2 = 1.22, L/D=81.3, and L = 11.9.

3.5 7.5 Lift Check Valves

A lift check valve of type globe (with a wing-guided disc) is added to a 80 mm Schedule 40 horizontal pipe carrying
water at a flow rate of 300 L/min.
Calculate the check valve size, and pressure drop. The disc should be fully lifted at the specified flow.

[1]: from fluids.units import *


from math import *
Q = 300*u.L/u.min
D_80 = 77.9*u.mm

rho = 998.2*u.kg/u.m**3
# Try: schedule 40, 80 mm valve
D_60 = 62.7*u.mm
v_lift = v_lift_valve_Crane(rho=rho, D1=D_80, D2=D_80, style='lift check straight')
print('Minimum velocity = %s' %v_lift)

v = Q/(pi/4*D_80**2)
print('Velocity in 80 mm valve = %s' %v.to_base_units())

(continues on next page)

3.4. 7.4 Venturi Type Valves 511


Fluids Documentation, Release 1.0.21

(continued from previous page)


# v is lower than the lift velocity; try the 60 mm valve
v_lift = v_lift_valve_Crane(rho=rho, D1=D_60, D2=D_80, style='lift check straight')
print('Minimum velocity = %s' %v_lift)

v = Q/(pi/4*D_60**2)
print('Velocity in 60 mm valve = %s' %v.to_base_units())
# The desired velocity is close enough

fd = 0.017 # given, 80 mm pipe upstream


K2 = K_lift_check_valve_Crane(D_60, D_80, fd=fd, angled=False)
print('Loss coefficient = %s'%K2)
v_pipe = Q/(pi/4*D_80**2)

dP = 0.5*rho*v_pipe**2*K2
print('Pressure drop = %s' %dP.to(u.Pa))
Minimum velocity = 1.5825637790011153 meter / second
Velocity in 80 mm valve = 1.0490717871198245 meter / second
Minimum velocity = 1.0252301935349282 meter / second
Velocity in 60 mm valve = 1.6193660919636594 meter / second
Loss coefficient = 24.87967662305315 dimensionless
Pressure drop = 13666.040906803597 pascal

The values calculated in the example are K2 = 26.3 and pressure drop = 14450 Pa. Interestingly, the formula for
minimum lift velocity used in their example does not use the ratio of diameters as the formula in their appendix shows.
Otherwise the examples match.

3.6 7.6 Reduced Port Ball Valve

Water is discharged at 15 degrees Celsius from a tank with 7 m of head to atmosphere through:
• 60 meters of 80 mm schedule 40 pipe
• Six 80 mm standard 90 degree threaded elbows
• One 80 mm flanged ball valve, with a 60 mm diameter seat, 16 degree conical inlet and 30 degree conical outlet.
• The entrance is sharp-edged and flush with the tank

[1]: from thermo.units import Chemical


from fluids.units import *
from math import pi
water = Chemical('water', T=15*u.degC)
rho = water.rho
mu = water.mu

H = 7*u.m
L = 60*u.m
fd = 0.017 # assumed in their example
NPS, D_pipe, Do_pipe, t = nearest_pipe(Do=80*u.mm)

K = K_from_f(fd=fd, L=L, D=D_pipe)


K += entrance_sharp()
(continues on next page)

512 Chapter 3. Solved Fluids Mechanics Problems


Fluids Documentation, Release 1.0.21

(continued from previous page)


K += exit_normal()
K += 6*bend_rounded(D_pipe, angle=90*u.degrees, fd=fd, bend_diameters=0.65)
ball_valve_angle = 0.5*(15+30)*u.degrees # use the average angle
K += K_ball_valve_Crane(D1=D_pipe, D2=60*u.mm, angle=ball_valve_angle, fd=fd)

v = (2*u.gravity*H/K)**0.5
print('Velocity = %s' %v.to_base_units())
Q = v*pi/4*D_pipe**2
print('Flow rate = %s' %Q.to(u.L/u.min))
Re = Reynolds(D=D_pipe, rho=rho, mu=mu, V=v)
fd = friction_factor(Re=Re, eD=0.0018*u.inch/D_pipe)
Velocity = 2.770041323755228 meter / second
Flow rate = 792.5474399133158 liter / minute

The radius of curvature of the elbows was not specified; 0.65 bend diameters matches their results most closely. They
modified the ball valve equation to support both an inlet and an outlet angle; the average value is used here.
Their calculated values are 2.74 m/s and flow rate of 781 L/min.
The calculation can be performed more accurately by iterating; a naive approach is shown below. A very different flow
rate is obtained when the roughness of the pipe is considered in the friction factor calculation.

[2]: fd = 0.017
for i in range(7):
K = K_from_f(fd=fd, L=L, D=D_pipe)
K += entrance_sharp()
K += exit_normal()
K += 6*bend_rounded(D_pipe, angle=90*u.degrees, fd=fd, bend_diameters=0.65)
ball_valve_angle = 0.5*(15+30)*u.degrees # use the average angle
K += K_ball_valve_Crane(D1=D_pipe, D2=60*u.mm, angle=ball_valve_angle, fd=fd)

v = (2*u.gravity*H/K)**0.5
Q = v*pi/4*D_pipe**2
print('Flow rate = %s' %Q.to(u.L/u.min))
Re = Reynolds(D=D_pipe, rho=rho, mu=mu, V=v)
fd = friction_factor(Re=Re, eD=0.0018*u.inch/D_pipe)
Flow rate = 792.5474399133158 liter / minute
Flow rate = 748.2664116002655 liter / minute
Flow rate = 746.5628913428789 liter / minute
Flow rate = 746.4941928055326 liter / minute
Flow rate = 746.4914172120895 liter / minute
Flow rate = 746.491305062719 liter / minute
Flow rate = 746.4913005312487 liter / minute

3.6. 7.6 Reduced Port Ball Valve 513


Fluids Documentation, Release 1.0.21

3.7 7.7 Laminar flow in Valves, Fittings, and Pipe - System from Ex-
ample 7.6

SAE oil is discharged at 15 degrees Celsius from a tank with 7 m of head to atmosphere through:
• 60 meters of 80 mm schedule 40 pipe
• Six 80 mm standard 90 degree threaded elbows
• One 80 mm flanged ball valve, with a 60 mm diameter seat, 16 degree conical inlet and 30 degree conical outlet.
• The entrance is sharp-edged and flush with the tank
This is the same problem as 7.6, except the properties of the fluid are sufficiently viscous to put it into the laminar
regime although not by much.

[1]: from fluids.units import *


from math import pi
rho = 875.*u.kg/u.m**3
mu = 78*u.cP

H = 7*u.m
L = 60*u.m
NPS, D_pipe, Do_pipe, t = nearest_pipe(Do=80*u.mm)

fd = 0.017
Re = 1E5
for i in range(20):
K = K_from_f(fd=fd, L=L, D=D_pipe)
K += entrance_sharp()
K += exit_normal()
K += 6*bend_rounded(D_pipe, angle=90*u.degrees, fd=fd, bend_diameters=0.65)
ball_valve_angle = 0.5*(15+30)*u.degrees # use the average angle
K += K_ball_valve_Crane(D1=D_pipe, D2=60*u.mm, angle=ball_valve_angle, fd=fd)

v = (2*u.gravity*H/K)**0.5
Q = v*pi/4*D_pipe**2
print('Flow rate = %s, Reynolds number = %s' %(Q.to(u.L/u.min), Re))
Re = Reynolds(D=D_pipe, rho=rho, mu=mu, V=v)
fd = friction_factor(Re=Re, eD=0.0018*u.inch/D_pipe)
Flow rate = 792.5474399133158 liter / minute, Reynolds number = 100000.0
Flow rate = 494.99657487971655 liter / minute, Reynolds number = 2421.3002237645055␣
˓→dimensionless

Flow rate = 520.378830860645 liter / minute, Reynolds number = 1512.2568784652317␣


˓→dimensionless

Flow rate = 532.8826141070547 liter / minute, Reynolds number = 1589.8018416954353␣


˓→dimensionless

Flow rate = 538.9130067993693 liter / minute, Reynolds number = 1628.0019690919053␣


˓→dimensionless

Flow rate = 541.7921133079537 liter / minute, Reynolds number = 1646.4253346091618␣


˓→dimensionless

Flow rate = 543.1601058671454 liter / minute, Reynolds number = 1655.2212512728256␣


˓→dimensionless

Flow rate = 543.8086222080263 liter / minute, Reynolds number = 1659.4005855597939␣


˓→dimensionless
(continues on next page)

514 Chapter 3. Solved Fluids Mechanics Problems


Fluids Documentation, Release 1.0.21

(continued from previous page)


Flow rate = 544.1157293288044 liter / minute, Reynolds number = 1661.3818584555358␣
˓→dimensionless

Flow rate = 544.2610867599517 liter / minute, Reynolds number = 1662.3200969795807␣


˓→dimensionless

Flow rate = 544.3298695405146 liter / minute, Reynolds number = 1662.7641763656693␣


˓→dimensionless

Flow rate = 544.3624136657237 liter / minute, Reynolds number = 1662.9743136439959␣


˓→dimensionless

Flow rate = 544.3778108746269 liter / minute, Reynolds number = 1663.073738730347␣


˓→dimensionless

Flow rate = 544.3850953838348 liter / minute, Reynolds number = 1663.1207785206302␣


˓→dimensionless

Flow rate = 544.388541685874 liter / minute, Reynolds number = 1663.1430333193803␣


˓→dimensionless

Flow rate = 544.3901721223835 liter / minute, Reynolds number = 1663.1535620669079␣


˓→dimensionless

Flow rate = 544.3909434755569 liter / minute, Reynolds number = 1663.1585431899127␣


˓→dimensionless

Flow rate = 544.3913083992766 liter / minute, Reynolds number = 1663.1608997398391␣


˓→dimensionless

Flow rate = 544.3914810429436 liter / minute, Reynolds number = 1663.1620146130185␣


˓→dimensionless

Flow rate = 544.3915627198137 liter / minute, Reynolds number = 1663.162542054189␣


˓→dimensionless

No solution is actually presented in the example; but the result of their initial guess of a velocity of 1.5 m/s gives 511.2
L/min.

3.8 7.8 Laminar flow in Valves, Fittings, and Pipe - SAE oil through a
pipe and globe valve

S.A.E. 30 Oil at 40 degrees Celsius and a flow rate of 600 barrels/hour flows in a 60 m long 200 mm schedule 40 pipe
and passes through a 200 mm globe valve, full area seat.
Calculate the pressure drop.

[1]: from fluids.units import *


from thermo import Stream
from math import *
Q = 600*u.barrel/u.hour
L = 60*u.m
NPS, D_pipe, Do_pipe, t = nearest_pipe(Di=200*u.mm)

rho = 869.2*u.kg/u.m**3
mu = 130*u.cP

V = Q/(pi/4*D_pipe**2)
Re = Reynolds(D=D_pipe, V=V, rho=rho, mu=mu)
fd = friction_factor(Re=Re)
ft = friction_factor(Re=1E6, eD=0.0018*u.inch/D_pipe)
(continues on next page)

3.8. 7.8 Laminar flow in Valves, Fittings, and Pipe - SAE oil through a pipe and globe valve 515
Fluids Documentation, Release 1.0.21

(continued from previous page)


K = K_globe_valve_Crane(D1=D_pipe, D2=D_pipe, fd=ft)
K += K_from_f(fd=fd, L=L, D=D_pipe)
dP_from_K(K=K, V=V, rho=rho)
[1]: 4575.571013232576 pascal

The example gives a pressure drop of 6382 Pa.

3.9 7.9 Laminar Flow in Valves, Fittings, and Pipe

SAE 30 oil at 100 deg F flows through a 5” schedule 40 pipe at 400 gal/min.
There is a sketch in the Crane document of the system.
Find the velocity in feet/second and the pressure drop.

[1]: from fluids.units import *


from math import pi
from fluids.constants import g
g = g*u.m/u.s**2

dH = 50*u.foot
L = (175+50+75)*u.foot
mu = 130*u.cP
rho = (62.364*0.87)*u.lb/u.ft**3
NPS, Di, Do, t = nearest_pipe(Do=5*u.inch, schedule='40')

Q = 400*u.gallon/u.min
A = 0.25*pi*Di**2

v = Q/A
Re = rho*v*Di/mu
fd = friction_factor(Re=Re, eD=0.0018*u.inch/Di)
ft = ft_Crane(Di)

K_gate = K_gate_valve_Crane(D1=Di, D2=Di, fd=ft, angle=0.0*u.degrees)


K_angle = K_angle_valve_Crane(D1=Di, D2=Di, fd=ft, style=1)
K_elbow = bend_rounded(Di=Di, bend_diameters=1, angle=90*u.degrees, Re=Re, method='Crane
˓→')

K_tot = K_elbow + K_gate + K_angle


K_tot += K_from_f(fd=fd, L=L, D=Di)

dP = dP_from_K(K=K_tot, rho=rho, V=v) + rho*g*dH


dP.to(u.psi), v.to(u.foot/u.s)
[1]: (26.063989664869815 <Unit('pound_force_per_square_inch')>,
6.414177533606955 <Unit('foot / second')>)

516 Chapter 3. Solved Fluids Mechanics Problems


Fluids Documentation, Release 1.0.21

3.9.1 Intermediate calculations

[2]: K_gate/ft, K_angle/ft, K_elbow/ft


[2]: (8.0 <Unit('dimensionless')>,
150.0 <Unit('dimensionless')>,
20.00000000000006 <Unit('dimensionless')>)

[3]: K_tot
[3]: 29.991124449003742 𝑑𝑖𝑚𝑒𝑛𝑠𝑖𝑜𝑛𝑙𝑒𝑠𝑠

[4]: v.to(u.ft/u.s)
foot
[4]: 6.414177533606955 second

[5]: fd, ft
[5]: (0.0381948926809522 <Unit('dimensionless')>,
0.01543941031464228 <Unit('dimensionless')>)

3.9.2 Proof system is laminar

[6]: Re.to(u.dimensionless)
[6]: 1675.616699190696 𝑑𝑖𝑚𝑒𝑛𝑠𝑖𝑜𝑛𝑙𝑒𝑠𝑠

3.10 7.10 Piping Systems - Steam

40 bar steam, 450 degrees Celsius flows though a 120 m long horizontal 150mm schedule 80 pipe at a rate of 40000
kg/hr.
There are three 90 degree weld elbows with rc=1.5, 1 fully open class 600 150mm x 100mm venturi class gate valve,
one class 600 150 mm class y pattern globe valve with a seat diameter of 90% the inside pipe diameter (disc fully
lifted).
Calculate the pressure drop through the system.

[1]: from math import *


from fluids.units import *
from thermo.units import Stream

m = 40000*u.kg/u.hr
T = 450*u.degC
P = 40*u.bar

steam = Stream('water', T=T, P=P, m=m)

rho = steam.rho
mu = steam.mu
print('Density = %s' %rho)
print('Viscosity = %s' %mu)

3.10. 7.10 Piping Systems - Steam 517


Fluids Documentation, Release 1.0.21

Density = 12.493325597325969 kilogram / meter ** 3


Viscosity = 2.655716090653184e-05 pascal * second

[2]: L = 120*u.m
NPS, D_pipe, Do_pipe, t = nearest_pipe(Do=150*u.mm, schedule='80')
Q = m/rho
v = Q/(pi/4*D_pipe**2)
Re = Reynolds(rho=rho, mu=mu, D=D_pipe, V=v)
fd = friction_factor(Re=Re, eD=0.0018*u.inch/D_pipe)
K_elbow = bend_rounded(Di=D_pipe, angle=90*u.degrees, fd=fd, bend_diameters=1.5)
K_friction = K_from_f(fd=fd, L=L, D=D_pipe)
K_globe_valve = K_globe_valve_Crane(D1=0.9*D_pipe, D2=D_pipe, fd=fd)
# Angle and inside diameter are taken from example 7.4,
K_gate_valve = K_gate_valve_Crane(D1=100*u.mm, D2=D_pipe, angle=13.115*u.degrees, fd=fd)

K_tot = K_gate_valve + K_globe_valve + 3*K_elbow + K_friction


dP = dP_from_K(K=K_tot, rho=rho, V=v)

print('Crane elbow term = 0.63; calculated = %s' % (3*K_elbow))


print('Crane globe valve term = 1.44; calculated = %s' % (K_globe_valve))
print('Crane gate valve term = 1.22; calculated = %s' % (K_gate_valve))
print('Crane friction term = 12.3; calculated = %s' % (K_friction))
print('Darcy friction factor = %s' %fd)
print('Pressure drop = %s' %dP.to(u.Pa))
Crane elbow term = 0.63; calculated = 0.6059244854416919 dimensionless
Crane globe valve term = 1.44; calculated = 7.9714825451402715 dimensionless
Crane gate valve term = 1.22; calculated = 1.1715334417093926 dimensionless
Crane friction term = 12.3; calculated = 12.522948325321595 dimensionless
Darcy friction factor = 0.015273822640783908 dimensionless
Pressure drop = 388771.6702516167 pascal

This compares terribly to the example, which calculates a pressure drop of 274800 Pa!
Two errors are apparent - their example uses a different coefficient (55) in the globe valve pressure drop equation than
that shown in their appendix (340); and they re-use their prior calculated gate valve, despite the friction factor being
different in this example. This, plus their use of a constant 0.015 friction factor, explains the difference.
The example below uses their calculated globe valve pressure drop and their friction factor. The result (268500 Pa)
compares well with their calculation; the additional decimals and better physical properties explain the rest.

[3]: L = 120*u.m
NPS, D_pipe, Do_pipe, t = nearest_pipe(Do=150*u.mm, schedule='80')
Q = m/rho
v = Q/(pi/4*D_pipe**2)
Re = Reynolds(rho=rho, mu=mu, D=D_pipe, V=v)
fd = 0.015
K_elbow = bend_rounded(Di=D_pipe, angle=90*u.degrees, fd=fd, bend_diameters=1.5)
K_friction = K_from_f(fd=fd, L=L, D=D_pipe)
K_globe_valve = 1.44
# Angle and inside diameter are taken from example 7.4,
K_gate_valve = K_gate_valve_Crane(D1=100*u.mm, D2=D_pipe, angle=13.115*u.degrees, fd=fd)

K_tot = K_gate_valve + K_globe_valve + 3*K_elbow + K_friction


(continues on next page)

518 Chapter 3. Solved Fluids Mechanics Problems


Fluids Documentation, Release 1.0.21

(continued from previous page)


dP = dP_from_K(K=K_tot, rho=rho, V=v)

print('Crane elbow term = 0.63; calculated = %s' % (3*K_elbow))


print('Crane globe valve term = 1.44; calculated = %s' % (K_globe_valve))
print('Crane gate valve term = 1.22; calculated = %s' % (K_gate_valve))
print('Crane friction term = 12.3; calculated = %s' % (K_friction))
print('Darcy friction factor = %s' %fd)
print('Pressure drop = %s' %dP.to(u.Pa))
Crane elbow term = 0.63; calculated = 0.5988647407128814 dimensionless
Crane globe valve term = 1.44; calculated = 1.44
Crane gate valve term = 1.22; calculated = 1.1614815235317342 dimensionless
Crane friction term = 12.3; calculated = 12.29844219732167 dimensionless
Darcy friction factor = 0.015
Pressure drop = 270542.3833530189 pascal

3.11 7.11 Flat heating Coils - Water

Water at 80 degrees Celsius flows through a flat heating coil at a rate of 60 L/min. There are 7 180 degree bends in it.
The coil is 8 m long, with 0.5 m of straight length on the inlet and exit. The r/D of the bends is 4. The pipe is schedule
40, 25 mm pipe.

[1]: from math import *


from fluids.units import *
from thermo.units import Chemical

water = Chemical('water', P=2*u.bar, T=80*u.degC) # P assumed


rho = water.rho
mu = water.mu

Q = 60*u.L/u.min
L = (1*8 + 0.5*2)*u.m

NPS, D_pipe, Do_pipe, t = nearest_pipe(Di=25*u.mm)


v = Q/(pi/4*D_pipe**2)
Re = Reynolds(rho=rho, mu=mu, D=D_pipe, V=v)
fd = friction_factor(Re=Re, eD=0.0018*u.inch/D_pipe)

K_elbow = bend_rounded(Di=D_pipe, angle=180*u.degrees, fd=fd, bend_diameters=5)


K_friction = K_from_f(fd=fd, L=L, D=D_pipe)

K_tot = 7*K_elbow + K_friction


dP = dP_from_K(K=K_tot, rho=rho, V=v)
print('Pressure drop = %s' %dP.to(u.Pa))
Pressure drop = 18501.7753353607 pascal

The value presented in the solution is 19609 Pa. They chose a constant friction factor of 0.024 in this calculation. If
this were used, the result compares much better. Their friction factor can be obtained at a roughness of 0.05 mm.

3.11. 7.11 Flat heating Coils - Water 519


Fluids Documentation, Release 1.0.21

[2]: fd = 0.024
K_elbow = bend_rounded(Di=D_pipe, angle=180*u.degrees, fd=fd, bend_diameters=5)
K_friction = K_from_f(fd=fd, L=L, D=D_pipe)

K_tot = 7*K_elbow + K_friction


dP = dP_from_K(K=K_tot, rho=rho, V=v)
print('Pressure drop = %s' %dP.to(u.Pa))
Pressure drop = 18539.73002741304 pascal

3.12 7.12 Orifice Size for Given Pressure Drop and Velocity

A 12” schedule 40 steel pipe is 60 feet long; it serves to connect water from a reservoir to the atmosphere. The water
is 60 deg F and the elevation distance of the pipe is 12 feet.
The pipe also contains a gate valve 10’ from the entrance. The entrance into the reservoir is at a distance from the wall.
Find the diameter of a standard orifice plate to make the flow velocity exactly 10 ft/s.

[1]: from fluids.units import *


from fluids.constants import g
from math import pi
from scipy.optimize import newton
g = g*u.m/u.s**2

dH = 12*u.foot
L = (60)*u.foot
mu = 1.1*u.cP
rho = 62.364*u.lb/u.ft**3

NPS, Di, Do, t = nearest_pipe(Do=12*u.inch, schedule='40')

v = 10*u.foot/u.s
A = 0.25*pi*Di**2
m = v*A*rho
Re = rho*v*Di/mu

# Approximately match their friction factor, roughness not specified


fd = friction_factor(Re=Re, eD=0.0006*u.inch/Di)
ft = ft_Crane(Di) # Not needed

K_entrance = entrance_distance(Di=Di, method='Crane')


K_exit = exit_normal()
K_gate = K_gate_valve_Crane(D1=Di, D2=Di, angle=0.0*u.degrees)

K_tot = K_entrance + K_exit + K_gate


K_tot += K_from_f(fd=fd, L=L, D=Di)

dP = dP_from_K(K=K_tot, rho=rho, V=v)


k = 1.33

dP_gravity = rho*g*dH
(continues on next page)

520 Chapter 3. Solved Fluids Mechanics Problems


Fluids Documentation, Release 1.0.21

(continued from previous page)

dP_meter = dP_gravity - dP
meter_type = 'ISO 5167 orifice'
orifice_taps = 'corner'

# P2 is assumed - does have an impact but it is minimal


P2 = 1e6*u.Pa
P1 = (P2 + dP_meter*2.5)
print('Numerical solver progress:')
def to_solve(beta):
# Do not know orifice measured dP or C, only actual dP
D2 = Di*beta

# Solve for upstream pressure given actual flow rate and guessed diameter
P1 = differential_pressure_meter_solver(Di, rho, mu, k, D2=D2, P2=P2,
m=m, meter_type=meter_type,
taps=orifice_taps)

# Calculate `C`
C, expansibility = differential_pressure_meter_C_epsilon(Di, D2, m, P1, P2, rho, mu,␣
˓→k,

meter_type=meter_type, taps=orifice_taps)

# Caclulate what the guessed orifice actual dP is


calc_dP = dP_orifice(D=Di, Do=D2, P1=P1, P2=P2, C=C)
err = (calc_dP - dP_meter).to_base_units()
print(err.magnitude, beta, C.magnitude)
return err.magnitude
beta = newton(to_solve, .5, tol=1e-13)
print('Size is:')
print((Di*beta).to(u.inch))
Numerical solver progress:
131456.15219585435 0.5 0.6039115256189872
131207.12176475654 0.50015 0.6039153509057876
45473.862634446166 0.5791807761904849 0.6054825449702658
22370.32441146282 0.6210574900828658 0.6055902955169561
7540.117114796503 0.6616052047236758 0.6047579998102253
1943.8952815589291 0.6822208651128452 0.603821274023946
240.43355375056126 0.689381890202793 0.6033941586008842
9.046411468669248 0.6903926265655572 0.6033292369143312
0.0442207298365247 0.6904321427501375 0.6033266747856294
8.184524631360546e-06 0.6904323368622791 0.6033266621954346
4.729372449219227e-11 0.6904323368982127 0.6033266621931039
Size is:
8.241152594519694 inch

The answer given in Crane is 7.94 inches, but only three iterations are performed there.

3.12. 7.12 Orifice Size for Given Pressure Drop and Velocity 521
Fluids Documentation, Release 1.0.21

3.13 7.13 Flow given in English Units - Oil

Fuel oil at a specific gravity of 0.815 (kinematic viscosity of 2.7 centistokes) flows at 2 inch, schedule 40 steel pipe 100
foot long at a rate of 2 US gallons/second.
Calculate the pressure drop in bars and psi.

[1]: from math import *


from fluids.units import *
from thermo import *

SG = 0.815
rho = SG*999.1*u.kg/u.m**3
nu = 2.7*u.centistokes
mu = nu_mu_converter(rho, nu=nu)
Q = 2*u.gal/u.s
L = 100*u.foot

NPS, D_pipe, Do_pipe, t = nearest_pipe(Di=2*u.inch)


v = Q/(pi/4*D_pipe**2)
Re = Reynolds(rho=rho, mu=mu, D=D_pipe, V=v)
fd = friction_factor(Re=Re, eD=0.0018*u.inch/D_pipe)
print('Darcy friction factor = %s' %fd)
K_friction = K_from_f(fd=fd, L=L, D=D_pipe)
dP = dP_from_K(K=K_friction, rho=rho, V=v)
print('Pressure drop = %s' %dP.to(u.Pa))
print('In imperial, pressure drop = %s' %dP.to(u.psi))
Darcy friction factor = 0.02270215687134065 dimensionless
Pressure drop = 65759.12280469094 pascal
In imperial, pressure drop = 9.537554406715385 pound_force_per_square_inch

The pressure drop calculated in the example is 66500 Pa (9.65 psi). The discrepancy is from their friction factor; they
use 0.0230. The result is matched exactly if their friction factor is used.

[2]: fd = 0.023
print('Darcy friction factor = %s' %fd)
K_friction = K_from_f(fd=fd, L=L, D=D_pipe)
dP = dP_from_K(K=K_friction, rho=rho, V=v)
print('Pressure drop = %s' %dP.to(u.Pa))
print('In imperial, pressure drop = %s' %dP.to(u.psi))
Darcy friction factor = 0.023
Pressure drop = 66621.85593551381 pascal
In imperial, pressure drop = 9.662683268274836 pound_force_per_square_inch

522 Chapter 3. Solved Fluids Mechanics Problems


Fluids Documentation, Release 1.0.21

3.14 7.14 Bernoulli’s Theorem-Water

Water at 15 degrees Celsius is flowing through the piping system shown in Crane TP 410M’s example at 1500 L/min.
Calculate the velocity in both 4 and 5 inch sizes; and the pressure drop.
Note: This problem suggests to handle the changing size elbow by adding on the result of a smooth expansion, which
is also used here.

[1]: from math import *


from fluids.units import *
from thermo.units import Chemical

water = Chemical('water', P=2*u.bar, T=15*u.degC)


rho = water.rho
mu = water.mu

Q = 1500*u.L/u.min
r_d = 1.5
_, D1, _, _ = nearest_pipe(Di=100*u.mm)
_, D2, _, _ = nearest_pipe(Di=125*u.mm)
L1 = 34*u.m
L2 = (22+45)*u.m
dH = 22*u.m
beta = D1/D2

V1 = Q/(pi/4*D1**2)
V2 = Q/(pi/4*D2**2)
Re1 = Reynolds(rho=rho, mu=mu, V=V1, D=D1)
Re2 = Reynolds(rho=rho, mu=mu, V=V2, D=D2)
fd1 = friction_factor(Re=Re1, eD=0.0018*u.inch/D1)
fd2 = friction_factor(Re=Re2, eD=0.0018*u.inch/D2)
fd = (fd1+fd2)/2

dP = rho*u.gravity*dH

K_D1 = bend_rounded(Di=D1, angle=90*u.degrees, fd=fd, bend_diameters=r_d)


K_D1 += diffuser_conical(D1, D2, angle=30*u.degrees, fd=fd)
K_D1 += K_from_f(fd=fd1, L=L1, D=D1)

K_D2 = bend_rounded(Di=D2, angle=90*u.degrees, fd=fd, bend_diameters=r_d)


K_D2 += K_from_f(fd=fd2, L=L2, D=D2)

dP += dP_from_K(K=K_D1, rho=rho, V=V1)


dP += dP_from_K(K=K_D2, rho=rho, V=V2)
dP.to(u.Pa)
[1]: 262809.7611610049 pascal

The result calculated in Crane’s TP 410m is 26450 Pa. Their friction factor is 0.018. Again, it that value is used, the
result calculated matches theirs - except this is off by an order of magnitude.
In this edition, the gravitational term was forgotten. The prior 8th edition lists a value of 2.6 bar as the result for this
problem. If their friction factor is used with this model, the following calculates a pressure drop of 2.62 bar.

3.14. 7.14 Bernoulli’s Theorem-Water 523


Fluids Documentation, Release 1.0.21

[2]: fd = fd1 = fd2 = .018


dP = rho*u.gravity*dH

K_D1 = bend_rounded(Di=D1, angle=90*u.degrees, fd=fd, bend_diameters=r_d)


K_D1 += contraction_round(D1, D2, r_d*D1)
K_D1 += K_from_f(fd=fd1, L=L1, D=D1)

K_D2 = bend_rounded(Di=D2, angle=90*u.degrees, fd=fd, bend_diameters=r_d)


K_D2 += K_from_f(fd=fd2, L=L2, D=D2)

dP += dP_from_K(K=K_D1, rho=rho, V=V1)


dP += dP_from_K(K=K_D2, rho=rho, V=V2)
dP.to(u.Pa)
[2]: 262439.4308380222 pascal

3.15 7.15 Power Required for Pumping

Water at 70 deg F is pumped through a sketched system at a rate of 100 gal/min.


Find the total discharge head brake horsepower for a pump with an efficiency of 70%.

[1]: from fluids.units import *


from math import pi
L = (30+100+70+300)*u.foot
dH = 400*u.foot
efficiency = 0.7

Q = 100*u.gallon/u.min
mu = 0.95*u.cP
rho = 62.298*u.lb/u.ft**3

NPS, Di, Do, t = nearest_pipe(Do=3*u.inch, schedule='40')

Di_reducer = nearest_pipe(Do=2.5*u.inch, schedule='40')[1]

A = 0.25*pi*Di**2
v = Q/A
Re = rho*v*Di/mu
fd = friction_factor(Re=Re, eD=0.0022*u.inch/Di)

K_exit = exit_normal()
K_gate = K_gate_valve_Crane(D1=Di, D2=Di, angle=0.0*u.degrees)
K_elbow = bend_rounded(Di=Di, angle=90*u.degrees, Re=Re, method='Crane standard')
K_lift_valve = K_lift_check_valve_Crane(D1=Di_reducer, D2=Di, angled=False)

K_tot = K_exit + K_gate + 4*K_elbow + K_lift_valve


K_tot += K_from_f(fd=fd, L=L, D=Di)

dP = dP_from_K(K=K_tot, rho=rho, V=v) + rho*dH*1*u.gravity


dP.to(u.psi), v.to(u.foot/u.s)

(continues on next page)

524 Chapter 3. Solved Fluids Mechanics Problems


Fluids Documentation, Release 1.0.21

(continued from previous page)


head = head_from_P(dP, rho).to(u.foot)
print('head = %s' %head)
power = Q*dP/efficiency
print('power = %s' %(power.to(u.hp)))
head = 420.3499305270172 foot
power = 15.154490724520906 horsepower

The values given in Crane are 421 feet of head and 15.2 hp.

3.16 7.16 Air Lines

Air at 65 psig and 115 deg F flows through 75 feet of 1” schedule 40 pipe at a rate of 100 cubic feet/minute.
Find the pressure drop in psi and the velocity in feet per minute at the inlet and the outlet.

[1]: from fluids.units import *


from math import pi
P1 = 65*u.psi + 1*u.standard_atmosphere

[2]: # Take nitrogen-oxygen as air


from thermo import PRMIX
zs = [0.79, 0.21]
Tcs = [126.2, 154.58]
Pcs = [3394387.5, 5042945.25]
omegas = [0.04, 0.021]

eos_flowing = PRMIX(T=(115*u.degF).to(u.K).magnitude, P=P1.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)


V_ratio = eos_flowing.V_g/eos_std.V_g
print('Ratio of actual to standard flow: %s' %(V_ratio))
Ratio of actual to standard flow: 0.20407676712438672

[3]: NPS, Di, Do, t = nearest_pipe(NPS=1, schedule='40')


Q = V_ratio*100*u.ft**3/u.min
L = 75*u.ft

MW = 28.958*u.g/u.mol
Vm = eos_flowing.V_g*u.m**3/u.mol
rho = (Vm)**-1*MW

mu = 1.93e-5*u.Pa

A = 0.25*pi*Di**2

v0 = Q/A
m = v0*A*rho

Re = rho*v0*Di/mu
(continues on next page)

3.16. 7.16 Air Lines 525


Fluids Documentation, Release 1.0.21

(continued from previous page)


fd = friction_factor(Re=Re, eD=0.0018*u.inch/Di)
P2 = isothermal_gas(rho=rho, fd=fd, P1=P1, P2=None, L=L, D=Di, m=m)

print('pressure drop = %s' %(P1-P2))


print('upstream speed = %s' %(v0.to(u.ft/u.min)))
pressure drop = 2.714842967501866 pound_force_per_square_inch
upstream speed = 3401.458438219272 foot / minute

[4]: eos_end = PRMIX(T=(115*u.degF).to(u.K).magnitude, P=P2.to(u.Pa).magnitude, zs=zs,␣


˓→Tcs=Tcs, Pcs=Pcs, omegas=omegas)

Vm2 = eos_end.V_g*u.m**3/u.mol
rho2 = (Vm2)**-1*MW
print('downstream speed = %s' %((v0*rho/rho2).to(u.ft/u.min)))
downstream speed = 3521.622706075368 foot / minute

The answers given in Crane are 2.61 psi; and 3367 and 3484 ft/min respectively. A tabular method is used there of
limited accuracy.
For compressible fluids, there is a benefit to breaking the problem up into sections and performing the calculation to
each of them, preferably while including the JT effect and heat loss/gain.

3.17 7.17 Sizing of Pump for Oil Pipelines

Crude oil (30 degree API) at 15.6 C with a viscosity of 75 Universal Saybolt seconds flows down a 12” Schedule 30
steel pipe with a flow rate of 1900 barrels/hour.
The pipeline is 50 miles long, and the net elevation change is an increase of 2000 feet above the initial pump. The pump
has an efficiency of 67%.
Calculate the brake horsepower of the pump.
[1]: from fluids.units import *
from math import pi
L = 50*u.miles
dH = 2000*u.foot
efficiency = 0.67

# Note in pint the default barrel is for US dry barrel


Q = 1900*u.oil_barrel/u.hour
mu = 12.5*u.cP
rho = 54.64*u.lb/u.ft**3

NPS, Di, Do, t = nearest_pipe(NPS=12, schedule='30')

A = 0.25*pi*Di**2
v = Q/A
Re = rho*v*Di/mu
print(Re.to_base_units())
fd = friction_factor(Re=Re, eD=0.0022*u.inch/Di)
print(fd)

(continues on next page)

526 Chapter 3. Solved Fluids Mechanics Problems


Fluids Documentation, Release 1.0.21

(continued from previous page)


K_tot = K_from_f(fd=fd, L=L, D=Di)
dP = dP_from_K(K=K_tot, rho=rho, V=v) + rho*dH*1*u.gravity
dP.to(u.psi), v.to(u.foot/u.s)

head = head_from_P(dP, rho).to(u.foot)


print('head = %s' %head)
power = Q*dP/efficiency
print('power = %s' %(power.to(u.hp)))
24364.090937022276 dimensionless
0.02511025708497868 dimensionless
head = 3413.763958141052 foot
power = 1499.9449484211073 horsepower

The listed values are 3406.5 feet and 1496 hp, however a shortcut formula is used there.

3.18 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)

(continues on next page)

3.18. 7.18 Gas 527


Fluids Documentation, Release 1.0.21

(continued from previous page)


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))

528 Chapter 3. Solved Fluids Mechanics Problems


Fluids Documentation, Release 1.0.21

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.

3.19 7.19 Water

Water at 60 deg F flows from a reservoir through a piping system according to a diagram in the book. The reservoir
has a head of 11.5 feet.
The system is:

entrance

3" miter bend

standard gate valve open

10 feet of 3 inch pipe (sched 40)

sudden contraction

20 feet of 2 inch pipe (sched 40)

exit

Find the flow rate in gallons/minute.

[1]: from fluids.units import *


from math import pi
L1 = 10*u.foot
L2 = 20*u.foot

dH = 11.5*u.foot

mu = 1.1*u.cP
rho = 62.364*u.lb/u.ft**3

NPS1, Di1, Do1, t1 = nearest_pipe(NPS=3, schedule='40')


NPS2, Di2, Do2, t2 = nearest_pipe(NPS=2, schedule='40')

A1 = 0.25*pi*Di1**2
A2 = 0.25*pi*Di2**2

ft1 = ft_Crane(Di1)
ft2 = ft_Crane(Di2)

roughness = 0.0018*u.inch

dP = rho*dH*1*u.gravity

(continues on next page)

3.19. 7.19 Water 529


Fluids Documentation, Release 1.0.21

(continued from previous page)


fd1 = fd2 = 0.018 # assumed; solve with sequential substitution
# Take the 3" diameter as the reference for K
for i in range(10):
K_entrance = entrance_sharp(method='Crane')
K_exit = change_K_basis(exit_normal(), 2*u.inch, 3*u.inch)
K_gate = K_gate_valve_Crane(D1=Di1, D2=Di1, angle=0.0*u.degrees)
K_elbow = bend_miter(Di=Di1, angle=90*u.degrees, method='Crane')
K_contraction = change_K_basis(contraction_conical_Crane(3*u.inch, 2*u.inch, l=0*u.
˓→m), 2*u.inch, 3*u.inch)

K_tot = K_entrance + K_elbow + K_gate + K_exit + K_contraction


K_f1 = K_from_f(fd=fd1, L=L1, D=Di1)
K_f2 = change_K_basis(K_from_f(fd=fd2, L=L2, D=Di2), 2*u.inch, 3*u.inch)
K_tot += K_f1 + K_f2

K_tot_basis2 = change_K_basis(K_tot, 3*u.inch, 2*u.inch)

v1 = (2*dP/(K_tot*rho))**0.5
v2 = (2*dP/(K_tot_basis2*rho))**0.5

Re1 = rho*v1*Di1/mu
Re2 = rho*v2*Di2/mu
fd1 = friction_factor(Re=Re1, eD=roughness/Di1)
fd2 = friction_factor(Re=Re2, eD=roughness/Di2)

Q = A1*v1
Q.to(u.gal/u.min)
gallon
[1]: 136.70828839615876 minute

The solution given in Crane where they also perform iterations is 137 gal/min.

3.20 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
(continues on next page)

530 Chapter 3. Solved Fluids Mechanics Problems


Fluids Documentation, Release 1.0.21

(continued from previous page)


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.

3.21 7.21 Gases at Sonic Velocity

Coke oven gas has a specific gravity of 0.42, a header pressure of 125 psig, and is at 140 deg F. It flows through 20 feet
of 3” schedule 40 pipe and is discharged to the atmosphere.
Find the flow rate in standard cubic feet per hour.

[1]: from fluids.units import *


from math import pi
SG = 0.42
P1 = 125*u.psi + 1.0*u.atmosphere
P2 = 1.0*u.atmosphere
roughness = 0.0018*u.inch

L = 20*u.foot
(continues on next page)

3.21. 7.21 Gases at Sonic Velocity 531


Fluids Documentation, Release 1.0.21

(continued from previous page)


mu = 1.8e-5 # good guess

NPS, Di, Do, t = nearest_pipe(NPS=3, schedule='40')


A = 0.25*pi*Di**2

fd = 0.0175 # initial guess


P_choke = P_isothermal_critical_flow(P=P1, fd=fd, L=L, D=Di)*(1+1e-10)
P_rat_rho = (0.5*(P1 + P_choke)/(1.0*u.atmosphere)).to_base_units()

for i in range(5):
rho = 1.2*u.kg/u.m**3*SG*P_rat_rho
m = isothermal_gas(rho, fd, P1=P1, P2=P_choke, L=L, D=Di)
Q_actual = (m/rho).to(u.ft**3/u.hour)
Q_std = Q_actual*P_rat_rho # convert to SI
v = Q_actual/A
Re = rho*v*Di/mu
fd = friction_factor(Re=Re, eD=roughness/Di)
K = exit_normal() + entrance_sharp(method='Crane')

# Increase fd so it accounts for all the extra losses


fd += K*Di/L
P_choke = P_isothermal_critical_flow(P=P1, fd=fd, L=L, D=Di)*(1+1e-10)
P_rat_rho = (0.5*(P1 + P_choke)/(1.0*u.atmosphere)).to_base_units()
print(Q_std)
1176795.8398551396 foot ** 3 / hour
922482.9941880251 foot ** 3 / hour
922210.5721001471 foot ** 3 / hour
922210.2011294398 foot ** 3 / hour
922210.2006241237 foot ** 3 / hour

The result given in Crane is 1028000 ft^3/hour, which is 10% higher than this result. The crane result assumes isentropic
flow whereas this is for isothermal flow.
THe most accurate answer that can be obtained for this case would be quite a bit better than either solution here. A
thermodynamic calculation of the direct conditions of choke:
speed of sound of the fluid is the speed of the fluid
energy is maintained

However, without the composition of the gas there is no point in trying to obtain a better result.

3.22 7.22 Compressible Fluids at Subsonic Velocity

Given that air is at a pressure of 19.3 psig and a temperature of 100 deg F and is flowing out of a 1/2” schedule 80 pipe
into the atmosphere. Find the flow rate of air in standard cubic feet per hour.
[1]: from fluids.units import *
from math import pi
dP = 19.3*u.psi
P = dP + 1*u.atm
P2 = 1*u.atm
(continues on next page)

532 Chapter 3. Solved Fluids Mechanics Problems


Fluids Documentation, Release 1.0.21

(continued from previous page)


T = 100*u.degF
L = 10*u.foot
NPS, D_pipe, Do_pipe, t = nearest_pipe(NPS=0.5, schedule=80)
A = 0.25*pi*D_pipe**2

fd = 0.0275 # assumed, initial guess


mu = 1.8e-8*u.Pa*u.s

[2]: # Take nitrogen-oxygen as air, and find the density and ratio
from thermo import PRMIX, Vm_to_rho
zs = [0.79, 0.21]
Tcs = [126.2, 154.58]
Pcs = [3394387.5, 5042945.25]
omegas = [0.04, 0.021]
MWs = [28.0134, 31.9988]
MW = sum(MWs[i]*zs[i] for i in range(2))

eos_flowing = PRMIX(T=(T).to(u.K).magnitude, P=P.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)


V_ratio = eos_flowing.V_g/eos_std.V_g
print('Ratio of actual to standard flow: %s' %(V_ratio))

rho = Vm_to_rho(eos_flowing.V_g, MW)*u.kg/u.m**3


print('Air density: %s' %(rho))
Ratio of actual to standard flow: 0.4663198131346627
Air density: 2.618303870512124 kilogram / meter ** 3

[3]: for i in range(5):


# Problem says to consider 1 exit, and compressible friction
K = K_from_f(fd=fd, L=L, D=D_pipe)
K += exit_normal()
# lump the two losses together for the `isothermal_gas` function
fd_tot = f_from_K(L=L, D=D_pipe, K=K)
m = isothermal_gas(rho=rho, fd=fd_tot, P1=P, P2=P2, L=L, D=D_pipe)
Q = m/rho
v = Q/A
# update frictoin factor
Re = Reynolds(D=D_pipe, rho=rho, mu=mu, V=v)
fd = friction_factor(Re=Re, eD=0.0018*u.inch/D_pipe)
Q_std = Q/V_ratio
print('Flow rate = %s' %(Q_std.to(u.ft**3/u.hour)))
Flow rate = 3773.572213074694 foot ** 3 / hour

The solution given in Crane is 3762 scfh. The solution there uses a simpler formula and does not iterate to converge
the friction factor.

3.22. 7.22 Compressible Fluids at Subsonic Velocity 533


Fluids Documentation, Release 1.0.21

3.23 7.23 Flow Through Orifice Meters

A square edged orifice of 2” diameter is installed in a 4” schedule 40 pipe. A mercury manometer is connected between
standard taps 1D upstream and 0.5D downstream.
a) Find the theoretical calibration constant for the meter when 60 deg F water flows through the pipe in the fully
turbulent region.
b) Find the flow rate of 60 deg F water when the mercury deflection is 4.4”

[1]: from fluids.units import *


P1 = 2*u.bar # assumed
T = 60*u.degF
NPS, D_pipe, Do_pipe, t = nearest_pipe(NPS=4, schedule=40)
mu = 1.1e-3*u.Pa*u.s # viscosity of water
rho = 62.364*u.lb/u.ft**3 # density of water
Do = 2*u.inch

[2]: # b)
dP = (4.4*u.inch_Hg - 4.4*u.inch_H2O_60F)
P2 = P1 - dP
m = differential_pressure_meter_solver(D=D_pipe, rho=rho, mu=mu, k=1e20, D2=Do, P1=P1,␣
˓→P2=P2,

meter_type='ISO 5167 orifice', taps='D and D/2')


Q = (m/rho).to(u.gal/u.min)
Q
gallon
[2]: 105.73900650508155 minute

[3]: # a)
C, _ = differential_pressure_meter_C_epsilon(D=D_pipe, rho=rho, m=m, mu=mu, k=1e20,␣
˓→D2=Do, P1=P1, P2=P2,

meter_type='ISO 5167 orifice', taps='D and D/2')


C, flow_coefficient(D_pipe, Do, C)
[3]: (0.6067029339232126 <Unit('dimensionless')>,
0.6260667537160854 <Unit('dimensionless')>)

Crane TP 410 reports a flow coefficient of 0.625 and a flow rate of 106 gal/min, indicating the problem benefited from
the iteration little.

3.24 7.24 Laminar Flow

3.24.1 Objective: Rate an orifice plate in laminar flow

Problem statement: calculate the Reynolds number to determine the type of fluid
Given: S.A.E. 10W oil flows through a 3” schedule 40 pipe. It has a measured delta P of 0.4 psi. The orifice plate has
a 2.15” diameter bore, and is a standard sharp-edged orifice. Find the flow rate through the orifice in gallons/minute.

[1]: from fluids.units import *


from math import pi

(continues on next page)

534 Chapter 3. Solved Fluids Mechanics Problems


Fluids Documentation, Release 1.0.21

(continued from previous page)


NPS, Di, Do, t = nearest_pipe(NPS=3, schedule='40')
A = 0.25*pi*Di*Di
D2 = 2.15*u.inch
mu = 40*u.cP # given
rho = 53.6*u.lb/u.ft**3

# Assume an absolute pressure of 5 bar.


dP = 0.4*u.psi
P1 = 5*u.bar
P2 = P1-dP
k = 1.3 # assumed

[2]: # First calculate the orifice with the standard formula


m = differential_pressure_meter_solver(D=Di, rho=rho, mu=mu, k=k, D2=D2, P1=P1, P2=P2,
m=None, meter_type='ISO 5167 orifice',
taps='corner')
Q = (m/rho).to_base_units()
print('Flow rate is: %s'% Q.to(u.gal/u.min))
v = Q/A
Re = rho*v*Di/mu
Re.to_base_units()
Flow rate is: 88.00974933637421 gallon / minute
[2]: 1947.5090707193106 𝑑𝑖𝑚𝑒𝑛𝑠𝑖𝑜𝑛𝑙𝑒𝑠𝑠
Because the flow rate is laminar, outside the range of the ISO formula, we turn to another set of data - a set of CFD
results developed for laminar flow by Hollingshead.

[3]: # First calculate the orifice with the standard formula


m = differential_pressure_meter_solver(D=Di, rho=rho, mu=mu, k=k, D2=D2, P1=P1, P2=P2,
m=None, meter_type='Hollingshead orifice')
Q = (m/rho).to_base_units()
print('Flow rate is: %s'% Q.to(u.gal/u.min))
v = Q/A
Re = rho*v*Di/mu
Re.to_base_units()
Flow rate is: 77.16025233085325 gallon / minute
[3]: 1707.4277843809423 𝑑𝑖𝑚𝑒𝑛𝑠𝑖𝑜𝑛𝑙𝑒𝑠𝑠
The answer given in Crane is that a calibration for the meter must be provided. They assume a C of 0.75. The value of
C according to Hollingshead is below.

[4]: differential_pressure_meter_C_epsilon(D=Di, D2=D2, m=m, P1=P1, P2=P2, rho=rho, mu=mu,␣


˓→k=k,

meter_type='Hollingshead orifice')[0]
[4]: 0.7156763185721802 𝑑𝑖𝑚𝑒𝑛𝑠𝑖𝑜𝑛𝑙𝑒𝑠𝑠

3.24. 7.24 Laminar Flow 535


Fluids Documentation, Release 1.0.21

3.25 7.25 Rectangular Duct - Application of Hydraulic Radius to Flow


Problems

Given a rectangular concrete overflow aqueduct is 25 feet high and 16.5 feed wide. Its roughness is 0.01 feet. The
height of the water in the reservoir is 200 feet, and the length of the aqueduct is 1000 feet.
Find the discharge rate (ft^3/s).

[1]: from fluids.units import *


from math import pi
rho = 62.364*u.lb/u.ft**3
mu = 1.1*u.cP

W = 16.5*u.foot
Hw = 25*u.foot
A = W*Hw
Pw = Hw*2 + W*2

Rh = A/Pw
Dh = 4.0*Rh

eD = .01*u.foot/Dh
H = 200*u.foot
L = 1000*u.foot

[2]: fd = 0.017 # assumed initial guess


Re = 1E5
for i in range(5):
K = K_from_f(fd=fd, L=L, D=Dh)
K += entrance_sharp()
K += exit_normal()

v = (2*u.gravity*H/K)**0.5
Q = A*v
print('Flow rate = %s' %(Q.to(u.ft**3/u.s)))
Re = Reynolds(D=Dh, rho=rho, mu=mu, V=v)
fd = friction_factor(Re=Re, eD=eD)
Flow rate = 30049.50805498884 foot ** 3 / second
Flow rate = 30135.24506735869 foot ** 3 / second
Flow rate = 30135.24898850496 foot ** 3 / second
Flow rate = 30135.24898868379 foot ** 3 / second
Flow rate = 30135.248988683794 foot ** 3 / second

The solution given in Crane is 30600 ft^3/s, without iteration.


We can also solve the problem using the manning formula, designed for open flow. Different values of the manning n
coefficient give different results, but a likely value for concrete yields a surprisingly different answer than the hydraulic
radius approach.
[3]: S = H/L # slope, m/m
# n = 0.0106*u.s/u.m**(1/3) # https://www.usbr.gov/tsc/techreferences/hydraulics_lab/
˓→pubs/HYD/HYD-585.pdf

n = 0.013*u.s/u.m**(1/3)
(continues on next page)

536 Chapter 3. Solved Fluids Mechanics Problems


Fluids Documentation, Release 1.0.21

(continued from previous page)

v = V_Manning(Rh=Rh, S=S, n=n)


(v*A).to(u.ft**3/u.s)
[3]: 61407.46714336768 foot3
second

3.26 7.26 Pipe Partially Filled with Flowing Water

Given a cast iron pipe is 2/3 filled with a steady, uniform flow of water at 60 deg F. The pipe has an inside diameter of
24” and a slope of .75”/foot
Find the flow rate in gallons/minute.

[1]: from fluids.units import *


from math import pi
Di = 24*u.inch
depth = 2/3*Di
S = 0.75*u.inch/u.ft
rho = 62.364*u.lb/u.ft**3
mu = 1.1*u.cP
eD = 0.00036 # roughness not given in problem, only relative roughness

[2]: # Use the TANK class to make the geometry easier


tank = TANK(D=Di, L=1e-100*u.m, horizontal=True)
A = tank.SA_from_h(depth)/2 # wetted surface area of a paper thin tank - divide by two␣
˓→as there is only one side

tank = TANK(D=Di, L=1e100*u.m, horizontal=True)


P = tank.SA_from_h(depth)/tank.L

Rh = A/P
Dh = 4*Rh
A, P, Rh, Dh
[2]: (0.20670024467339204 <Unit('meter ** 2')>,
1.1647220208174018 <Unit('meter')>,
0.1774674480081778 <Unit('meter')>,
0.7098697920327112 <Unit('meter')>)

[3]: # 10 meter length basis assumed


L = 10.0*u.m
dH = L*S
dP = dH*rho*u.gravity

fd = .0155 # initial guess


for i in range(5):
K = K_from_f(fd=fd, L=L, D=Dh)
v = (2*dP/(K*rho))**0.5
Q = A*v
# update friction factor
Re = Reynolds(D=Dh, rho=rho, mu=mu, V=v)
(continues on next page)

3.26. 7.26 Pipe Partially Filled with Flowing Water 537


Fluids Documentation, Release 1.0.21

(continued from previous page)


fd = friction_factor(Re=Re, eD=eD)
Q.to(u.gal/u.min)
gallon
[3]: 24410.948055443227 minute

The solution given in Crane is 24500 gpm without iteration.

3.27 7.27 Sizing Control Valves for Liquid Service

Given 250 gpm of condensate from a pressurized condensate tank, is cooled from 225 deg F to 160 deg F in a heat
exchanger, then pumped to a 50 psig heater.
The inlet and outlet pipe of the control valve is schedule 40, with no valves or fittings near the control valve. The system
is located in a facility near sea level.
A single port globe style valve is to be added.
Find an appropriate size valve for the level control.
The valve options are 2”, 2.5”, 3”, or 4”; with Cvs of 41, 73, 114, and 175 respectively.

[1]: from fluids.units import *

rho = 60.998*u.lb/u.ft**3
mu = 0.39*u.cP
Psat = 4.75*u.psi
Pc = 3198*u.psi

Q = 250*u.gal/u.min
P1 = 80.6*u.psi
P2 = 70.8*u.psi

NPS, D_pipe, Do_pipe, t = nearest_pipe(NPS=4, schedule=40)

Cvs = [41*u.gal/u.min, 73*u.gal/u.min, 114*u.gal/u.min, 175*u.gal/u.min]


D_valves = [2*u.inch, 2.5*u.inch, 3.0*u.inch, 4*u.inch]

for d, Cv in zip(D_valves, Cvs):


Kv = size_control_valve_l(rho=rho, Psat=Psat, Pc=Pc, mu=mu, P1=P1, P2=P2, Q=Q, D1=D_
˓→pipe, D2=D_pipe,

d=d, FL=0.9, Fd=1, allow_choked=True,


allow_laminar=True, full_output=False)
Cv_calc = Kv_to_Cv(Kv)
if Cv > Cv_calc:
print('Minimum size is %s' %d)
break
print('Calculated Cv is %s' %(Cv_calc))
Minimum size is 3.0 inch
Calculated Cv is 80.00778994084568 gallon / minute

Crane reports a Cv of 79.94. No iteration is required in this problem, except in the control valve sizing function itself.

538 Chapter 3. Solved Fluids Mechanics Problems


Fluids Documentation, Release 1.0.21

3.28 7.28 Checking for Choked Flow Conditions in a Control Valve

Given the data from example 7.27, with a FL of 0.9. Confirm that choke will not occur in the control valve.

[1]: from fluids.units import *


Psat = 4.75*u.psi
Pc = 3198*u.psi
P1 = 80.6*u.psi
P2 = 70.8*u.psi

P2_choke = control_valve_choke_P_l(Psat=Psat, Pc=Pc, FL=0.9, P1=P1)

ratio = (P2/P2_choke).to_base_units()
assert ratio.magnitude > 1

P2_choke.to(u.psi), P2
[1]: (18.966081253330014 <Unit('pound_force_per_square_inch')>,
70.8 <Unit('pound_force_per_square_inch')>)

We can calculate the choke pressure directly thanks to the nice ISA equations. With control_valve_choke_P_l, we
calculate the downstream pressure required for choke flow to form. So long as P2 is larger than the choke pressure, no
choke will occur.
Crane gives two solutions, one complicated and not necessary, and one that works on the same equation as
control_valve_choke_P_l. Crane calculates FLP to use with that equation but only FL is supposed to be used,
so they get a choke pressure of 20.8 psi instead of 19 psi here.

3.29 7.29 Orifice Flow Rate Calculation

Given a differential pressure of 17 kPa is measured across taps located 1D upstream/0.5D downstream from the inlet
face of a 50 mm ID orifice plate in an 80 mm schedule 80 steel pipe carrying water 15 deg C. Find the flow rate in
gallons/minute.

[1]: from fluids.units import *


from thermo.units import Chemical

P1 = 2*u.bar # The full set of equations requires actual pressures not just the pressure␣
˓→difference, so an initial pressure of 2 bar is assumed.

P2 = P1 - 17*u.kPa
taps = 'D'
meter_type = 'ISO 5167 orifice'
Do = 50*u.mm

NPS, D, _, t_pipe = nearest_pipe(Do=80*u.mm, schedule=80)

D
[1]: 0.07366 meter

[2]: water = Chemical('water', T=15*u.degC, P=P1)


rho = water.rho
mu = water.mu
(continues on next page)

3.28. 7.28 Checking for Choked Flow Conditions in a Control Valve 539
Fluids Documentation, Release 1.0.21

(continued from previous page)


k = water.isentropic_exponent
rho, mu, k
[2]: (999.149354395164 <Unit('kilogram / meter ** 3')>,
0.0011375132802133906 <Unit('pascal * second')>,
1.3295293955513776 <Unit('dimensionless')>)

[3]: m = differential_pressure_meter_solver(D=D, D2=Do, P1=P1, P2=P2, rho=rho, mu=mu, k=k,␣


˓→meter_type=meter_type, taps=taps)

print(m)
Q = m/rho
print(Q.to('L/min'))
7.704277411670788 kilogram / second
462.65019605609893 liter / minute

The answer given in TP410M is 478 gallons/minute; however the errata specifies this value is in units of liters/minute
instead.
This calculation matches their result well, given they did not include expansivity in their calculations and read a value
of C from a graph.
A calculator at flow of fluids, which also does not include expansivity, gives an answer of 476.777 L/min, along with
7.93916 kg/s (http://www.flowoffluids.com/calculators/flow-through-orifices.aspx).

3.30 7.30 Nozzle Sizing Calculations

3.30.1 Objective: Size a long-radius venturi nozzle flow meter

A system is designed with a flow rate of 225 gpm of water at 60 F flowing through 6” schedule 40 pipe. A long-radius
nozzle flow has been requested. A measured head loss of 4 feet is the design measurement, with 1D upstream and 1/2D
downstream taps.
Find the required diameter of the nozzle.

[1]: from fluids.units import *


from math import pi

mu = 1.1*u.cP
rho = 62.364*u.lb/u.ft**3

NPS, Di, Do, t = nearest_pipe(NPS=6, schedule='40')


A = 0.25*pi*Di*Di

dP = 4*u.feet_H2O

P1 = 10*u.bar # assumed, not very important


P2 = P1 - dP
k = 1.3 # not important

Q = 225*u.gal/u.min
m = Q*rho

540 Chapter 3. Solved Fluids Mechanics Problems


Fluids Documentation, Release 1.0.21

[2]: Do = differential_pressure_meter_solver(D=Di, rho=rho, mu=mu, k=k, P1=P1, P2=P2,


m=m, meter_type='long radius nozzle',
taps='D')
print('Nozzle diameter found to be %s.' %(Do.to(u.inch)))
Nozzle diameter found to be 2.405956560384632 inch.

The solution given in Crane is 2.40 inches after two iterations and has an error of 0.4 gpm, whereas the answer above
has almost zero theoretical error.

3.31 7.31 NPRD Calculations

The Non-recoverable pressure drop (NRPD) is the permanent pressure drop associated with the flow through the mea-
surement device. Find the NPRD for example 7.30.

[3]: C, epsilon = differential_pressure_meter_C_epsilon(D=Di, D2=Do, m=m, P1=P1, P2=P2,␣


˓→rho=rho, mu=mu, k=k,

meter_type='long radius nozzle')


C
[3]: 0.9839001432570909 𝑑𝑖𝑚𝑒𝑛𝑠𝑖𝑜𝑛𝑙𝑒𝑠𝑠

[4]: dP = differential_pressure_meter_dP(D=Di, D2=Do, P1=P1, P2=P2, C=C,


meter_type='long radius nozzle')

dP.to(u.psi)
[4]: 1.2691031737597311 pound_force_per_square_inch

The solution given in Crane is 1.272 psi.

3.32 7.32 NPSH Available Calculation

Given that a pump is located 30 feet above sea level, has a NPSHr of 20’ at a flow rate of 400 gpm, and is fed by a tank
of 60 deg F water with a surface pressure of 5 psig and a liquid level 25’ below the suction of the pump.
The head losses in the suction pipeline are 6’.
Find the NPSH available and compare it to the NPSHr. A NPSHr margin ratio is required.

[1]: from fluids.units import *


rho = 62.364*u.lb/u.ft**3
P_tank = 5*u.psi + 1*u.atm
Psat = 0.256*u.psi
H_tank = 5*u.foot
H_pipe = 30*u.foot
dH = H_pipe - H_tank

head_loss = 6*u.foot

NPSHa = ((P_tank-Psat)/rho/u.gravity) - dH - head_loss


(NPSHa).to(u.foot)

3.31. 7.31 NPRD Calculations 541


Fluids Documentation, Release 1.0.21

[1]: 13.887316780096477 foot


The NPSHa is beneath the NPSHr. The requested pressure can be calculated as follows:

[2]: 20*u.foot*1.3
[2]: 26.0 foot

3.33 7.33 Pump Affinity Rules

Given: For the 6” impeller trim on the curve below, the pump produces 126’ of head and 400 gpm while running at
3500 rpm. The brake horsepower is 17.5 hp in that case.
Find the flow rate, head, and power of this operating point if the speed is changed to 1700 rpm.

[1]: from fluids.units import *


head1 = 126*u.foot
Q1 = 400*u.gal/u.min
rpm1 = 3500*u.rpm
power1 = 17.5*u.hp

rpm2 = 1700*u.rpm

Q2 = rpm2/rpm1*Q1
head2 = head1*(rpm2/rpm1)**2
power2 = power1*(rpm2/rpm1)**3

Q2, head2, power2


[1]: (194.28571428571428 <Unit('gallon / minute')>,
29.725714285714286 <Unit('foot')>,
2.0053061224489794 <Unit('horsepower')>)

The values match those given in Crane.

3.34 7.34 Pump Power and Operating Cost

Given a pump provides 428 feet of head, pumps 700 gpm of 60 deg F water. The efficiencies of the pump, motor, and
VSD are as follows: 70.7%, 95%, 96%.
Find the brake horsepower, electrical horsepower, and the operating cost (on an 8000 hour/year basis) given a power
cost of $0.12/kWhr.

[1]: from fluids.units import *


rho = 62.364*u.lb/u.ft**3
head = 428*u.foot
Q = 700*u.gal/u.min
pump_efficiency = 0.707
total_efficiency = .707*.95*.96
dP = head*rho*u.gravity

# unfortunately pint does not support currency, so we keep it dimensionless


(continues on next page)

542 Chapter 3. Solved Fluids Mechanics Problems


Fluids Documentation, Release 1.0.21

(continued from previous page)


rate = 0.12/(u.kW*u.hour)

bhp = Q*dP/pump_efficiency
print('The brake power is %s' %(bhp.to(u.hp)))
power = Q*dP/total_efficiency
print('The power is %s' %(power.to(u.hp)))
cost = power*rate
cost = (cost*8000*u.hour).to_base_units()
print('The cost is $%s dollars/year' %(cost))
The brake power is 107.05591309130916 horsepower
The power is 117.38586961766357 horsepower
The cost is $84033.24278348622 dimensionless dollars/year

The value given in Crane is $83970.

3.35 7.35 Hydraulic Resistance of a Converging Tee

A 4” schedule 40 tee with equal leg diameters has 300 gpm of water at 60 deg F flowing into a straight leg, and 100
gpm converging in from the 90 degree branch leg.
Find the loss coefficients for the straight leg and the branch leg, and the head loss across each flow path.

[1]: from fluids.units import *


from math import pi
NPS, Di, Do, t = nearest_pipe(NPS=4, schedule='40')

A = 0.25*pi*Di**2
beta = 1 # same diameters

rho = 998*u.kg/u.m**3

Q_tot = 400*u.gal/u.min
Q_main = 300*u.gal/u.min
Q_leg = 100*u.gal/u.min

v_combined = Q_tot/A
print('The combined velocity is %s' %(v_combined.to(u.ft/u.s)))
branch_flow_ratio = Q_leg/Q_tot

v_main = Q_main/A
v_leg = Q_leg/A

K_branch = K_branch_converging_Crane(D_run=Di, D_branch=Di, Q_run=Q_main, Q_branch=Q_leg,


˓→ angle=90.0*u.degrees)

print('The branch loss coefficient is %s' %(K_branch))


K_run = K_run_converging_Crane(D_run=Di, D_branch=Di, Q_run=Q_main, Q_branch=Q_leg,␣
˓→angle=90.0*u.degrees)

print('The run loss coefficient is %s' %(K_run))

head_loss_branch = 0.5*rho*v_combined**2*K_branch/(1*u.gravity*rho)
(continues on next page)

3.35. 7.35 Hydraulic Resistance of a Converging Tee 543


Fluids Documentation, Release 1.0.21

(continued from previous page)


print('The branch head loss is %s' %(head_loss_branch.to(u.ft)))

head_loss_run = 0.5*rho*v_combined**2*K_run/(1*u.gravity*rho)
print('The run head loss is %s' %(head_loss_run.to(u.ft)))
The combined velocity is 10.081042597997012 foot / second
The branch loss coefficient is -0.0421875 dimensionless
The run loss coefficient is 0.325 dimensionless
The branch head loss is -0.06662833817657396 foot
The run head loss is 0.5132849755824956 foot

The values presented in crane match very nearly exactly; this type of a problem does not require any iteration, unless
the density of the fluid is variable.

3.36 7.36 Hydraulic Resistance of a Diverging Wye

Given that 60 deg F water flows through a 6” sched 80 45 degree wye with equal leg diameters, 250 gpm flows through
the branch leg and 400 gpm flows through the straight leg.
Find the loss coefficients for the straight leg, and the branch leg, as well as the loss coefficients for each flow path.

[1]: from fluids.units import *


from math import pi
NPS, Di, Do, t = nearest_pipe(NPS=6, schedule='80')

A = 0.25*pi*Di**2
beta = 1 # same diameters

rho = 998*u.kg/u.m**3

Q_tot = (250+400)*u.gal/u.min
Q_straight = 400*u.gal/u.min
Q_branch = 250*u.gal/u.min

v_combined = Q_tot/A
print('The combined velocity is %s' %(v_combined.to(u.ft/u.s)))
branch_flow_ratio = Q_branch/Q_tot

v_main = Q_straight/A
v_leg = Q_branch/A

K_branch = K_branch_diverging_Crane(D_run=Di, D_branch=Di, Q_run=Q_straight, Q_branch=Q_


˓→branch, angle=45.0*u.degrees)

print('The branch loss coefficient is %s' %(K_branch))


K_run = K_run_diverging_Crane(D_run=Di, D_branch=Di, Q_run=Q_straight, Q_branch=Q_branch,
˓→ angle=45.0*u.degrees)

print('The run loss coefficient is %s' %(K_run))

head_loss_branch = 0.5*rho*v_combined**2*K_branch/(1*u.gravity*rho)
print('The branch head loss is %s' %(head_loss_branch.to(u.ft)))

(continues on next page)

544 Chapter 3. Solved Fluids Mechanics Problems


Fluids Documentation, Release 1.0.21

(continued from previous page)


head_loss_run = 0.5*rho*v_combined**2*K_run/(1*u.gravity*rho)
print('The run head loss is %s' %(head_loss_run.to(u.ft)))
The combined velocity is 7.996972275001512 foot / second
The branch loss coefficient is 0.46461592374032235 dimensionless
The run loss coefficient is -0.06827492034592626 dimensionless
The branch head loss is 0.4617528263268458 foot
The run head loss is -0.06785419058213756 foot

The values presented in crane match very nearly exactly; this type of a problem does not require any iteration, unless
the density of the fluid is variable.

3.36. 7.36 Hydraulic Resistance of a Diverging Wye 545


Fluids Documentation, Release 1.0.21

546 Chapter 3. Solved Fluids Mechanics Problems


CHAPTER

FOUR

DATA INCLUDED IN FLUIDS

4.1 Friction

4.1.1 Experimental friction factors

[1]: import numpy as np


from fluids.friction import friction_factor, oregon_Res, oregon_fd_smooth
import matplotlib.pyplot as plt

Res = np.logspace(np.log10(oregon_Res[0]), np.log10(oregon_Res[-1]), 500)


fds_calc = [friction_factor(Re) for Re in Res]
plt.loglog(oregon_Res, oregon_fd_smooth, 'x', label='Oregon Data')
plt.loglog(Res, fds_calc, label='Colebrook')
plt.xlabel('Reynolds number')
plt.ylabel('Darcy friction factor')
plt.title("Experimental friction factor data for smooth pipe")
plt.legend()
plt.plot()
[1]: []

[2]: print(oregon_Res)
print(oregon_fd_smooth)
[11.21, 20.22, 29.28, 43.19, 57.73, 64.58, 86.05, 113.3, 135.3, 157.5, 179.4, 206.4, 228.
˓→0, 270.9, 315.2, 358.9, 402.9, 450.2, 522.5, 583.1, 671.8, 789.8, 891.0, 1013.0, 1197.

˓→0, 1300.0, 1390.0, 1669.0, 1994.0, 2227.0, 2554.0, 2868.0, 2903.0, 2926.0, 2955.0,␣

˓→2991.0, 2997.0, 3047.0, 3080.0, 3264.0, 3980.0, 4835.0, 5959.0, 8162.0, 10900.0, 13650.

˓→0, 18990.0, 29430.0, 40850.0, 59220.0, 84760.0, 120000.0, 176000.0, 237700.0, 298200.0,

˓→ 467800.0, 587500.0, 824200.0, 1050000.0]

[5.537, 3.492, 2.329, 1.523, 1.173, 0.9863, 0.7826, 0.5709, 0.4815, 0.4182, 0.3655, 0.
˓→3237, 0.2884, 0.2433, 0.2077, 0.1834, 0.1656, 0.1475, 0.1245, 0.1126, 0.09917, 0.08501,

˓→ 0.07722, 0.06707, 0.0588, 0.05328, 0.04815, 0.04304, 0.03739, 0.03405, 0.03091, 0.

˓→02804, 0.03182, 0.03846, 0.03363, 0.04124, 0.035, 0.03875, 0.04285, 0.0426, 0.03995, 0.

˓→03797, 0.0361, 0.03364, 0.03088, 0.02903, 0.0267, 0.02386, 0.02086, 0.02, 0.01805, 0.

˓→01686, 0.01594, 0.01511, 0.01462, 0.01365, 0.01313, 0.01244, 0.01198]

547
Fluids Documentation, Release 1.0.21

4.1.2 Roughness data

[3]: from fluids.friction import _roughness


# Material from Perry's handbook; roughness in meters.
_roughness
[3]: {'Brass': 1.52e-06,
'Lead': 1.52e-06,
'Glass': 1.52e-06,
'Steel': 1.52e-06,
'Asphalted cast iron': 0.000122,
'Galvanized iron': 0.000152,
'Cast iron': 0.000259,
'Wood stave': 0.000183,
'Rough wood stave': 0.000914,
'Concrete': 0.000305,
'Rough concrete': 0.00305,
'Riveted steel': 0.000914,
'Rough riveted steel': 0.00914}

Really good table from Idelchik, I. E, and A. S Ginevskiı̆. Handbook of Hydraulic Resistance. Redding, CT:
Begell House, 2007.
[4]: from fluids.friction import HHR_roughness
HHR_roughness
[4]: {'Rough channels in rock, Blast-hewed, little jointing': (0.1, 0.14, None),
'Rough channels in rock, Blast-hewed, substantial jointing': (0.13,
0.5,
None),
'Rough channels in rock, Roughly cut or very uneven surface': (0.5,
1.5,
None),
'Unlined tunnels, Rocks, gneiss, diameter 3-13.5 m': (0.3, 0.7, None),
'Unlined tunnels, Rocks, granite, diameter 3-9 m': (0.2, 0.7, None),
'Unlined tunnels, Shale, diameter, diameter 9-12 m': (0.25, 0.65, None),
'Unlined tunnels, Shale, quartz, quartzile, diameter 7-10 m': (0.2,
0.6,
None),
'Unlined tunnels, Shale, sedimentary, diameter 4-7 m': (None, None, 0.4),
'Unlined tunnels, Shale, nephrite bearing, diameter 3-8 m': (None, None, 0.2),
'Wood tubes, Boards, thoroughly dressed': (None, None, 0.00015),
'Wood tubes, Boards, well dressed': (None, None, 0.0003),
'Wood tubes, Boards, undressed but fitted': (None, None, 0.0007),
'Wood tubes, Boards, undressed': (None, None, 0.001),
'Wood tubes, Staved': (None, None, 0.0006),
'Plywood tubes, Birch plywood, transverse grain, good quality': (None,
None,
0.00012),
'Plywood tubes, Birch plywood, longitudal grain, good quality': (3e-05,
5e-05,
None),
'Glass tubes, Glass': (1.5e-06, 1e-05, None),
'Concrete water conduits, no finish, New and finished with plater; excellent␣
˓→manufacture (joints aligned, prime coated and smoothed)': (5e-05,
(continues on next page)

548 Chapter 4. Data included in Fluids


Fluids Documentation, Release 1.0.21

(continued from previous page)


0.00015,
None),
'Concrete water conduits, no finish, Used and corroded; with a wavy surface and wood␣
˓→framework': (0.001,

0.004,
None),
'Concrete water conduits, no finish, Old, poor fitting and manufacture; with an␣
˓→overgrown surface and deposits of sand and gravel': (0.001,

0.004,
None),
'Concrete water conduits, no finish, Very old; damaged surface, very overgrown': (0.005,
None,
None),
'Concrete water conduits, no finish, Water conduit, finished with smoothed plaster': (0.
˓→005,

None,
None),
'Concrete water conduits, no finish, New, very well manufactured, hand smoothed, prime-
˓→coated joints': (0.0001,

0.0002,
None),
'Concrete water conduits, no finish, Hand-smoothed cement finish and smoothed joints':␣
˓→(0.00015,

0.00035,
None),
'Concrete water conduits, no finish, Used, no deposits, moderately smooth, steel or␣
˓→wooden casing, joints prime coated but not smoothed': (0.0003,

0.0006,
None),
'Concrete water conduits, no finish, Used, prefabricated monoliths, cement plaster␣
˓→(wood floated), rough joints': (0.0005,

0.001,
None),
'Concrete water conduits, no finish, Conduits for water, sprayed surface of concrete':␣
˓→(0.0005,

0.001,
None),
'Concrete water conduits, no finish, Smoothed air-placed, either sprayed concrete or␣
˓→concrete on more concrete': (0.006,

0.017,
None),
'Concrete water conduits, no finish, Brushed air-placed, either sprayed concrete or␣
˓→concrete on more concrete': (None,

None,
0.0023),
'Concrete water conduits, no finish, Non-smoothed air-placed, either sprayed concrete␣
˓→or concrete on more concrete': (0.003,

0.006,
None),
'Reinforced concrete tubes, New': (0.00025, 0.00034, None),
'Reinforced concrete tubes, Nonprocessed': (0.0025, None, None),
'Asbestos cement tubes, New': (5e-05, 0.0001, None),
(continues on next page)

4.1. Friction 549


Fluids Documentation, Release 1.0.21

(continued from previous page)


'Asbestos cement tubes, Average': (0.0006, None, None),
'Cement tubes, Smoothed': (0.0003, 0.0008, None),
'Cement tubes, Non processed': (0.001, 0.002, None),
'Cement tubes, Joints, non smoothed': (0.0019, 0.0064, None),
'Cement-mortar plaster channels, Plaster, cement, smoothed joints and protrusions, and␣
˓→a casing': (5e-05,

0.00022,
None),
'Cement-mortar plaster channels, Steel trowled': (None, None, 0.0005),
'Other, Plaster over a screen': (0.01, 0.015, None),
'Other, Salt-glazed ceramic': (None, None, 0.0014),
'Other, Slag-concrete': (None, None, 0.0015),
'Other, Slag and alabaster-filling': (0.001, 0.0015, None),
'Seamless tubes made from brass, copper, lead, aluminum, Commercially smooth': (1.5e-06,
1e-05,
None),
'Seamless steel tubes, New and unused': (2e-05, 0.0001, None),
'Seamless steel tubes, Cleaned, following years of use': (None, 4e-05, None),
'Seamless steel tubes, Bituminized': (None, 4e-05, None),
'Seamless steel tubes, Heating systems piping; either superheated steam pipes, or just␣
˓→water pipes of systems with deaerators and chemical treatment': (None,

None,
0.0001),
'Seamless steel tubes, Following one year as a gas pipeline': (None,
None,
0.00012),
'Seamless steel tubes, Following multiple year as a gas pipeline': (4e-05,
0.0002,
None),
'Seamless steel tubes, Casings in gas wells, different conditions, several years of use
˓→': (6e-05,

0.00022,
None),
'Seamless steel tubes, Heating systems, saturated steam ducts or water pipes (with␣
˓→minor water leakage < 0.5%, and balance water deaerated)': (None,

None,
0.0002),
'Seamless steel tubes, Water heating system pipelines, any source': (None,
None,
0.0002),
'Seamless steel tubes, Oil pipelines, intermediate operating conditions ': (None,
None,
0.0002),
'Seamless steel tubes, Corroded, moderately ': (None, None, 0.0004),
'Seamless steel tubes, Scale, small depositions only ': (None, None, 0.0004),
'Seamless steel tubes, Condensate pipes in open systems or periodically operated steam␣
˓→pipelines': (None,

None,
0.0005),
'Seamless steel tubes, Compressed air piping': (None, None, 0.0008),
'Seamless steel tubes, Following multiple years of operation, generally corroded or␣
˓→with small amounts of scale': (0.00015,

(continues on next page)

550 Chapter 4. Data included in Fluids


Fluids Documentation, Release 1.0.21

(continued from previous page)


0.001,
None),
'Seamless steel tubes, Water heating piping without deaeration but with chemical␣
˓→treatment of water; leakage up to 3%; or condensate piping operated periodically':␣

˓→(None,

None,
0.001),
'Seamless steel tubes, Used water piping': (0.0012, 0.0015, None),
'Seamless steel tubes, Poor condition': (0.005, None, None),
'Welded steel tubes, Good condition': (4e-05, 0.0001, None),
'Welded steel tubes, New and covered with bitumen': (None, None, 5e-05),
'Welded steel tubes, Used and covered with partially dissolved bitumen; corroded':␣
˓→(None,

None,
0.0001),
'Welded steel tubes, Used, suffering general corrosion': (None,
None,
0.00015),
'Welded steel tubes, Surface looks like new, 10 mm lacquer inside, even joints': (0.
˓→0003,

0.0004,
None),
'Welded steel tubes, Used Gas mains': (None, None, 0.0005),
'Welded steel tubes, Double or simple transverse riveted joints; with or without␣
˓→lacquer; without corrosion': (0.0006,

0.0007,
None),
'Welded steel tubes, Lacquered inside but rusted': (0.00095, 0.001, None),
'Welded steel tubes, Gas mains, many years of use, with layered deposits': (None,
None,
0.0011),
'Welded steel tubes, Non-corroded and with double transverse riveted joints': (0.0012,
0.0015,
None),
'Welded steel tubes, Small deposits': (None, None, 0.0015),
'Welded steel tubes, Heavily corroded and with double transverse riveted joints':␣
˓→(None,

None,
0.002),
'Welded steel tubes, Appreciable deposits': (0.002, 0.004, None),
'Welded steel tubes, Gas mains, many years of use, deposits of resin/naphthalene':␣
˓→(None,

None,
0.0024),
'Welded steel tubes, Poor condition': (0.005, None, None),
'Riveted steel tubes, Riveted laterally and longitudinally with one line; lacquered on␣
˓→the inside': (0.0003,

0.0004,
None),
'Riveted steel tubes, Riveted laterally and longitudinally with two lines; with or␣
˓→without lacquer on the inside and without corrosion': (0.0006,

0.0007,
(continues on next page)

4.1. Friction 551


Fluids Documentation, Release 1.0.21

(continued from previous page)


None),
'Riveted steel tubes, Riveted laterally with one line and longitudinally with two lines;
˓→ thickly lacquered or torred on the inside': (0.0012,

0.0014,
None),
'Riveted steel tubes, Riveted longitudinally with six lines, after extensive use':␣
˓→(None,

None,
0.002),
'Riveted steel tubes, Riveted laterally with four line and longitudinally with six␣
˓→lines; overlapping joints inside': (None,

None,
0.004),
'Riveted steel tubes, Extremely poor surface; overlapping and uneven joints': (0.005,
None,
None),
'Roofing steel sheets, Oiled': (0.00015, 0.0011, None),
'Roofing steel sheets, Not Oiled': (2e-05, 4e-05, None),
'Galzanized steel tubes, Bright galvanization; new': (7e-05, 0.0001, None),
'Galzanized steel tubes, Ordinary galvanization': (0.0001, 0.00015, None),
'Galzanized sheet steel, New': (None, None, 0.00015),
'Galzanized sheet steel, Used previously for water': (None, None, 0.00018),
'Steel tubes, Glass enamel coat': (1e-06, 1e-05, None),
'Steel tubes, New': (0.00025, 0.001, None),
'Cast-iron tubes, New, bituminized': (0.0001, 0.00015, None),
'Cast-iron tubes, Coated with asphalt': (0.00012, 0.0003, None),
'Cast-iron tubes, Used water pipelines': (None, None, 0.0014),
'Cast-iron tubes, Used and corroded': (0.001, 0.0015, None),
'Cast-iron tubes, Deposits visible': (0.001, 0.0015, None),
'Cast-iron tubes, Substantial deposits': (0.002, 0.004, None),
'Cast-iron tubes, Cleaned after extensive use': (0.0003, 0.0015, None),
'Cast-iron tubes, Severely corroded': (None, 0.003, None),
'Steel water conduits in generating stations, New, clean, seamless (without joints),␣
˓→well fitted': (1.5e-05,

4e-05,
None),
'Steel water conduits in generating stations, New, clean, welded lengthwise and well␣
˓→fitted': (1.2e-05,

3e-05,
None),
'Steel water conduits in generating stations, New, clean, welded lengthwise and well␣
˓→fitted, with transverse welded joints': (8e-05,

0.00017,
None),
'Steel water conduits in generating stations, New, clean, coated, bituminized when␣
˓→manufactured': (1.4e-05,

1.8e-05,
None),
'Steel water conduits in generating stations, New, clean, coated, bituminized when␣
˓→manufactured, with transverse welded joints': (0.0002,

0.0006,
None),
(continues on next page)

552 Chapter 4. Data included in Fluids


Fluids Documentation, Release 1.0.21

(continued from previous page)


'Steel water conduits in generating stations, New, clean, coated, galvanized': (0.0001,
0.0002,
None),
'Steel water conduits in generating stations, New, clean, coated, roughly galvanized':␣
˓→(0.0004,

0.0007,
None),
'Steel water conduits in generating stations, New, clean, coated, bituminized, curved':␣
˓→(0.0001,

0.0014,
None),
'Steel water conduits in generating stations, Used, clean, slight corrosion': (0.0001,
0.0003,
None),
'Steel water conduits in generating stations, Used, clean, moderate corrosion or slight␣
˓→deposits': (0.0003,

0.0007,
None),
'Steel water conduits in generating stations, Used, clean, severe corrosion': (0.0008,
0.0015,
None),
'Steel water conduits in generating stations, Used, clean, previously cleaned of either␣
˓→deposits or rust': (0.00015,

0.0002,
None),
'Used steel water conduits in generating stations, Used, all welded, <2 years use, no␣
˓→deposits': (0.00012,

0.00024,
None),
'Used steel water conduits in generating stations, Used, all welded, <20 years use, no␣
˓→deposits': (0.0006,

0.005,
None),
'Used steel water conduits in generating stations, Used, iron-bacterial corrosion': (0.
˓→003,

0.004,
None),
'Used steel water conduits in generating stations, Used, heavy corrosion, or with␣
˓→incrustation (deposit 1.5 - 9 mm deep)': (0.003,

0.005,
None),
'Used steel water conduits in generating stations, Used, heavy corrosion, or with␣
˓→incrustation (deposit 3 - 25 mm deep)': (0.006,

0.0065,
None),
'Used steel water conduits in generating stations, Used, inside coating, bituminized, <␣
˓→2 years use': (0.0001,

0.00035,
None)}

4.1. Friction 553


Fluids Documentation, Release 1.0.21

4.2 Sieve Sizes for Particle Size Distributions

[1]: from fluids.particle_size_distribution import ASTM_E11_sieves, ISO_3310_1_sieves, Sieve


import pandas as pd
pd.options.display.max_rows = 100000

4.2.1 ASTM E11 - 17 - Standard Specification for Woven Wire Test Sieve Cloth and
Test Sieves.

[2]: # All units in SI, meters.


dat = {}
for name in Sieve.__slots__:
vals = []
for s in ASTM_E11_sieves.values():
vals.append(getattr(s, name))
dat[name] = vals
pd.DataFrame(dat)
[2]: designation old_designation opening opening_inch Y_variation_avg \
0 0.02 No. 635 0.000020 8.000000e-07 0.000002
1 0.025 No. 500 0.000025 1.000000e-06 0.000003
2 0.032 No. 450 0.000032 1.200000e-06 0.000003
3 0.038 No. 400 0.000038 1.500000e-06 0.000003
4 0.045 No. 325 0.000045 1.700000e-06 0.000003
5 0.053 No. 270 0.000053 2.100000e-06 0.000003
6 0.063 No. 230 0.000063 2.500000e-06 0.000004
7 0.075 No. 200 0.000075 2.900000e-06 0.000004
8 0.09 No. 170 0.000090 3.500000e-06 0.000005
9 0.106 No. 140 0.000106 4.100000e-06 0.000005
10 0.125 No. 120 0.000125 4.900000e-06 0.000006
11 0.15 No. 100 0.000150 5.900000e-06 0.000007
12 0.18 No. 80 0.000180 7.000000e-06 0.000008
13 0.212 No. 70 0.000212 8.300000e-06 0.000009
14 0.25 No. 60 0.000250 9.800000e-06 0.000010
15 0.3 No. 50 0.000300 1.170000e-05 0.000012
16 0.355 No. 45 0.000355 1.390000e-05 0.000013
17 0.425 No. 40 0.000425 1.650000e-05 0.000016
18 0.5 No. 35 0.000500 1.970000e-05 0.000018
19 0.6 No. 30 0.000600 2.340000e-05 0.000021
20 0.71 No. 25 0.000710 2.780000e-05 0.000025
21 0.85 No. 20 0.000850 3.310000e-05 0.000029
22 1 No. 18 0.001000 3.940000e-05 0.000034
23 1.18 No. 16 0.001180 4.690000e-05 0.000040
24 1.4 No. 14 0.001400 5.550000e-05 0.000046
25 1.7 No. 12 0.001700 6.610000e-05 0.000056
26 100 4 in. 0.100000 4.000000e-03 0.002940
27 106 4.24 in. 0.106000 4.240000e-03 0.003120
28 11.2 7/16 in. 0.011200 4.380000e-04 0.000346
29 12.5 1/2 in. 0.012500 5.000000e-04 0.000385
30 125 5 in. 0.125000 5.000000e-03 0.003660
31 13.2 0.530 in. 0.013200 5.300000e-04 0.000406
(continues on next page)

554 Chapter 4. Data included in Fluids


Fluids Documentation, Release 1.0.21

(continued from previous page)


32 16 5/8 in. 0.016000 6.250000e-04 0.000490
33 19 3/4 in. 0.019000 7.500000e-04 0.000579
34 2 No. 10 0.002000 7.870000e-05 0.000065
35 2.36 No. 8 0.002360 9.370000e-05 0.000076
36 2.8 No. 7 0.002800 1.100000e-04 0.000090
37 22.4 7/8 in. 0.022400 8.750000e-04 0.000681
38 25 1.00 in. 0.025000 1.000000e-03 0.000758
39 26.5 1.06 in. 0.026500 1.060000e-03 0.000802
40 3.35 No. 6 0.003350 1.320000e-04 0.000107
41 31.5 1 1/4 in. 0.031500 1.250000e-03 0.000950
42 37.5 1 1/2 in. 0.037500 1.500000e-03 0.001130
43 4 No. 5 0.004000 1.570000e-04 0.000127
44 4.75 No. 4 0.004750 1.870000e-04 0.000150
45 45 1 3/4 in. 0.045000 1.750000e-03 0.001350
46 5.6 No. 3 1/2 0.005600 2.230000e-04 0.000176
47 50 2 in. 0.050000 2.000000e-03 0.001490
48 53 2.12 in. 0.053000 2.120000e-03 0.001580
49 6.3 1/4 in. 0.006300 2.500000e-04 0.000197
50 6.7 0.265 in. 0.006700 2.650000e-04 0.000210
51 63 2 1/2 in. 0.063000 2.500000e-03 0.001870
52 75 3 in. 0.075000 3.000000e-03 0.002220
53 8 5/16 in. 0.008000 3.120000e-04 0.000249
54 9.5 3/8 in. 0.009500 3.750000e-04 0.000295
55 90 3 1/2 in. 0.090000 3.500000e-03 0.002650

X_variation_max max_opening calibration_samples compliance_sd \


0 0.000015 0.035 300.0 5.330
1 0.000016 0.041 300.0 5.710
2 0.000018 0.050 300.0 6.420
3 0.000020 0.058 300.0 7.090
4 0.000022 0.067 250.0 7.760
5 0.000024 0.077 250.0 8.440
6 0.000026 0.089 250.0 9.180
7 0.000029 0.104 250.0 10.230
8 0.000032 0.122 200.0 11.270
9 0.000035 0.141 200.0 12.390
10 0.000038 0.163 200.0 13.510
11 0.000043 0.193 200.0 15.300
12 0.000047 0.227 200.0 16.850
13 0.000052 0.264 160.0 18.790
14 0.000058 0.308 160.0 21.020
15 0.000065 0.365 160.0 23.700
16 0.000072 0.427 160.0 26.450
17 0.000081 0.506 120.0 29.950
18 0.000089 0.589 120.0 33.230
19 0.000101 0.701 100.0 38.000
20 0.000112 0.822 100.0 42.630
21 0.000127 0.977 80.0 48.760
22 0.000140 1.140 80.0 0.055
23 0.000160 1.340 80.0 0.063
24 0.000180 1.580 80.0 0.071
25 0.000200 1.900 50.0 0.081
(continues on next page)

4.2. Sieve Sizes for Particle Size Distributions 555


Fluids Documentation, Release 1.0.21

(continued from previous page)


26 0.003820 103.820 NaN NaN
27 0.003990 109.990 NaN NaN
28 0.000770 11.970 30.0 0.382
29 0.000830 13.330 30.0 0.421
30 0.004510 129.510 NaN NaN
31 0.000860 14.060 30.0 0.441
32 0.000990 16.990 30.0 0.527
33 0.001130 20.130 30.0 0.622
34 0.000230 2.230 50.0 0.094
35 0.000250 2.610 40.0 0.104
36 0.000290 3.090 40.0 0.121
37 0.001270 23.670 NaN 0.734
38 0.001380 26.380 NaN 0.823
39 0.001440 27.940 NaN 0.869
40 0.000320 3.670 40.0 0.138
41 0.001630 33.130 NaN 1.066
42 0.001850 39.350 NaN 1.374
43 0.000370 4.370 30.0 0.161
44 0.000410 5.160 30.0 0.182
45 0.002120 47.120 NaN NaN
46 0.000470 6.070 30.0 0.211
47 0.002290 52.290 NaN NaN
48 0.002390 55.390 NaN NaN
49 0.000510 6.810 30.0 0.233
50 0.000530 7.230 30.0 0.245
51 0.002710 65.710 NaN NaN
52 0.003090 78.090 NaN NaN
53 0.000600 8.600 30.0 0.284
54 0.000680 10.180 30.0 0.330
55 0.003530 93.530 NaN NaN

inspection_samples inspection_sd calibration_sd d_wire \


0 100.0 4.510 4.750 2.000000e-08
1 100.0 4.820 5.060 3.000000e-08
2 100.0 5.420 5.710 3.000000e-08
3 100.0 5.990 6.310 3.000000e-08
4 100.0 6.560 6.840 3.000000e-08
5 100.0 7.130 7.440 4.000000e-08
6 100.0 7.760 8.090 5.000000e-08
7 100.0 8.640 9.020 5.000000e-08
8 100.0 9.530 9.800 6.000000e-08
9 100.0 10.470 10.770 7.000000e-08
10 100.0 11.410 11.740 9.000000e-08
11 100.0 12.930 13.300 1.000000e-07
12 100.0 14.240 14.650 1.200000e-07
13 80.0 15.590 16.080 1.400000e-07
14 80.0 17.440 17.990 1.600000e-07
15 80.0 19.660 20.290 2.000000e-07
16 80.0 21.950 22.640 2.200000e-07
17 60.0 24.200 25.080 2.800000e-07
18 60.0 26.850 27.820 3.200000e-07
19 50.0 30.140 31.320 4.000000e-07
(continues on next page)

556 Chapter 4. Data included in Fluids


Fluids Documentation, Release 1.0.21

(continued from previous page)


20 50.0 33.820 35.140 4.500000e-07
21 40.0 37.730 39.360 5.000000e-07
22 40.0 0.042 0.044 5.600000e-04
23 40.0 0.049 0.051 6.300000e-04
24 40.0 0.055 0.057 7.100000e-04
25 25.0 0.059 0.062 8.000000e-04
26 NaN NaN NaN 6.300000e-03
27 NaN NaN NaN 6.300000e-03
28 15.0 0.256 0.274 2.500000e-03
29 15.0 0.283 0.302 2.500000e-03
30 NaN NaN NaN 8.000000e-03
31 15.0 0.296 0.316 2.800000e-03
32 15.0 0.354 0.378 3.150000e-03
33 15.0 0.418 0.446 3.150000e-03
34 25.0 0.068 0.072 9.000000e-04
35 20.0 0.073 0.077 1.000000e-03
36 20.0 0.085 0.090 1.120000e-03
37 15.0 0.493 NaN 3.550000e-03
38 15.0 0.553 NaN 3.550000e-03
39 15.0 0.584 NaN 3.550000e-03
40 20.0 0.097 0.103 1.250000e-03
41 NaN NaN NaN 4.000000e-03
42 NaN NaN NaN 4.500000e-03
43 15.0 0.108 0.115 1.400000e-03
44 15.0 0.123 0.131 1.600000e-03
45 NaN NaN NaN 4.500000e-03
46 15.0 0.142 0.151 1.600000e-03
47 NaN NaN NaN 5.000000e-03
48 NaN NaN NaN 5.000000e-03
49 15.0 0.157 0.167 1.800000e-03
50 15.0 0.164 0.175 1.800000e-03
51 NaN NaN NaN 5.600000e-03
52 NaN NaN NaN 6.300000e-03
53 15.0 0.191 0.204 2.000000e-03
54 15.0 0.222 0.237 2.240000e-03
55 NaN NaN NaN 6.300000e-03

d_wire_min d_wire_max compliance_samples


0 2.000000e-08 2.000000e-08 1000.0
1 2.000000e-08 3.000000e-08 1000.0
2 2.000000e-08 3.000000e-08 1000.0
3 2.000000e-08 3.000000e-08 1000.0
4 3.000000e-08 4.000000e-08 1000.0
5 3.000000e-08 4.000000e-08 1000.0
6 4.000000e-08 5.000000e-08 1000.0
7 4.000000e-08 6.000000e-08 1000.0
8 5.000000e-08 7.000000e-08 1000.0
9 6.000000e-08 8.000000e-08 1000.0
10 8.000000e-08 1.000000e-07 1000.0
11 9.000000e-08 1.200000e-07 1000.0
12 1.100000e-07 1.500000e-07 1000.0
13 1.200000e-07 1.700000e-07 800.0
(continues on next page)

4.2. Sieve Sizes for Particle Size Distributions 557


Fluids Documentation, Release 1.0.21

(continued from previous page)


14 1.300000e-07 1.900000e-07 800.0
15 1.700000e-07 2.300000e-07 800.0
16 1.900000e-07 2.600000e-07 800.0
17 2.400000e-07 3.200000e-07 600.0
18 2.700000e-07 3.600000e-07 600.0
19 3.400000e-07 4.600000e-07 500.0
20 3.800000e-07 5.200000e-07 500.0
21 4.300000e-07 5.800000e-07 400.0
22 4.800000e-04 6.400000e-04 400.0
23 5.400000e-04 7.200000e-04 400.0
24 6.000000e-04 8.200000e-04 400.0
25 6.800000e-04 9.200000e-04 250.0
26 5.400000e-03 7.200000e-03 20.0
27 5.400000e-03 7.200000e-03 20.0
28 2.100000e-03 2.900000e-03 150.0
29 2.100000e-03 2.900000e-03 150.0
30 6.800000e-03 9.200000e-03 20.0
31 2.400000e-03 3.200000e-03 150.0
32 2.700000e-03 3.600000e-03 150.0
33 2.700000e-03 3.500000e-03 150.0
34 7.700000e-04 1.040000e-03 250.0
35 8.500000e-04 1.150000e-03 200.0
36 9.500000e-04 1.300000e-03 200.0
37 3.000000e-03 4.100000e-03 150.0
38 3.000000e-03 4.100000e-03 20.0
39 3.000000e-03 4.100000e-03 20.0
40 1.060000e-03 1.500000e-03 200.0
41 3.400000e-03 4.600000e-03 20.0
42 3.800000e-03 5.200000e-03 20.0
43 1.200000e-03 1.700000e-03 150.0
44 1.300000e-03 1.900000e-03 150.0
45 3.800000e-03 5.200000e-03 20.0
46 1.300000e-03 1.900000e-03 150.0
47 4.300000e-03 5.800000e-03 20.0
48 4.300000e-03 5.800000e-03 20.0
49 1.500000e-03 2.100000e-03 150.0
50 1.500000e-03 2.100000e-03 150.0
51 4.800000e-03 6.400000e-03 20.0
52 5.400000e-03 7.200000e-03 20.0
53 1.700000e-03 2.300000e-03 150.0
54 1.900000e-03 2.600000e-03 150.0
55 5.400000e-03 7.200000e-03 20.0

558 Chapter 4. Data included in Fluids


Fluids Documentation, Release 1.0.21

4.2.2 ISO 3310-1:2016 - Test Sieves – Technical Requirements and Testing – Part 1:
Test Sieves of Metal Wire Cloth.

[3]: # All units in SI, meters.


dat = {}
for name in Sieve.__slots__:
vals = []
for s in ISO_3310_1_sieves.values():
vals.append(getattr(s, name))
dat[name] = vals
pd.DataFrame(dat).dropna(how='all', axis=1)
[3]: designation opening Y_variation_avg X_variation_max compliance_sd \
0 0.02 0.000020 0.000002 0.000013 0.000005
1 0.025 0.000025 0.000002 0.000015 0.000005
2 0.032 0.000032 0.000002 0.000017 0.000006
3 0.036 0.000036 0.000003 0.000018 0.000006
4 0.038 0.000038 0.000003 0.000018 0.000006
5 0.04 0.000040 0.000003 0.000019 0.000006
6 0.045 0.000045 0.000003 0.000020 0.000007
7 0.05 0.000050 0.000003 0.000021 0.000007
8 0.053 0.000053 0.000003 0.000021 0.000008
9 0.056 0.000056 0.000003 0.000022 0.000008
10 0.063 0.000063 0.000003 0.000024 0.000008
11 0.071 0.000071 0.000004 0.000025 0.000009
12 0.075 0.000075 0.000004 0.000026 0.000009
13 0.08 0.000080 0.000004 0.000027 0.000009
14 0.09 0.000090 0.000004 0.000029 0.000010
15 0.1 0.000100 0.000005 0.000030 0.000011
16 0.106 0.000106 0.000005 0.000031 0.000011
17 0.112 0.000112 0.000005 0.000032 0.000012
18 0.125 0.000125 0.000005 0.000034 0.000012
19 0.14 0.000140 0.000006 0.000037 0.000013
20 0.15 0.000150 0.000006 0.000038 0.000014
21 0.16 0.000160 0.000006 0.000040 0.000014
22 0.18 0.000180 0.000007 0.000043 0.000015
23 0.2 0.000200 0.000007 0.000045 0.000016
24 0.212 0.000212 0.000008 0.000047 0.000017
25 0.224 0.000224 0.000008 0.000049 0.000017
26 0.25 0.000250 0.000009 0.000052 0.000019
27 0.28 0.000280 0.000010 0.000056 0.000020
28 0.3 0.000300 0.000010 0.000058 0.000021
29 0.315 0.000315 0.000011 0.000060 0.000022
30 0.355 0.000355 0.000012 0.000065 0.000024
31 0.4 0.000400 0.000013 0.000070 0.000026
32 0.425 0.000425 0.000014 0.000073 0.000027
33 0.45 0.000450 0.000015 0.000075 0.000028
34 0.5 0.000500 0.000016 0.000080 0.000030
35 0.56 0.000560 0.000018 0.000087 0.000032
36 0.6 0.000600 0.000019 0.000091 0.000034
37 0.63 0.000630 0.000020 0.000093 0.000035
38 0.71 0.000710 0.000022 0.000101 0.000038
39 0.8 0.000800 0.000025 0.000109 0.000042
(continues on next page)

4.2. Sieve Sizes for Particle Size Distributions 559


Fluids Documentation, Release 1.0.21

(continued from previous page)


40 0.85 0.000850 0.000026 0.000114 0.000044
41 0.9 0.000900 0.000028 0.000118 0.000046
42 1 0.001000 0.000030 0.000130 0.000049
43 1.12 0.001120 0.000030 0.000140 0.000053
44 1.18 0.001180 0.000040 0.000140 0.000056
45 1.25 0.001250 0.000040 0.000150 0.000058
46 1.4 0.001400 0.000040 0.000160 0.000063
47 1.6 0.001600 0.000050 0.000170 0.000070
48 1.7 0.001700 0.000050 0.000180 0.000073
49 1.8 0.001800 0.000050 0.000190 0.000076
50 10 0.010000 0.000280 0.000640 0.000307
51 100 0.100000 0.002650 0.003440 NaN
52 106 0.106000 0.002800 0.003590 NaN
53 11.2 0.011200 0.000310 0.000690 0.000339
54 112 0.112000 0.002960 0.003740 NaN
55 12.5 0.012500 0.000350 0.000750 0.000374
56 125 0.125000 0.003300 0.004060 NaN
57 13.2 0.013200 0.000370 0.000780 0.000392
58 14 0.014000 0.000390 0.000810 0.000413
59 16 0.016000 0.000440 0.000890 0.000467
60 18 0.018000 0.000490 0.000970 0.000520
61 19 0.019000 0.000520 0.001010 0.000548
62 2 0.002000 0.000060 0.000200 0.000083
63 2.24 0.002240 0.000070 0.000220 0.000090
64 2.36 0.002360 0.000070 0.000230 0.000094
65 2.5 0.002500 0.000070 0.000240 0.000098
66 2.8 0.002800 0.000080 0.000260 0.000108
67 20 0.020000 0.000550 0.001050 0.000575
68 22.4 0.022400 0.000610 0.001140 0.000641
69 25 0.025000 0.000680 0.001240 0.000713
70 26.5 0.026500 0.000720 0.001290 0.000757
71 28 0.028000 0.000760 0.001350 0.000801
72 3.15 0.003150 0.000090 0.000280 0.000118
73 3.35 0.003350 0.000100 0.000290 0.000124
74 3.55 0.003550 0.000100 0.000300 0.000130
75 31.5 0.031500 0.000850 0.001470 0.000905
76 35.5 0.035500 0.000960 0.001600 0.001000
77 37.5 0.037500 0.001010 0.001670 0.001000
78 4 0.004000 0.000110 0.000330 0.000143
79 4.5 0.004500 0.000130 0.000360 0.000157
80 4.75 0.004750 0.000140 0.000370 0.000164
81 40 0.040000 0.001080 0.001750 0.001000
82 45 0.045000 0.001210 0.001910 0.001000
83 5 0.005000 0.000140 0.000390 0.000171
84 5.6 0.005600 0.000160 0.000420 0.000188
85 50 0.050000 0.001340 0.002060 NaN
86 53 0.053000 0.001420 0.002150 NaN
87 56 0.056000 0.001500 0.002240 NaN
88 6.3 0.006300 0.000180 0.000460 0.000207
89 6.7 0.006700 0.000190 0.000480 0.000218
90 63 0.063000 0.001690 0.002440 NaN
91 7.1 0.007100 0.000200 0.000500 0.000229
(continues on next page)

560 Chapter 4. Data included in Fluids


Fluids Documentation, Release 1.0.21

(continued from previous page)


92 71 0.071000 0.001890 0.002670 NaN
93 75 0.075000 0.002000 0.002780 NaN
94 8 0.008000 0.000220 0.000540 0.000254
95 80 0.080000 0.002130 0.002910 NaN
96 9 0.009000 0.000250 0.000590 0.000281
97 9.5 0.009500 0.000270 0.000610 0.000294
98 90 0.090000 0.002390 0.003180 NaN

d_wire d_wire_min d_wire_max


0 0.000020 0.000023 0.000023
1 0.000025 0.000029 0.000029
2 0.000028 0.000033 0.000033
3 0.000030 0.000035 0.000035
4 0.000030 0.000035 0.000035
5 0.000032 0.000037 0.000037
6 0.000032 0.000037 0.000037
7 0.000036 0.000041 0.000041
8 0.000036 0.000041 0.000041
9 0.000040 0.000046 0.000046
10 0.000045 0.000052 0.000052
11 0.000050 0.000043 0.000058
12 0.000050 0.000043 0.000058
13 0.000056 0.000048 0.000064
14 0.000063 0.000054 0.000072
15 0.000071 0.000060 0.000082
16 0.000071 0.000060 0.000082
17 0.000080 0.000068 0.000092
18 0.000090 0.000077 0.000104
19 0.000100 0.000085 0.000115
20 0.000100 0.000085 0.000115
21 0.000112 0.000095 0.000130
22 0.000125 0.000106 0.000150
23 0.000140 0.000120 0.000170
24 0.000140 0.000120 0.000170
25 0.000160 0.000130 0.000190
26 0.000160 0.000130 0.000190
27 0.000180 0.000150 0.000210
28 0.000200 0.000170 0.000230
29 0.000200 0.000170 0.000230
30 0.000224 0.000190 0.000260
31 0.000250 0.000210 0.000290
32 0.000280 0.000240 0.000320
33 0.000280 0.000240 0.000320
34 0.000315 0.000270 0.000360
35 0.000355 0.000300 0.000410
36 0.000400 0.000340 0.000460
37 0.000400 0.000340 0.000460
38 0.000450 0.000380 0.000520
39 0.000450 0.000380 0.000520
40 0.000500 0.000430 0.000580
41 0.000500 0.000430 0.000580
42 0.000560 0.000480 0.000640
(continues on next page)

4.2. Sieve Sizes for Particle Size Distributions 561


Fluids Documentation, Release 1.0.21

(continued from previous page)


43 0.000560 0.000480 0.000640
44 0.000630 0.000540 0.000720
45 0.000630 0.000540 0.000720
46 0.000710 0.000600 0.000820
47 0.000800 0.000680 0.000920
48 0.000800 0.000680 0.000920
49 0.000800 0.000680 0.000920
50 0.002500 0.002100 0.002900
51 0.006300 0.005400 0.007200
52 0.006300 0.005400 0.007200
53 0.002500 0.002100 0.002900
54 0.008000 0.006800 0.009200
55 0.002500 0.002100 0.002900
56 0.008000 0.006800 0.009200
57 0.002800 0.002400 0.003200
58 0.002800 0.002400 0.003200
59 0.003150 0.002700 0.003600
60 0.003150 0.002700 0.003600
61 0.003150 0.002700 0.003600
62 0.000900 0.000770 0.001040
63 0.000900 0.000770 0.001040
64 0.001000 0.000850 0.001150
65 0.001000 0.000850 0.001150
66 0.001120 0.000950 0.001300
67 0.003150 0.002700 0.003600
68 0.003550 0.003000 0.004100
69 0.003550 0.003000 0.004100
70 0.003550 0.003000 0.004100
71 0.003550 0.003000 0.004100
72 0.001250 0.001060 0.001500
73 0.001250 0.001060 0.001500
74 0.001250 0.001060 0.001500
75 0.004000 0.003400 0.004600
76 0.004000 0.003400 0.004600
77 0.004500 0.003800 0.005200
78 0.001400 0.001200 0.001700
79 0.001400 0.001200 0.001700
80 0.001600 0.001300 0.001900
81 0.004500 0.003800 0.005200
82 0.004500 0.003800 0.005200
83 0.001600 0.001300 0.001900
84 0.001600 0.001300 0.001900
85 0.005000 0.004300 0.005800
86 0.005000 0.004300 0.005800
87 0.005000 0.004300 0.005800
88 0.001800 0.001500 0.002100
89 0.001800 0.001500 0.002100
90 0.005600 0.004800 0.006400
91 0.001800 0.001500 0.002100
92 0.005600 0.004800 0.006400
93 0.006300 0.005400 0.007200
94 0.002000 0.001700 0.002300
(continues on next page)

562 Chapter 4. Data included in Fluids


Fluids Documentation, Release 1.0.21

(continued from previous page)


95 0.006300 0.005400 0.007200
96 0.002240 0.001900 0.002600
97 0.002240 0.001900 0.002600
98 0.006300 0.005400 0.007200

4.3 Pipe Schedules

[17]: from IPython.display import display, Markdown


import pandas as pd
from fluids.piping import schedule_lookup
dat = schedule_lookup['40']

[25]: for name, values in schedule_lookup.items():

display(Markdown("## Schedule %s" %(name)))


to_df = {'NPS, dimensionless': values[0],
'Inner diameter, mm': values[1], 'Outer diameter, mm': values[2], 'Thickness,␣
˓→mm': values[3]}

display(pd.DataFrame(to_df))

4.3.1 Schedule 40

NPS, dimensionless Inner diameter, mm Outer diameter, mm Thickness, mm


0 0.125 6.84 10.3 1.73
1 0.250 9.22 13.7 2.24
2 0.375 12.48 17.1 2.31
3 0.500 15.76 21.3 2.77
4 0.750 20.96 26.7 2.87
5 1.000 26.64 33.4 3.38
6 1.250 35.08 42.2 3.56
7 1.500 40.94 48.3 3.68
8 2.000 52.48 60.3 3.91
9 2.500 62.68 73.0 5.16
10 3.000 77.92 88.9 5.49
11 3.500 90.12 101.6 5.74
12 4.000 102.26 114.3 6.02
13 5.000 128.20 141.3 6.55
14 6.000 154.08 168.3 7.11
15 8.000 202.74 219.1 8.18
16 10.000 254.46 273.0 9.27
17 12.000 303.18 323.8 10.31
18 14.000 333.34 355.6 11.13
19 16.000 381.00 406.4 12.70
20 18.000 428.46 457.0 14.27
21 20.000 477.82 508.0 15.09
22 24.000 575.04 610.0 17.48
23 32.000 778.04 813.0 17.48
24 34.000 829.04 864.0 17.48
25 36.000 875.90 914.0 19.05

4.3. Pipe Schedules 563


Fluids Documentation, Release 1.0.21

4.3.2 Schedule 5

NPS, dimensionless Inner diameter, mm Outer diameter, mm Thickness, mm


0 0.50 18.00 21.3 1.65
1 0.75 23.40 26.7 1.65
2 1.00 30.10 33.4 1.65
3 1.25 38.90 42.2 1.65
4 1.50 45.00 48.3 1.65
5 2.00 57.00 60.3 1.65
6 2.50 68.78 73.0 2.11
7 3.00 84.68 88.9 2.11
8 3.50 97.38 101.6 2.11
9 4.00 110.08 114.3 2.11
10 5.00 135.76 141.3 2.77
11 6.00 162.76 168.3 2.77
12 8.00 213.56 219.1 2.77
13 10.00 266.20 273.0 3.40
14 12.00 315.88 323.8 3.96
15 14.00 347.68 355.6 3.96
16 16.00 398.02 406.4 4.19
17 18.00 448.62 457.0 4.19
18 20.00 498.44 508.0 4.78
19 22.00 549.44 559.0 4.78
20 24.00 598.92 610.0 5.54
21 30.00 749.30 762.0 6.35

4.3.3 Schedule 10

NPS, dimensionless Inner diameter, mm Outer diameter, mm Thickness, mm


0 0.125 7.82 10.3 1.24
1 0.250 10.40 13.7 1.65
2 0.375 13.80 17.1 1.65
3 0.500 17.08 21.3 2.11
4 0.750 22.48 26.7 2.11
5 1.000 27.86 33.4 2.77
6 1.250 36.66 42.2 2.77
7 1.500 42.76 48.3 2.77
8 2.000 54.76 60.3 2.77
9 2.500 66.90 73.0 3.05
10 3.000 82.80 88.9 3.05
11 3.500 95.50 101.6 3.05
12 4.000 108.20 114.3 3.05
13 5.000 134.50 141.3 3.40
14 6.000 161.50 168.3 3.40
15 8.000 211.58 219.1 3.76
16 10.000 264.62 273.0 4.19
17 12.000 314.66 323.8 4.57
18 14.000 342.90 355.6 6.35
19 16.000 393.70 406.4 6.35
20 18.000 444.30 457.0 6.35
21 20.000 495.30 508.0 6.35
(continues on next page)

564 Chapter 4. Data included in Fluids


Fluids Documentation, Release 1.0.21

(continued from previous page)


22 22.000 546.30 559.0 6.35
23 24.000 597.30 610.0 6.35
24 26.000 644.16 660.0 7.92
25 28.000 695.16 711.0 7.92
26 30.000 746.16 762.0 7.92
27 32.000 797.16 813.0 7.92
28 34.000 848.16 864.0 7.92
29 36.000 898.16 914.0 7.92

4.3.4 Schedule 20

NPS, dimensionless Inner diameter, mm Outer diameter, mm Thickness, mm


0 8 206.40 219.1 6.35
1 10 260.30 273.0 6.35
2 12 311.10 323.8 6.35
3 14 339.76 355.6 7.92
4 16 390.56 406.4 7.92
5 18 441.16 457.0 7.92
6 20 488.94 508.0 9.53
7 22 539.94 559.0 9.53
8 24 590.94 610.0 9.53
9 26 634.60 660.0 12.70
10 28 685.60 711.0 12.70
11 30 736.60 762.0 12.70
12 32 787.60 813.0 12.70
13 34 838.60 864.0 12.70
14 36 888.60 914.0 12.70

4.3.5 Schedule 30

NPS, dimensionless Inner diameter, mm Outer diameter, mm Thickness, mm


0 0.125 7.40 10.3 1.45
1 0.250 10.00 13.7 1.85
2 0.375 13.40 17.1 1.85
3 0.500 16.48 21.3 2.41
4 0.750 21.88 26.7 2.41
5 1.000 27.60 33.4 2.90
6 1.250 36.26 42.2 2.97
7 1.500 41.94 48.3 3.18
8 2.000 53.94 60.3 3.18
9 2.500 63.44 73.0 4.78
10 3.000 79.34 88.9 4.78
11 3.500 92.04 101.6 4.78
12 4.000 104.74 114.3 4.78
13 8.000 205.02 219.1 7.04
14 10.000 257.40 273.0 7.80
15 12.000 307.04 323.8 8.38
16 14.000 336.54 355.6 9.53
17 16.000 387.34 406.4 9.53
18 18.000 434.74 457.0 11.13
19 20.000 482.60 508.0 12.70
(continues on next page)

4.3. Pipe Schedules 565


Fluids Documentation, Release 1.0.21

(continued from previous page)


20 22.000 533.60 559.0 12.70
21 24.000 581.46 610.0 14.27
22 28.000 679.24 711.0 15.88
23 30.000 730.24 762.0 15.88
24 32.000 781.24 813.0 15.88
25 34.000 832.24 864.0 15.88
26 36.000 882.24 914.0 15.88

4.3.6 Schedule 60

NPS, dimensionless Inner diameter, mm Outer diameter, mm Thickness, mm


0 8 198.48 219.1 10.31
1 10 247.60 273.0 12.70
2 12 295.26 323.8 14.27
3 14 325.42 355.6 15.09
4 16 373.08 406.4 16.66
5 18 418.90 457.0 19.05
6 20 466.76 508.0 20.62
7 22 514.54 559.0 22.23
8 24 560.78 610.0 24.61

4.3.7 Schedule 80

NPS, dimensionless Inner diameter, mm Outer diameter, mm Thickness, mm


0 0.125 5.48 10.3 2.41
1 0.250 7.66 13.7 3.02
2 0.375 10.70 17.1 3.20
3 0.500 13.84 21.3 3.73
4 0.750 18.88 26.7 3.91
5 1.000 24.30 33.4 4.55
6 1.250 32.50 42.2 4.85
7 1.500 38.14 48.3 5.08
8 2.000 49.22 60.3 5.54
9 2.500 58.98 73.0 7.01
10 3.000 73.66 88.9 7.62
11 3.500 85.44 101.6 8.08
12 4.000 97.18 114.3 8.56
13 5.000 122.24 141.3 9.53
14 6.000 146.36 168.3 10.97
15 8.000 193.70 219.1 12.70
16 10.000 242.82 273.0 15.09
17 12.000 288.84 323.8 17.48
18 14.000 317.50 355.6 19.05
19 16.000 363.52 406.4 21.44
20 18.000 409.34 457.0 23.83
21 20.000 455.62 508.0 26.19
22 22.000 501.84 559.0 28.58
23 24.000 548.08 610.0 30.96

4.3.8 Schedule 100

566 Chapter 4. Data included in Fluids


Fluids Documentation, Release 1.0.21

NPS, dimensionless Inner diameter, mm Outer diameter, mm Thickness, mm


0 8 188.92 219.1 15.09
1 10 236.48 273.0 18.26
2 12 280.92 323.8 21.44
3 14 307.94 355.6 23.83
4 16 354.02 406.4 26.19
5 18 398.28 457.0 29.36
6 20 442.92 508.0 32.54
7 22 489.14 559.0 34.93
8 24 532.22 610.0 38.89

4.3.9 Schedule 120

NPS, dimensionless Inner diameter, mm Outer diameter, mm Thickness, mm


0 4 92.04 114.3 11.13
1 5 115.90 141.3 12.70
2 6 139.76 168.3 14.27
3 8 182.58 219.1 18.26
4 10 230.12 273.0 21.44
5 12 273.00 323.8 25.40
6 14 300.02 355.6 27.79
7 16 344.48 406.4 30.96
8 18 387.14 457.0 34.93
9 20 431.80 508.0 38.10
10 22 476.44 559.0 41.28
11 24 517.96 610.0 46.02

4.3.10 Schedule 140

NPS, dimensionless Inner diameter, mm Outer diameter, mm Thickness, mm


0 8 177.86 219.1 20.62
1 10 222.20 273.0 25.40
2 12 266.64 323.8 28.58
3 14 292.10 355.6 31.75
4 16 333.34 406.4 36.53
5 18 377.66 457.0 39.67
6 20 419.10 508.0 44.45
7 22 463.74 559.0 47.63
8 24 505.26 610.0 52.37

4.3.11 Schedule 160

NPS, dimensionless Inner diameter, mm Outer diameter, mm Thickness, mm


0 0.50 11.74 21.3 4.78
1 0.75 15.58 26.7 5.56
2 1.00 20.70 33.4 6.35
3 1.25 29.50 42.2 6.35
4 1.50 34.02 48.3 7.14
5 2.00 42.82 60.3 8.74
6 2.50 53.94 73.0 9.53
7 3.00 66.64 88.9 11.13
8 4.00 87.32 114.3 13.49
(continues on next page)

4.3. Pipe Schedules 567


Fluids Documentation, Release 1.0.21

(continued from previous page)


9 5.00 109.54 141.3 15.88
10 6.00 131.78 168.3 18.26
11 8.00 173.08 219.1 23.01
12 10.00 215.84 273.0 28.58
13 12.00 257.16 323.8 33.32
14 14.00 284.18 355.6 35.71
15 16.00 325.42 406.4 40.49
16 18.00 366.52 457.0 45.24
17 20.00 407.98 508.0 50.01
18 22.00 451.04 559.0 53.98
19 24.00 490.92 610.0 59.54

4.3.12 Schedule STD

NPS, dimensionless Inner diameter, mm Outer diameter, mm Thickness, mm


0 0.125 6.84 10.3 1.73
1 0.250 9.22 13.7 2.24
2 0.375 12.48 17.1 2.31
3 0.500 15.76 21.3 2.77
4 0.750 20.96 26.7 2.87
5 1.000 26.64 33.4 3.38
6 1.250 35.08 42.2 3.56
7 1.500 40.94 48.3 3.68
8 2.000 52.48 60.3 3.91
9 2.500 62.68 73.0 5.16
10 3.000 77.92 88.9 5.49
11 3.500 90.12 101.6 5.74
12 4.000 102.26 114.3 6.02
13 5.000 128.20 141.3 6.55
14 6.000 154.08 168.3 7.11
15 8.000 202.74 219.1 8.18
16 10.000 254.46 273.0 9.27
17 12.000 304.74 323.8 9.53
18 14.000 336.54 355.6 9.53
19 16.000 387.34 406.4 9.53
20 18.000 437.94 457.0 9.53
21 20.000 488.94 508.0 9.53
22 22.000 539.94 559.0 9.53
23 24.000 590.94 610.0 9.53
24 26.000 640.94 660.0 9.53
25 28.000 691.94 711.0 9.53
26 30.000 742.94 762.0 9.53
27 32.000 793.94 813.0 9.53
28 34.000 844.94 864.0 9.53
29 36.000 894.94 914.0 9.53
30 38.000 945.94 965.0 9.53
31 40.000 996.94 1016.0 9.53
32 42.000 1047.94 1067.0 9.53
33 44.000 1098.94 1118.0 9.53
34 46.000 1148.94 1168.0 9.53
35 48.000 1199.94 1219.0 9.53

568 Chapter 4. Data included in Fluids


Fluids Documentation, Release 1.0.21

4.3.13 Schedule XS

NPS, dimensionless Inner diameter, mm Outer diameter, mm Thickness, mm


0 0.125 5.48 10.3 2.41
1 0.250 7.66 13.7 3.02
2 0.375 10.70 17.1 3.20
3 0.500 13.84 21.3 3.73
4 0.750 18.88 26.7 3.91
5 1.000 24.30 33.4 4.55
6 1.250 32.50 42.2 4.85
7 1.500 38.14 48.3 5.08
8 2.000 49.22 60.3 5.54
9 2.500 58.98 73.0 7.01
10 3.000 73.66 88.9 7.62
11 3.500 85.44 101.6 8.08
12 4.000 97.18 114.3 8.56
13 5.000 122.24 141.3 9.53
14 6.000 146.36 168.3 10.97
15 8.000 193.70 219.1 12.70
16 10.000 247.60 273.0 12.70
17 12.000 298.40 323.8 12.70
18 14.000 330.20 355.6 12.70
19 16.000 381.00 406.4 12.70
20 18.000 431.60 457.0 12.70
21 20.000 482.60 508.0 12.70
22 22.000 533.60 559.0 12.70
23 24.000 584.60 610.0 12.70
24 26.000 634.60 660.0 12.70
25 28.000 685.60 711.0 12.70
26 30.000 736.60 762.0 12.70
27 32.000 787.60 813.0 12.70
28 34.000 838.60 864.0 12.70
29 36.000 888.60 914.0 12.70
30 38.000 939.60 965.0 12.70
31 40.000 990.60 1016.0 12.70
32 42.000 1041.60 1067.0 12.70
33 44.000 1092.60 1118.0 12.70
34 46.000 1142.60 1168.0 12.70
35 48.000 1193.60 1219.0 12.70

4.3.14 Schedule XXS

NPS, dimensionless Inner diameter, mm Outer diameter, mm Thickness, mm


0 0.50 6.36 21.3 7.47
1 0.75 11.06 26.7 7.82
2 1.00 15.22 33.4 9.09
3 1.25 22.80 42.2 9.70
4 1.50 28.00 48.3 10.15
5 2.00 38.16 60.3 11.07
6 2.50 44.96 73.0 14.02
7 3.00 58.42 88.9 15.24
8 4.00 80.06 114.3 17.12
(continues on next page)

4.3. Pipe Schedules 569


Fluids Documentation, Release 1.0.21

(continued from previous page)


9 5.00 103.20 141.3 19.05
10 6.00 124.40 168.3 21.95
11 8.00 174.64 219.1 22.23
12 10.00 222.20 273.0 25.40
13 12.00 273.00 323.8 25.40

4.3.15 Schedule 5S

NPS, dimensionless Inner diameter, mm Outer diameter, mm Thickness, mm


0 0.50 18.00 21.3 1.65
1 0.75 23.40 26.7 1.65
2 1.00 30.10 33.4 1.65
3 1.25 38.90 42.2 1.65
4 1.50 45.00 48.3 1.65
5 2.00 57.00 60.3 1.65
6 2.50 68.78 73.0 2.11
7 3.00 84.68 88.9 2.11
8 3.50 97.38 101.6 2.11
9 4.00 110.08 114.3 2.11
10 5.00 135.76 141.3 2.77
11 6.00 162.76 168.3 2.77
12 8.00 213.56 219.1 2.77
13 10.00 266.30 273.1 3.40
14 12.00 315.98 323.9 3.96
15 14.00 347.68 355.6 3.96
16 16.00 398.02 406.4 4.19
17 18.00 448.62 457.0 4.19
18 20.00 498.44 508.0 4.78
19 22.00 549.44 559.0 4.78
20 24.00 598.92 610.0 5.54
21 30.00 749.30 762.0 6.35

4.3.16 Schedule 10S

NPS, dimensionless Inner diameter, mm Outer diameter, mm Thickness, mm


0 0.125 7.82 10.3 1.24
1 0.250 10.40 13.7 1.65
2 0.375 13.80 17.1 1.65
3 0.500 17.08 21.3 2.11
4 0.750 22.48 26.7 2.11
5 1.000 27.86 33.4 2.77
6 1.250 36.66 42.2 2.77
7 1.500 42.76 48.3 2.77
8 2.000 54.76 60.3 2.77
9 2.500 66.90 73.0 3.05
10 3.000 82.80 88.9 3.05
11 3.500 95.50 101.6 3.05
12 4.000 108.20 114.3 3.05
13 5.000 134.50 141.3 3.40
14 6.000 161.50 168.3 3.40
15 8.000 211.58 219.1 3.76
(continues on next page)

570 Chapter 4. Data included in Fluids


Fluids Documentation, Release 1.0.21

(continued from previous page)


16 10.000 264.72 273.1 4.19
17 12.000 314.76 323.9 4.57
18 14.000 346.04 355.6 4.78
19 16.000 396.84 406.4 4.78
20 18.000 447.44 457.0 4.78
21 20.000 496.92 508.0 5.54
22 22.000 547.92 559.0 5.54
23 24.000 597.30 610.0 6.35
24 30.000 746.16 762.0 7.92

4.3.17 Schedule 40S

NPS, dimensionless Inner diameter, mm Outer diameter, mm Thickness, mm


0 0.125 6.84 10.3 1.73
1 0.250 9.22 13.7 2.24
2 0.375 12.48 17.1 2.31
3 0.500 15.76 21.3 2.77
4 0.750 20.96 26.7 2.87
5 1.000 26.64 33.4 3.38
6 1.250 35.08 42.2 3.56
7 1.500 40.94 48.3 3.68
8 2.000 52.48 60.3 3.91
9 2.500 62.68 73.0 5.16
10 3.000 77.92 88.9 5.49
11 3.500 90.12 101.6 5.74
12 4.000 102.26 114.3 6.02
13 5.000 128.20 141.3 6.55
14 6.000 154.08 168.3 7.11
15 8.000 202.74 219.1 8.18
16 10.000 254.56 273.1 9.27
17 12.000 304.84 323.9 9.53
18 14.000 336.54 355.6 9.53
19 16.000 387.34 406.4 9.53
20 18.000 437.94 457.0 9.53
21 20.000 488.94 508.0 9.53
22 24.000 590.94 610.0 9.53

4.3.18 Schedule 80S

NPS, dimensionless Inner diameter, mm Outer diameter, mm Thickness, mm


0 0.125 5.48 10.3 2.41
1 0.250 7.66 13.7 3.02
2 0.375 10.70 17.1 3.20
3 0.500 13.84 21.3 3.73
4 0.750 18.88 26.7 3.91
5 1.000 24.30 33.4 4.55
6 1.250 32.50 42.2 4.85
7 1.500 38.14 48.3 5.08
8 2.000 49.22 60.3 5.54
9 2.500 58.98 73.0 7.01
10 3.000 73.66 88.9 7.62
(continues on next page)

4.3. Pipe Schedules 571


Fluids Documentation, Release 1.0.21

(continued from previous page)


11 3.500 85.44 101.6 8.08
12 4.000 97.18 114.3 8.56
13 5.000 122.24 141.3 9.53
14 6.000 146.36 168.3 10.97
15 8.000 193.70 219.1 12.70
16 10.000 247.70 273.1 12.70
17 12.000 298.50 323.9 12.70
18 14.000 330.20 355.6 12.70
19 16.000 381.00 406.4 12.70
20 18.000 431.60 457.0 12.70
21 20.000 482.60 508.0 12.70
22 24.000 584.60 610.0 12.70

4.3.19 Schedule 40D1527

NPS, dimensionless Inner diameter, mm Outer diameter, mm Thickness, mm


0 0.125 6.8326 10.2870 1.7272
1 0.250 9.2456 13.7160 2.2352
2 0.375 12.5222 17.1450 2.3114
3 0.500 15.7988 21.3360 2.7686
4 0.750 20.9296 26.6700 2.8702
5 1.000 26.6446 33.4010 3.3782
6 1.250 33.5280 40.6400 3.5560
7 1.500 40.8940 48.2600 3.6830
8 2.000 52.5018 60.3250 3.9116
9 2.500 62.7126 73.0250 5.1562
10 3.000 77.9272 88.9000 5.4864
11 3.500 90.1192 101.6000 5.7404
12 4.000 102.2604 114.3000 6.0198
13 5.000 128.1938 141.3002 6.5532
14 6.000 154.0510 168.2750 7.1120
15 8.000 202.7174 219.0750 8.1788
16 10.000 254.5080 273.0500 9.2710
17 12.000 303.2252 323.8500 10.3124

4.3.20 Schedule 80D1527

NPS, dimensionless Inner diameter, mm Outer diameter, mm Thickness, mm


0 0.125 5.4610 10.2870 2.4130
1 0.250 7.6708 13.7160 3.0226
2 0.375 10.7442 17.1450 3.2004
3 0.500 13.8684 21.3360 3.7338
4 0.750 18.8468 26.6700 3.9116
5 1.000 24.3078 33.4010 4.5466
6 1.250 30.9372 40.6400 4.8514
7 1.500 38.1000 48.2600 5.0800
8 2.000 49.2506 60.3250 5.5372
9 2.500 59.0042 73.0250 7.0104
10 3.000 73.6600 88.9000 7.6200
11 3.500 85.4456 101.6000 8.0772
12 4.000 97.1804 114.3000 8.5598
(continues on next page)

572 Chapter 4. Data included in Fluids


Fluids Documentation, Release 1.0.21

(continued from previous page)


13 5.000 122.2502 141.3002 9.5250
14 6.000 146.3294 168.2750 10.9728
15 8.000 193.6750 219.0750 12.7000
16 10.000 242.9256 273.0500 15.0622
17 12.000 288.9504 323.8500 17.4498

4.3.21 Schedule ABSD2680

NPS, dimensionless Inner diameter, mm Outer diameter, mm Thickness, mm


0 8 196.85 239.014 21.082
1 10 247.65 298.450 25.400
2 12 298.45 357.378 29.464
3 15 374.65 447.548 36.449

4.3.22 Schedule PVCD2680

NPS, dimensionless Inner diameter, mm Outer diameter, mm Thickness, mm


0 8 196.85 239.014 21.082
1 10 247.65 298.450 25.400
2 12 298.45 357.378 29.464
3 15 374.65 447.548 36.449

4.3.23 Schedule DR25C900

NPS, dimensionless Inner diameter, mm Outer diameter, mm Thickness, mm


0 4 112.14 121.9 4.88
1 6 161.28 175.3 7.01
2 8 211.52 229.9 9.19
3 10 259.34 281.9 11.28
4 12 308.48 335.3 13.41

4.3.24 Schedule DR18C900

NPS, dimensionless Inner diameter, mm Outer diameter, mm Thickness, mm


0 4 108.34 121.9 6.78
1 6 155.84 175.3 9.73
2 8 204.34 229.9 12.78
3 10 250.56 281.9 15.67
4 12 298.06 335.3 18.62

4.3.25 Schedule DR14C900

NPS, dimensionless Inner diameter, mm Outer diameter, mm Thickness, mm


0 4 104.48 121.9 8.71
1 6 150.26 175.3 12.52
2 8 197.08 229.9 16.41
3 10 241.62 281.9 20.14
4 12 287.40 335.3 23.95

4.3.26 Schedule CIDR51C905

4.3. Pipe Schedules 573


Fluids Documentation, Release 1.0.21

NPS, dimensionless Inner diameter, mm Outer diameter, mm Thickness, mm


0 18 475.90 495.3 9.70
1 20 527.06 548.6 10.77
2 24 629.60 655.3 12.85
3 30 780.94 812.8 15.93
4 36 934.64 972.8 19.08
5 42 1086.00 1130.3 22.15
6 48 1239.70 1290.3 25.30

4.3.27 Schedule CIDR41C905

NPS, dimensionless Inner diameter, mm Outer diameter, mm Thickness, mm


0 14 369.66 388.6 9.47
1 16 420.46 442.0 10.77
2 18 471.12 495.3 12.09
3 20 521.82 548.6 13.39
4 24 623.34 655.3 15.98
5 30 773.18 812.8 19.81
6 36 925.36 972.8 23.72
7 42 1075.18 1130.3 27.56
8 48 1227.36 1290.3 31.47

4.3.28 Schedule CIDR325C905

NPS, dimensionless Inner diameter, mm Outer diameter, mm Thickness, mm


0 14 364.68 388.6 11.96
1 16 414.82 442.0 13.59
2 18 464.82 495.3 15.24
3 20 514.82 548.6 16.89
4 24 614.96 655.3 20.17
5 30 762.76 812.8 25.02
6 36 912.96 972.8 29.92
7 42 1060.76 1130.3 34.77
8 48 1210.90 1290.3 39.70

4.3.29 Schedule CIDR25C905

NPS, dimensionless Inner diameter, mm Outer diameter, mm Thickness, mm


0 14 357.52 388.6 15.54
1 16 406.64 442.0 17.68
2 18 455.68 495.3 19.81
3 20 504.70 548.6 21.95
4 24 602.88 655.3 26.21
5 30 747.78 812.8 32.51
6 36 894.98 972.8 38.91
7 42 1039.88 1130.3 45.21
8 48 1187.08 1290.3 51.61

4.3.30 Schedule CIDR21C905

NPS, dimensionless Inner diameter, mm Outer diameter, mm Thickness, mm


0 14 351.58 388.6 18.51
(continues on next page)

574 Chapter 4. Data included in Fluids


Fluids Documentation, Release 1.0.21

(continued from previous page)


1 16 399.90 442.0 21.05
2 18 448.10 495.3 23.60
3 20 496.32 548.6 26.14
4 24 592.86 655.3 31.22
5 30 735.38 812.8 38.71
6 36 880.14 972.8 46.33

4.3.31 Schedule CIDR18C905

NPS, dimensionless Inner diameter, mm Outer diameter, mm Thickness, mm


0 14 345.42 388.6 21.59
1 16 392.88 442.0 24.56
2 18 440.28 495.3 27.51
3 20 487.64 548.6 30.48
4 24 582.50 655.3 36.40
5 30 722.48 812.8 45.16

4.3.32 Schedule CIDR14C905

NPS, dimensionless Inner diameter, mm Outer diameter, mm Thickness, mm


0 14 333.08 388.6 27.76
1 16 378.86 442.0 31.57
2 18 424.54 495.3 35.38

4.3.33 Schedule IPSDR21

NPS, dimensionless Inner diameter, mm Outer diameter, mm Thickness, mm


0 14 321.76 355.6 16.92
1 16 367.70 406.4 19.35
2 18 413.66 457.2 21.77
3 20 459.64 508.0 24.18
4 24 551.54 609.6 29.03
5 30 689.46 762.0 36.27
6 36 827.32 914.4 43.54

4.3.34 Schedule IPSDR26

NPS, dimensionless Inner diameter, mm Outer diameter, mm Thickness, mm


0 14 328.26 355.6 13.67
1 16 375.16 406.4 15.62
2 18 422.04 457.2 17.58
3 20 468.94 508.0 19.53
4 24 562.72 609.6 23.44
5 30 703.38 762.0 29.31
6 36 844.04 914.4 35.18

4.3.35 Schedule IPSDR325

NPS, dimensionless Inner diameter, mm Outer diameter, mm Thickness, mm


0 14 333.76 355.6 10.92
1 16 381.40 406.4 12.50
(continues on next page)

4.3. Pipe Schedules 575


Fluids Documentation, Release 1.0.21

(continued from previous page)


2 18 429.06 457.2 14.07
3 20 476.76 508.0 15.62
4 24 572.10 609.6 18.75
5 30 715.12 762.0 23.44
6 36 858.12 914.4 28.14

4.3.36 Schedule IPSDR41

NPS, dimensionless Inner diameter, mm Outer diameter, mm Thickness, mm


0 14 338.28 355.6 8.66
1 16 386.58 406.4 9.91
2 18 434.90 457.2 11.15
3 20 483.20 508.0 12.40
4 24 579.88 609.6 14.86
5 30 724.82 762.0 18.59
6 36 869.80 914.4 22.30

4.3.37 Schedule PS115F679

NPS, dimensionless Inner diameter, mm Outer diameter, mm Thickness, mm


0 18 440.9186 475.0054 17.0434
1 21 519.8110 559.9938 20.0914
2 24 584.8350 629.9962 22.5806
3 27 659.1046 710.0062 25.4508
4 30 754.4816 812.8000 29.1592
5 36 903.0716 972.8200 34.8742
6 42 1049.2232 1130.3000 40.5384
7 48 1197.7624 1290.3200 46.2788
8 54 1357.1728 1462.0240 52.4256
9 60 1452.6260 1564.8940 56.1340

4.3.38 Schedule PS75F679

NPS, dimensionless Inner diameter, mm Outer diameter, mm Thickness, mm


0 18 445.3382 475.0054 14.8336
1 21 524.9926 559.9938 17.5006
2 24 590.6262 629.9962 19.6850
3 27 665.6070 710.0062 22.1996
4 30 762.0000 812.8000 25.4000
5 36 912.0124 972.8200 30.4038
6 42 1059.6372 1130.3000 35.3314
7 48 1209.6496 1290.3200 40.3352
8 54 1370.6348 1462.0240 45.6946
9 60 1467.0532 1564.8940 48.9204

4.3.39 Schedule PS46F679

NPS, dimensionless Inner diameter, mm Outer diameter, mm Thickness, mm


0 18 449.6562 475.0054 12.6746
1 21 530.1234 559.9938 14.9352
2 24 596.4174 629.9962 16.7894
(continues on next page)

576 Chapter 4. Data included in Fluids


Fluids Documentation, Release 1.0.21

(continued from previous page)


3 27 672.1602 710.0062 18.9230
4 30 769.4676 812.8000 21.6662
5 36 920.9532 972.8200 25.9334
6 42 1070.0004 1130.3000 30.1498
7 48 1221.4860 1290.3200 34.4170
8 54 1384.0460 1462.0240 38.9890
9 60 1481.4296 1564.8940 41.7322

4.3.40 Schedule PVCD2665

NPS, dimensionless Inner diameter, mm Outer diameter, mm Thickness, mm


0 1.25 35.0520 42.164 3.5560
1 1.50 40.8940 48.260 3.6830
2 2.00 52.5018 60.325 3.9116
3 3.00 77.9272 88.900 5.4864
4 4.00 102.2604 114.300 6.0198
5 6.00 154.0510 168.275 7.1120
6 8.00 202.7174 219.075 8.1788
7 10.00 254.5080 273.050 9.2710
8 12.00 303.2252 323.850 10.3124
9 14.00 333.7560 355.600 10.9220
10 16.00 381.0000 406.400 12.7000
11 18.00 428.6504 457.200 14.2748
12 20.00 477.8756 508.000 15.0622
13 24.00 574.7004 609.600 17.4498

4.3.41 Schedule 40D1785

NPS, dimensionless Inner diameter, mm Outer diameter, mm Thickness, mm


0 0.125 6.8326 10.2870 1.7272
1 0.250 9.2456 13.7160 2.2352
2 0.375 12.5222 17.1450 2.3114
3 0.500 15.7988 21.3360 2.7686
4 0.750 20.9296 26.6700 2.8702
5 1.000 26.6446 33.4010 3.3782
6 1.250 35.0520 42.1640 3.5560
7 1.500 40.8940 48.2600 3.6830
8 2.000 52.5018 60.3250 3.9116
9 2.500 62.7126 73.0250 5.1562
10 3.000 77.9272 88.9000 5.4864
11 3.500 90.1192 101.6000 5.7404
12 4.000 102.2604 114.3000 6.0198
13 5.000 128.1938 141.3002 6.5532
14 6.000 154.0510 168.2750 7.1120
15 8.000 202.7174 219.0750 8.1788
16 10.000 254.5080 273.0500 9.2710
17 12.000 303.2252 323.8500 10.3124
18 14.000 333.4004 355.6000 11.0998
19 16.000 381.0000 406.4000 12.7000
20 18.000 428.6504 457.2000 14.2748
21 20.000 477.8756 508.0000 15.0622
22 24.000 574.7004 609.6000 17.4498

4.3. Pipe Schedules 577


Fluids Documentation, Release 1.0.21

4.3.42 Schedule 80D1785

NPS, dimensionless Inner diameter, mm Outer diameter, mm Thickness, mm


0 0.125 5.4610 10.2870 2.4130
1 0.250 7.6708 13.7160 3.0226
2 0.375 10.7442 17.1450 3.2004
3 0.500 13.8684 21.3360 3.7338
4 0.750 18.8468 26.6700 3.9116
5 1.000 24.3078 33.4010 4.5466
6 1.250 32.4612 42.1640 4.8514
7 1.500 38.1000 48.2600 5.0800
8 2.000 49.2506 60.3250 5.5372
9 2.500 59.0042 73.0250 7.0104
10 3.000 73.6600 88.9000 7.6200
11 3.500 85.4456 101.6000 8.0772
12 4.000 97.1804 114.3000 8.5598
13 5.000 122.2502 141.3002 9.5250
14 6.000 146.3294 168.2750 10.9728
15 8.000 193.6750 219.0750 12.7000
16 10.000 242.9256 273.0500 15.0622
17 12.000 288.9504 323.8500 17.4498
18 14.000 317.5000 355.6000 19.0500
19 16.000 363.5756 406.4000 21.4122
20 18.000 409.6004 457.2000 23.7998
21 20.000 455.6252 508.0000 26.1874
22 24.000 547.7256 609.6000 30.9372

4.3.43 Schedule 120D1785

NPS, dimensionless Inner diameter, mm Outer diameter, mm Thickness, mm


0 0.50 12.7000 21.3360 4.3180
1 0.75 18.0340 26.6700 4.3180
2 1.00 23.2410 33.4010 5.0800
3 1.25 31.2420 42.1640 5.4610
4 1.50 36.8300 48.2600 5.7150
5 2.00 47.6250 60.3250 6.3500
6 2.50 57.7850 73.0250 7.6200
7 3.00 71.1200 88.9000 8.8900
8 3.50 83.8200 101.6000 8.8900
9 4.00 92.1004 114.3000 11.0998
10 5.00 115.9002 141.3002 12.7000
11 6.00 139.7254 168.2750 14.2748
12 8.00 182.6006 219.0750 18.2372
13 10.00 230.2256 273.0500 21.4122
14 12.00 273.0500 323.8500 25.4000

4.3.44 Schedule DR135D2241

NPS, dimensionless Inner diameter, mm Outer diameter, mm Thickness, mm


0 0.125 7.2390 10.2870 1.5240
1 0.250 10.6680 13.7160 1.5240
(continues on next page)

578 Chapter 4. Data included in Fluids


Fluids Documentation, Release 1.0.21

(continued from previous page)


2 0.375 14.0970 17.1450 1.5240
3 0.500 18.1864 21.3360 1.5748
4 0.750 22.7076 26.6700 1.9812
5 1.000 28.4734 33.4010 2.4638
6 1.250 35.9156 42.1640 3.1242
7 1.500 41.0972 48.2600 3.5814
8 2.000 51.3842 60.3250 4.4704
9 2.500 62.2046 73.0250 5.4102
10 3.000 75.7428 88.9000 6.5786
11 3.500 86.5632 101.6000 7.5184
12 4.000 97.3836 114.3000 8.4582
13 5.000 120.3706 141.3002 10.4648
14 6.000 143.3322 168.2750 12.4714

4.3.45 Schedule DR17D2241

NPS, dimensionless Inner diameter, mm Outer diameter, mm Thickness, mm


0 0.75 23.5204 26.6700 1.5748
1 1.00 29.4894 33.4010 1.9558
2 1.25 37.1856 42.1640 2.4892
3 1.50 42.5704 48.2600 2.8448
4 2.00 53.2130 60.3250 3.5560
5 2.50 64.4398 73.0250 4.2926
6 3.00 78.4352 88.9000 5.2324
7 3.50 89.6620 101.6000 5.9690
8 4.00 100.8380 114.3000 6.7310
9 5.00 124.6886 141.3002 8.3058
10 6.00 148.4630 168.2750 9.9060
11 8.00 193.2686 219.0750 12.9032
12 10.00 240.9444 273.0500 16.0528
13 12.00 285.7500 323.8500 19.0500
14 14.00 313.7916 355.6000 20.9042
15 16.00 358.5972 406.4000 23.9014
16 18.00 403.4028 457.2000 26.8986
17 20.00 448.2592 508.0000 29.8704
18 24.00 537.8704 609.6000 35.8648
19 30.00 672.3380 762.0000 44.8310
20 36.00 806.8056 914.4000 53.7972

4.3.46 Schedule DR21D2241

NPS, dimensionless Inner diameter, mm Outer diameter, mm Thickness, mm


0 0.75 23.6220 26.6700 1.5240
1 1.00 30.2006 33.4010 1.6002
2 1.25 38.1508 42.1640 2.0066
3 1.50 43.6880 48.2600 2.2860
4 2.00 54.5846 60.3250 2.8702
5 2.50 66.0654 73.0250 3.4798
6 3.00 80.4164 88.9000 4.2418
7 3.50 91.9480 101.6000 4.8260
8 4.00 103.4288 114.3000 5.4356
(continues on next page)

4.3. Pipe Schedules 579


Fluids Documentation, Release 1.0.21

(continued from previous page)


9 5.00 127.8382 141.3002 6.7310
10 6.00 152.2222 168.2750 8.0264
11 8.00 198.2470 219.0750 10.4140
12 10.00 247.0912 273.0500 12.9794
13 12.00 293.0652 323.8500 15.3924
14 14.00 321.7672 355.6000 16.9164
15 16.00 367.6904 406.4000 19.3548
16 18.00 413.6644 457.2000 21.7678
17 20.00 459.6384 508.0000 24.1808
18 24.00 551.5356 609.6000 29.0322
19 30.00 689.4576 762.0000 36.2712
20 36.00 827.3288 914.4000 43.5356

4.3.47 Schedule DR26D2241

NPS, dimensionless Inner diameter, mm Outer diameter, mm Thickness, mm


0 1.00 30.3530 33.4010 1.5240
1 1.25 38.9128 42.1640 1.6256
2 1.50 44.5516 48.2600 1.8542
3 2.00 55.7022 60.3250 2.3114
4 2.50 67.4370 73.0250 2.7940
5 3.00 82.0420 88.9000 3.4290
6 3.50 93.7768 101.6000 3.9116
7 4.00 105.5116 114.3000 4.3942
8 5.00 130.4290 141.3002 5.4356
9 6.00 155.3210 168.2750 6.4770
10 8.00 202.2094 219.0750 8.4328
11 10.00 252.0696 273.0500 10.4902
12 12.00 298.9580 323.8500 12.4460
13 14.00 328.2696 355.6000 13.6652
14 16.00 375.1580 406.4000 15.6210
15 18.00 422.0464 457.2000 17.5768
16 20.00 468.9348 508.0000 19.5326
17 24.00 562.7116 609.6000 23.4442
18 30.00 703.3768 762.0000 29.3116
19 36.00 844.0420 914.4000 35.1790

4.3.48 Schedule DR325D2241

NPS, dimensionless Inner diameter, mm Outer diameter, mm Thickness, mm


0 1.25 39.1160 42.1640 1.5240
1 1.50 45.2120 48.2600 1.5240
2 2.00 56.6166 60.3250 1.8542
3 2.50 68.5546 73.0250 2.2352
4 3.00 83.4136 88.9000 2.7432
5 3.50 95.3516 101.6000 3.1242
6 4.00 107.2896 114.3000 3.5052
7 5.00 132.6134 141.3002 4.3434
8 6.00 157.9118 168.2750 5.1816
9 8.00 205.6130 219.0750 6.7310
10 10.00 256.2352 273.0500 8.4074
(continues on next page)

580 Chapter 4. Data included in Fluids


Fluids Documentation, Release 1.0.21

(continued from previous page)


11 12.00 303.9364 323.8500 9.9568
12 14.00 333.7560 355.6000 10.9220
13 16.00 381.4064 406.4000 12.4968
14 18.00 429.0568 457.2000 14.0716
15 20.00 476.7580 508.0000 15.6210
16 24.00 572.1096 609.6000 18.7452
17 30.00 715.1116 762.0000 23.4442
18 36.00 858.1136 914.4000 28.1432

4.3.49 Schedule DR41D2241

NPS, dimensionless Inner diameter, mm Outer diameter, mm Thickness, mm


0 3.0 84.5820 88.9000 2.1590
1 3.5 96.6216 101.6000 2.4892
2 4.0 108.7120 114.3000 2.7940
3 5.0 134.3914 141.3002 3.4544
4 6.0 160.0454 168.2750 4.1148
5 8.0 208.4070 219.0750 5.3340
6 10.0 259.7404 273.0500 6.6548
7 12.0 308.0512 323.8500 7.8994
8 14.0 338.2772 355.6000 8.6614
9 16.0 386.5880 406.4000 9.9060
10 18.0 434.8988 457.2000 11.1506
11 20.0 483.2096 508.0000 12.3952
12 24.0 579.8820 609.6000 14.8590
13 30.0 724.8144 762.0000 18.5928
14 36.0 869.7976 914.4000 22.3012

4.3.50 Schedule DR64D2241

NPS, dimensionless Inner diameter, mm Outer diameter, mm Thickness, mm


0 4 110.7440 114.3000 1.7780
1 5 136.8806 141.3002 2.2098
2 6 162.9918 168.2750 2.6416
3 8 212.2170 219.0750 3.4290
4 10 264.5156 273.0500 4.2672
5 12 313.7408 323.8500 5.0546

4.3.51 Schedule DR21D2241CTS

NPS, dimensionless Inner diameter, mm Outer diameter, mm Thickness, mm


0 1.00 25.5270 28.575 1.5240
1 1.25 31.6230 34.925 1.6510
2 1.50 37.3634 41.275 1.9558
3 2.00 48.8442 53.975 2.5654

4.3.52 Schedule DR17D2241CTS

NPS, dimensionless Inner diameter, mm Outer diameter, mm Thickness, mm


0 0.75 19.1770 22.225 1.5240
1 1.00 25.2222 28.575 1.6764
(continues on next page)

4.3. Pipe Schedules 581


Fluids Documentation, Release 1.0.21

(continued from previous page)


2 1.25 30.8102 34.925 2.0574
3 1.50 36.3982 41.275 2.4384
4 2.00 47.6250 53.975 3.1750

4.3.53 Schedule DR135D2241CTS

NPS, dimensionless Inner diameter, mm Outer diameter, mm Thickness, mm


0 0.50 12.8270 15.875 1.5240
1 0.75 18.9230 22.225 1.6510
2 1.00 24.3586 28.575 2.1082
3 1.25 29.7434 34.925 2.5908
4 1.50 35.1790 41.275 3.0480
5 2.00 45.9994 53.975 3.9878

4.3.54 Schedule DR11D2241CTS

NPS, dimensionless Inner diameter, mm Outer diameter, mm Thickness, mm


0 0.50 12.8270 15.875 1.5240
1 0.75 18.1610 22.225 2.0320
2 1.00 23.3934 28.575 2.5908
3 1.25 28.5750 34.925 3.1750
4 1.50 33.7566 41.275 3.7592
5 2.00 44.1706 53.975 4.9022

4.3.55 Schedule DR21D2241PIP

NPS, dimensionless Inner diameter, mm Outer diameter, mm Thickness, mm


0 15 351.6376 388.62 18.4912

4.3.56 Schedule DR26D2241PIP

NPS, dimensionless Inner diameter, mm Outer diameter, mm Thickness, mm


0 15 358.7496 388.6200 14.9352
1 18 438.4802 475.0054 18.2626
2 21 516.9154 559.9938 21.5392
3 24 581.5330 629.9962 24.2316
4 27 655.3962 710.0062 27.3050

4.3.57 Schedule DR325D2241PIP

NPS, dimensionless Inner diameter, mm Outer diameter, mm Thickness, mm


0 6 146.3548 155.9560 4.8006
1 8 194.5132 207.2640 6.3754
2 10 243.1288 259.0800 7.9756
3 12 291.7444 310.8960 9.5758
4 15 364.6932 388.6200 11.9634
5 18 445.7954 475.0054 14.6050
6 21 525.5514 559.9938 17.2212
7 24 591.2358 629.9962 19.3802
8 27 666.3182 710.0062 21.8440

582 Chapter 4. Data included in Fluids


Fluids Documentation, Release 1.0.21

4.3.58 Schedule DR35D2241PIP

NPS, dimensionless Inner diameter, mm Outer diameter, mm Thickness, mm


0 15 366.4204 388.6200 11.0998
1 18 447.8782 475.0054 13.5636
2 21 527.9898 559.9938 16.0020
3 24 593.9790 629.9962 18.0086
4 27 669.4170 710.0062 20.2946

4.3.59 Schedule DR41D2241PIP

NPS, dimensionless Inner diameter, mm Outer diameter, mm Thickness, mm


0 6 148.3360 155.9560 3.8100
1 8 197.1548 207.2640 5.0546
2 10 246.4308 259.0800 6.3246
3 12 295.7068 310.8960 7.5946
4 15 369.6716 388.6200 9.4742
5 18 451.8406 475.0054 11.5824
6 21 532.6634 559.9938 13.6652
7 24 599.2622 629.9962 15.3670
8 27 675.3606 710.0062 17.3228

4.3.60 Schedule DR51D2241PIP

NPS, dimensionless Inner diameter, mm Outer diameter, mm Thickness, mm


0 6 149.8600 155.9560 3.0480
1 8 199.1360 207.2640 4.0640
2 10 248.9200 259.0800 5.0800
3 12 298.7040 310.8960 6.0960
4 15 373.3800 388.6200 7.6200
5 18 456.4126 475.0054 9.2964
6 21 538.0482 559.9938 10.9728
7 24 605.3074 629.9962 12.3444
8 27 682.1678 710.0062 13.9192

4.3.61 Schedule DR81D2241PIP

NPS, dimensionless Inner diameter, mm Outer diameter, mm Thickness, mm


0 6 152.0952 155.956 1.9304
1 8 202.1332 207.264 2.5654
2 10 252.6792 259.080 3.2004
3 12 303.2252 310.896 3.8354
4 15 379.0188 388.620 4.8006

4.3.62 Schedule S40F441IPS

NPS, dimensionless Inner diameter, mm Outer diameter, mm Thickness, mm


0 0.250 9.2456 13.7160 2.2352
1 0.375 12.5222 17.1450 2.3114
2 0.500 15.7988 21.3360 2.7686
3 0.750 20.9296 26.6700 2.8702
(continues on next page)

4.3. Pipe Schedules 583


Fluids Documentation, Release 1.0.21

(continued from previous page)


4 1.000 26.6446 33.4010 3.3782
5 1.250 35.0520 42.1640 3.5560
6 1.500 40.8940 48.2600 3.6830
7 2.000 52.5018 60.3250 3.9116
8 2.500 62.7126 73.0250 5.1562
9 3.000 77.9272 88.9000 5.4864
10 3.500 90.1192 101.6000 5.7404
11 4.000 102.2604 114.3000 6.0198
12 5.000 128.1938 141.3002 6.5532
13 6.000 154.0510 168.2750 7.1120
14 8.000 202.7174 219.0750 8.1788
15 10.000 254.5080 273.0500 9.2710
16 12.000 303.2252 323.8500 10.3124
17 14.000 333.4004 355.6000 11.0998
18 16.000 381.0000 406.4000 12.7000

4.3.63 Schedule S80F441IPS

NPS, dimensionless Inner diameter, mm Outer diameter, mm Thickness, mm


0 0.250 7.6708 13.7160 3.0226
1 0.375 10.7442 17.1450 3.2004
2 0.500 13.8684 21.3360 3.7338
3 0.750 18.8468 26.6700 3.9116
4 1.000 24.3078 33.4010 4.5466
5 1.250 32.4612 42.1640 4.8514
6 1.500 38.1000 48.2600 5.0800
7 2.000 49.2506 60.3250 5.5372
8 2.500 59.0042 73.0250 7.0104
9 3.000 73.6600 88.9000 7.6200
10 3.500 85.4456 101.6000 8.0772
11 4.000 97.1804 114.3000 8.5598
12 5.000 122.2502 141.3002 9.5250
13 6.000 146.3294 168.2750 10.9728
14 8.000 193.6750 219.0750 12.7000
15 10.000 242.9256 273.0500 15.0622
16 12.000 288.9504 323.8500 17.4498
17 14.000 317.5000 355.6000 19.0500
18 16.000 363.5756 406.4000 21.4122

4.3.64 Schedule S40F441SI

NPS, dimensionless Inner diameter, mm Outer diameter, mm Thickness, mm


0 8 9.22 13.7 2.24
1 10 12.48 17.1 2.31
2 15 15.76 21.3 2.77
3 20 20.96 26.7 2.87
4 25 26.64 33.4 3.38
5 32 35.08 42.2 3.56
6 40 40.94 48.3 3.68
7 50 52.48 60.3 3.91
8 65 62.68 73.0 5.16
(continues on next page)

584 Chapter 4. Data included in Fluids


Fluids Documentation, Release 1.0.21

(continued from previous page)


9 80 77.92 88.9 5.49
10 90 90.12 101.6 5.74
11 100 102.26 114.3 6.02
12 125 128.20 141.3 6.55
13 150 154.08 168.3 7.11
14 200 202.74 219.1 8.18
15 250 254.56 273.1 9.27
16 300 303.28 323.9 10.31
17 350 333.40 355.6 11.10
18 400 381.00 406.4 12.70

4.3.65 Schedule S80F441SI

NPS, dimensionless Inner diameter, mm Outer diameter, mm Thickness, mm


0 8 7.66 13.7 3.02
1 10 10.70 17.1 3.20
2 15 13.84 21.3 3.73
3 20 18.88 26.7 3.91
4 25 24.30 33.4 4.55
5 32 32.50 42.2 4.85
6 40 38.14 48.3 5.08
7 50 49.22 60.3 5.54
8 65 58.98 73.0 7.01
9 80 73.66 88.9 7.62
10 90 85.44 101.6 8.08
11 100 97.18 114.3 8.56
12 125 122.26 141.3 9.52
13 150 146.36 168.3 10.97
14 200 193.70 219.1 12.70
15 250 242.98 273.1 15.06
16 300 289.00 323.9 17.45
17 350 317.50 355.6 19.05
18 400 364.12 406.4 21.14

4.3.66 Schedule DR325F2619SI

NPS, dimensionless Inner diameter, mm Outer diameter, mm Thickness, mm


0 4 107.28 114.30 3.51
1 5 132.60 141.30 4.35
2 6 157.92 168.28 5.18
3 8 205.62 219.08 6.73
4 10 256.23 273.05 8.41
5 12 303.93 323.85 9.96
6 14 333.70 355.60 10.95
7 16 381.40 406.40 12.50
8 18 429.06 457.20 14.07
9 20 476.76 508.00 15.62
10 22 524.40 558.80 17.20
11 24 572.10 609.60 18.75
12 26 619.76 660.40 20.32
13 28 667.42 711.20 21.89
(continues on next page)

4.3. Pipe Schedules 585


Fluids Documentation, Release 1.0.21

(continued from previous page)


14 30 715.12 762.00 23.44
15 32 762.76 812.80 25.02
16 34 810.46 863.60 26.57
17 36 858.12 914.40 28.14
18 42 1001.16 1066.80 32.82
19 48 1144.16 1219.20 37.52
20 54 1287.18 1371.60 42.21
21 63 1501.76 1600.20 49.22
22 65 1549.40 1651.00 50.80

4.3.67 Schedule DR26F2619SI

NPS, dimensionless Inner diameter, mm Outer diameter, mm Thickness, mm


0 4 105.52 114.30 4.39
1 5 130.44 141.30 5.43
2 6 155.32 168.28 6.48
3 8 202.22 219.08 8.43
4 10 252.07 273.05 10.49
5 12 298.95 323.85 12.45
6 14 328.26 355.60 13.67
7 16 375.16 406.40 15.62
8 18 422.04 457.20 17.58
9 20 467.56 508.00 20.22
10 22 515.82 558.80 21.49
11 24 562.72 609.60 23.44
12 26 609.60 660.40 25.40
13 28 656.48 711.20 27.36
14 30 703.38 762.00 29.31
15 32 750.26 812.80 31.27
16 34 797.16 863.60 33.22
17 36 844.04 914.40 35.18
18 42 984.76 1066.80 41.02
19 48 1125.42 1219.20 46.89
20 54 1266.08 1371.60 52.76
21 63 1477.10 1600.20 61.55
22 65 1524.00 1651.00 63.50

4.3.68 Schedule DR21F2619SI

NPS, dimensionless Inner diameter, mm Outer diameter, mm Thickness, mm


0 2.5 66.07 73.03 3.48
1 3.0 80.42 88.90 4.24
2 4.0 103.42 114.30 5.44
3 5.0 127.84 141.30 6.73
4 6.0 152.28 168.28 8.00
5 8.0 198.20 219.08 10.44
6 10.0 247.05 273.05 13.00
7 12.0 293.01 323.85 15.42
8 14.0 321.72 355.60 16.94
9 16.0 367.70 406.40 19.35
10 18.0 413.66 457.20 21.77
(continues on next page)

586 Chapter 4. Data included in Fluids


Fluids Documentation, Release 1.0.21

(continued from previous page)


11 20.0 459.64 508.00 24.18
12 22.0 505.56 558.80 26.62
13 24.0 551.54 609.60 29.03
14 26.0 597.50 660.40 31.45
15 28.0 643.48 711.20 33.86
16 30.0 689.40 762.00 36.30
17 32.0 735.38 812.80 38.71
18 34.0 781.36 863.60 41.12
19 36.0 827.32 914.40 43.54
20 42.0 965.20 1066.80 50.80
21 48.0 1103.08 1219.20 58.06
22 54.0 1241.00 1371.60 65.30
23 63.0 1447.80 1600.20 76.20
24 65.0 1493.78 1651.00 78.61

4.3.69 Schedule DR17F2619SI

NPS, dimensionless Inner diameter, mm Outer diameter, mm Thickness, mm


0 2.0 53.21 60.33 3.56
1 2.5 64.45 73.03 4.29
2 3.0 78.44 88.90 5.23
3 4.0 100.84 114.30 6.73
4 5.0 124.68 141.30 8.31
5 6.0 148.46 168.28 9.91
6 8.0 193.32 219.08 12.88
7 10.0 240.95 273.05 16.05
8 12.0 285.75 323.85 19.05
9 14.0 313.74 355.60 20.93
10 16.0 358.60 406.40 23.90
11 18.0 403.40 457.20 26.90
12 20.0 448.26 508.00 29.87
13 22.0 493.06 558.80 32.87
14 24.0 537.88 609.60 35.86
15 26.0 582.72 660.40 38.84
16 28.0 627.54 711.20 41.83
17 30.0 672.34 762.00 44.83
18 32.0 717.20 812.80 47.80
19 34.0 762.00 863.60 50.80
20 36.0 806.80 914.40 53.80
21 42.0 941.28 1066.80 62.76
22 48.0 1075.74 1219.20 71.73
23 54.0 1210.26 1371.60 80.67

4.3.70 Schedule DR135F2619SI

NPS, dimensionless Inner diameter, mm Outer diameter, mm Thickness, mm


0 0.50 18.18 21.34 1.58
1 0.75 22.71 26.67 1.98
2 1.00 28.48 33.40 2.46
3 1.25 35.92 42.16 3.12
4 1.50 41.10 48.26 3.58
(continues on next page)

4.3. Pipe Schedules 587


Fluids Documentation, Release 1.0.21

(continued from previous page)


5 2.00 51.39 60.33 4.47
6 2.50 62.21 73.03 5.41
7 3.00 75.74 88.90 6.58
8 4.00 97.38 114.30 8.46
9 5.00 120.36 141.30 10.47
10 6.00 143.34 168.28 12.47
11 8.00 186.62 219.08 16.23
12 10.00 232.61 273.05 20.22
13 12.00 275.89 323.85 23.98
14 14.00 302.92 355.60 26.34
15 16.00 346.20 406.40 30.10
16 18.00 389.48 457.20 33.86
17 20.00 432.76 508.00 37.62
18 22.00 476.00 558.80 41.40
19 24.00 519.28 609.60 45.16
20 26.00 562.56 660.40 48.92
21 28.00 605.84 711.20 52.68
22 30.00 649.12 762.00 56.44
23 32.00 692.40 812.80 60.20
24 34.00 735.64 863.60 63.98
25 36.00 778.92 914.40 67.74
26 42.00 908.76 1066.80 79.02

4.3.71 Schedule DR11F2619SI

NPS, dimensionless Inner diameter, mm Outer diameter, mm Thickness, mm


0 0.50 17.48 21.34 1.93
1 0.75 21.85 26.67 2.41
2 1.00 27.30 33.40 3.05
3 1.25 34.48 42.16 3.84
4 1.50 39.48 48.26 4.39
5 2.00 49.35 60.33 5.49
6 2.50 59.77 73.03 6.63
7 3.00 72.74 88.90 8.08
8 4.00 93.52 114.30 10.39
9 5.00 115.60 141.30 12.85
10 6.00 137.70 168.28 15.29
11 8.00 179.26 219.08 19.91
12 10.00 223.41 273.05 24.82
13 12.00 264.97 323.85 29.44
14 14.00 290.94 355.60 32.33
15 16.00 332.48 406.40 36.96
16 18.00 374.10 457.20 41.55
17 20.00 415.64 508.00 46.18
18 22.00 457.20 558.80 50.80
19 24.00 498.76 609.60 55.42
20 26.00 540.30 660.40 60.05
21 28.00 586.74 711.20 62.23
22 30.00 623.46 762.00 69.27
23 32.00 665.02 812.80 73.89
24 34.00 706.58 863.60 78.51
25 36.00 748.14 914.40 83.13

588 Chapter 4. Data included in Fluids


Fluids Documentation, Release 1.0.21

4.3.72 Schedule DR9F2619SI

NPS, dimensionless Inner diameter, mm Outer diameter, mm Thickness, mm


0 0.50 16.62 21.34 2.36
1 0.75 20.73 26.67 2.97
2 1.00 25.98 33.40 3.71
3 1.25 32.82 42.16 4.67
4 1.50 37.54 48.26 5.36
5 2.00 46.91 60.33 6.71
6 2.50 56.83 73.03 8.10
7 3.00 69.14 88.90 9.88
8 4.00 88.90 114.30 12.70
9 5.00 109.90 141.30 15.70
10 6.00 130.90 168.28 18.69
11 8.00 170.42 219.08 24.33
12 10.00 212.39 273.05 30.33
13 12.00 251.87 323.85 35.99
14 14.00 276.56 355.60 39.52
15 16.00 316.08 406.40 45.16
16 18.00 355.60 457.20 50.80
17 20.00 395.12 508.00 56.44
18 22.00 434.64 558.80 62.08
19 24.00 474.12 609.60 67.74
20 26.00 513.64 660.40 73.38
21 28.00 553.16 711.20 79.02
22 30.00 592.68 762.00 84.66

4.3.73 Schedule DR73F2619SI

NPS, dimensionless Inner diameter, mm Outer diameter, mm Thickness, mm


0 0.50 15.50 21.34 2.92
1 0.75 19.35 26.67 3.66
2 1.00 24.26 33.40 4.57
3 1.25 30.62 42.16 5.77
4 1.50 35.06 48.26 6.60
5 2.00 43.81 60.33 8.26
6 2.50 53.03 73.03 10.00
7 3.00 64.56 88.90 12.17
8 4.00 83.00 114.30 15.65
9 5.00 102.58 141.30 19.36
10 6.00 122.16 168.28 23.06
11 8.00 159.04 219.08 30.02
12 10.00 198.23 273.05 37.41
13 12.00 235.11 323.85 44.37
14 14.00 258.16 355.60 48.72
15 16.00 295.04 406.40 55.68
16 18.00 331.92 457.20 62.64
17 20.00 368.80 508.00 69.60
18 22.00 405.68 558.80 76.56
19 24.00 442.56 609.60 83.52

4.3. Pipe Schedules 589


Fluids Documentation, Release 1.0.21

4.3.74 Schedule DR7F2619SI

NPS, dimensionless Inner diameter, mm Outer diameter, mm Thickness, mm


0 0.50 15.24 21.34 3.05
1 0.75 19.05 26.67 3.81
2 1.00 23.84 33.40 4.78
3 1.25 30.12 42.16 6.02
4 1.50 34.50 48.26 6.88
5 2.00 43.11 60.33 8.61
6 2.50 52.17 73.03 10.43
7 3.00 63.50 88.90 12.70
8 4.00 81.64 114.30 16.33
9 5.00 100.92 141.30 20.19
10 6.00 120.22 168.28 24.03
11 8.00 156.50 219.08 31.29
12 10.00 195.03 273.05 39.01
13 12.00 231.35 323.85 46.25
14 14.00 254.00 355.60 50.80
15 16.00 290.28 406.40 58.06
16 18.00 326.60 457.20 65.30
17 20.00 362.86 508.00 72.57
18 22.00 399.14 558.80 79.83
19 24.00 435.40 609.60 87.10

4.3.75 Schedule DR325F2619IPS

NPS, dimensionless Inner diameter, mm Outer diameter, mm Thickness, mm


0 4 107.2896 114.3000 3.5052
1 5 132.6134 141.3002 4.3434
2 6 157.9118 168.2750 5.1816
3 8 205.6130 219.0750 6.7310
4 10 256.2352 273.0500 8.4074
5 12 303.9364 323.8500 9.9568
6 14 333.7052 355.6000 10.9474
7 16 381.4064 406.4000 12.4968
8 18 429.0568 457.2000 14.0716
9 20 476.7580 508.0000 15.6210
10 22 524.4084 558.8000 17.1958
11 24 572.1096 609.6000 18.7452
12 26 619.7600 660.4000 20.3200
13 28 667.4104 711.2000 21.8948
14 30 715.1116 762.0000 23.4442
15 32 762.7620 812.8000 25.0190
16 34 810.4632 863.6000 26.5684
17 36 858.1136 914.4000 28.1432
18 42 1001.1664 1066.8000 32.8168
19 48 1144.1684 1219.2000 37.5158
20 54 1287.1704 1371.6000 42.2148
21 63 1501.7496 1600.2000 49.2252
22 65 1549.4000 1651.0000 50.8000

590 Chapter 4. Data included in Fluids


Fluids Documentation, Release 1.0.21

4.3.76 Schedule DR26F2619IPS

NPS, dimensionless Inner diameter, mm Outer diameter, mm Thickness, mm


0 4 105.5116 114.3000 4.3942
1 5 130.4290 141.3002 5.4356
2 6 155.3210 168.2750 6.4770
3 8 202.2094 219.0750 8.4328
4 10 252.0696 273.0500 10.4902
5 12 298.9580 323.8500 12.4460
6 14 328.2696 355.6000 13.6652
7 16 375.1580 406.4000 15.6210
8 18 422.0464 457.2000 17.5768
9 20 468.9348 508.0000 19.5326
10 22 515.8232 558.8000 21.4884
11 24 562.7116 609.6000 23.4442
12 26 609.6000 660.4000 25.4000
13 28 656.4884 711.2000 27.3558
14 30 703.3768 762.0000 29.3116
15 32 750.2652 812.8000 31.2674
16 34 797.1536 863.6000 33.2232
17 36 844.0420 914.4000 35.1790
18 42 984.7580 1066.8000 41.0210
19 48 1125.4232 1219.2000 46.8884
20 54 1266.0884 1371.6000 52.7558
21 63 1477.1116 1600.2000 61.5442
22 65 1524.0000 1651.0000 63.5000

4.3.77 Schedule DR21F2619IPS

NPS, dimensionless Inner diameter, mm Outer diameter, mm Thickness, mm


0 2.5 66.0654 73.0250 3.4798
1 3.0 80.4164 88.9000 4.2418
2 4.0 103.4288 114.3000 5.4356
3 5.0 127.8382 141.3002 6.7310
4 6.0 152.2730 168.2750 8.0010
5 8.0 198.1962 219.0750 10.4394
6 10.0 247.0404 273.0500 13.0048
7 12.0 293.0144 323.8500 15.4178
8 14.0 321.7164 355.6000 16.9418
9 16.0 367.6904 406.4000 19.3548
10 18.0 413.6644 457.2000 21.7678
11 20.0 459.6384 508.0000 24.1808
12 22.0 505.5616 558.8000 26.6192
13 24.0 551.5356 609.6000 29.0322
14 26.0 597.5096 660.4000 31.4452
15 28.0 643.4836 711.2000 33.8582
16 30.0 689.4068 762.0000 36.2966
17 32.0 735.3808 812.8000 38.7096
18 34.0 781.3548 863.6000 41.1226
19 36.0 827.3288 914.4000 43.5356
20 42.0 965.2000 1066.8000 50.8000
21 48.0 1103.0712 1219.2000 58.0644
(continues on next page)

4.3. Pipe Schedules 591


Fluids Documentation, Release 1.0.21

(continued from previous page)


22 54.0 1240.9932 1371.6000 65.3034
23 63.0 1447.8000 1600.2000 76.2000
24 65.0 1493.7740 1651.0000 78.6130

4.3.78 Schedule DR17F2619IPS

NPS, dimensionless Inner diameter, mm Outer diameter, mm Thickness, mm


0 2.0 53.2130 60.3250 3.5560
1 2.5 64.4398 73.0250 4.2926
2 3.0 78.4352 88.9000 5.2324
3 4.0 100.8380 114.3000 6.7310
4 5.0 124.6886 141.3002 8.3058
5 6.0 148.4630 168.2750 9.9060
6 8.0 193.3194 219.0750 12.8778
7 10.0 240.9444 273.0500 16.0528
8 12.0 285.7500 323.8500 19.0500
9 14.0 313.7408 355.6000 20.9296
10 16.0 358.5972 406.4000 23.9014
11 18.0 403.4028 457.2000 26.8986
12 20.0 448.2592 508.0000 29.8704
13 22.0 493.0648 558.8000 32.8676
14 24.0 537.8704 609.6000 35.8648
15 26.0 582.7268 660.4000 38.8366
16 28.0 627.5324 711.2000 41.8338
17 30.0 672.3380 762.0000 44.8310
18 32.0 717.1944 812.8000 47.8028
19 34.0 762.0000 863.6000 50.8000
20 36.0 806.8056 914.4000 53.7972
21 42.0 941.2732 1066.8000 62.7634
22 48.0 1075.7408 1219.2000 71.7296
23 54.0 1210.2592 1371.6000 80.6704

4.3.79 Schedule DR135F2619IPS

NPS, dimensionless Inner diameter, mm Outer diameter, mm Thickness, mm


0 0.50 18.1864 21.3360 1.5748
1 0.75 22.7076 26.6700 1.9812
2 1.00 28.4734 33.4010 2.4638
3 1.25 35.9156 42.1640 3.1242
4 1.50 41.0972 48.2600 3.5814
5 2.00 51.3842 60.3250 4.4704
6 2.50 62.2046 73.0250 5.4102
7 3.00 75.7428 88.9000 6.5786
8 4.00 97.3836 114.3000 8.4582
9 5.00 120.3706 141.3002 10.4648
10 6.00 143.3322 168.2750 12.4714
11 8.00 186.6138 219.0750 16.2306
12 10.00 232.6132 273.0500 20.2184
13 12.00 275.8948 323.8500 23.9776
14 14.00 302.9204 355.6000 26.3398
15 16.00 346.2020 406.4000 30.0990
(continues on next page)

592 Chapter 4. Data included in Fluids


Fluids Documentation, Release 1.0.21

(continued from previous page)


16 18.00 389.4836 457.2000 33.8582
17 20.00 432.7652 508.0000 37.6174
18 22.00 475.9960 558.8000 41.4020
19 24.00 519.2776 609.6000 45.1612
20 26.00 562.5592 660.4000 48.9204
21 28.00 605.8408 711.2000 52.6796
22 30.00 649.1224 762.0000 56.4388
23 32.00 692.4040 812.8000 60.1980
24 34.00 735.6348 863.6000 63.9826
25 36.00 778.9164 914.4000 67.7418
26 42.00 908.7612 1066.8000 79.0194

4.3.80 Schedule DR11F2619IPS

NPS, dimensionless Inner diameter, mm Outer diameter, mm Thickness, mm


0 0.50 17.4752 21.3360 1.9304
1 0.75 21.8440 26.6700 2.4130
2 1.00 27.3050 33.4010 3.0480
3 1.25 34.4932 42.1640 3.8354
4 1.50 39.4716 48.2600 4.3942
5 2.00 49.3522 60.3250 5.4864
6 2.50 59.7662 73.0250 6.6294
7 3.00 72.7456 88.9000 8.0772
8 4.00 93.5228 114.3000 10.3886
9 5.00 115.5954 141.3002 12.8524
10 6.00 137.6934 168.2750 15.2908
11 8.00 179.2478 219.0750 19.9136
12 10.00 223.4184 273.0500 24.8158
13 12.00 264.9728 323.8500 29.4386
14 14.00 290.9316 355.6000 32.3342
15 16.00 332.4860 406.4000 36.9570
16 18.00 374.0912 457.2000 41.5544
17 20.00 415.6456 508.0000 46.1772
18 22.00 457.2000 558.8000 50.8000
19 24.00 498.7544 609.6000 55.4228
20 26.00 540.3088 660.4000 60.0456
21 28.00 581.9140 711.2000 64.6430
22 30.00 623.4684 762.0000 69.2658
23 32.00 665.0228 812.8000 73.8886
24 34.00 706.5772 863.6000 78.5114
25 36.00 748.1316 914.4000 83.1342

4.3.81 Schedule DR9F2619IPS

NPS, dimensionless Inner diameter, mm Outer diameter, mm Thickness, mm


0 0.50 16.6116 21.3360 2.3622
1 0.75 20.7264 26.6700 2.9718
2 1.00 25.9842 33.4010 3.7084
3 1.25 32.8168 42.1640 4.6736
4 1.50 37.5412 48.2600 5.3594
5 2.00 46.9138 60.3250 6.7056
(continues on next page)

4.3. Pipe Schedules 593


Fluids Documentation, Release 1.0.21

(continued from previous page)


6 2.50 56.8198 73.0250 8.1026
7 3.00 69.1388 88.9000 9.8806
8 4.00 88.9000 114.3000 12.7000
9 5.00 109.9058 141.3002 15.6972
10 6.00 130.8862 168.2750 18.6944
11 8.00 170.4086 219.0750 24.3332
12 10.00 212.3948 273.0500 30.3276
13 12.00 251.8664 323.8500 35.9918
14 14.00 276.5552 355.6000 39.5224
15 16.00 316.0776 406.4000 45.1612
16 18.00 355.6000 457.2000 50.8000
17 20.00 395.1224 508.0000 56.4388
18 22.00 434.6448 558.8000 62.0776
19 24.00 474.1164 609.6000 67.7418
20 26.00 513.6388 660.4000 73.3806
21 28.00 553.1612 711.2000 79.0194
22 30.00 592.6836 762.0000 84.6582

4.3.82 Schedule DR73F2619IPS

NPS, dimensionless Inner diameter, mm Outer diameter, mm Thickness, mm


0 0.50 15.4940 21.3360 2.9210
1 0.75 19.3548 26.6700 3.6576
2 1.00 24.2570 33.4010 4.5720
3 1.25 30.6324 42.1640 5.7658
4 1.50 35.0520 48.2600 6.6040
5 2.00 43.8150 60.3250 8.2550
6 2.50 53.0098 73.0250 10.0076
7 3.00 64.5668 88.9000 12.1666
8 4.00 83.0072 114.3000 15.6464
9 5.00 102.5906 141.3002 19.3548
10 6.00 122.1486 168.2750 23.0632
11 8.00 159.0294 219.0750 30.0228
12 10.00 198.2216 273.0500 37.4142
13 12.00 235.1024 323.8500 44.3738
14 14.00 258.1656 355.6000 48.7172
15 16.00 295.0464 406.4000 55.6768
16 18.00 331.9272 457.2000 62.6364
17 20.00 368.8080 508.0000 69.5960
18 22.00 405.6888 558.8000 76.5556
19 24.00 442.5696 609.6000 83.5152

4.3.83 Schedule DR7F2619IPS

NPS, dimensionless Inner diameter, mm Outer diameter, mm Thickness, mm


0 0.50 15.2400 21.3360 3.0480
1 0.75 19.0500 26.6700 3.8100
2 1.00 23.8506 33.4010 4.7752
3 1.25 30.1244 42.1640 6.0198
4 1.50 34.4932 48.2600 6.8834
5 2.00 43.1038 60.3250 8.6106
(continues on next page)

594 Chapter 4. Data included in Fluids


Fluids Documentation, Release 1.0.21

(continued from previous page)


6 2.50 52.1462 73.0250 10.4394
7 3.00 63.5000 88.9000 12.7000
8 4.00 81.6356 114.3000 16.3322
9 5.00 100.9142 141.3002 20.1930
10 6.00 120.2182 168.2750 24.0284
11 8.00 156.4894 219.0750 31.2928
12 10.00 195.0212 273.0500 39.0144
13 12.00 231.3432 323.8500 46.2534
14 14.00 254.0000 355.6000 50.8000
15 16.00 290.2712 406.4000 58.0644
16 18.00 326.5932 457.2000 65.3034
17 20.00 362.8644 508.0000 72.5678
18 22.00 399.1356 558.8000 79.8322
19 24.00 435.4068 609.6000 87.0966

4.3. Pipe Schedules 595


Fluids Documentation, Release 1.0.21

596 Chapter 4. Data included in Fluids


CHAPTER

FIVE

DEVELOPER’S GUIDE AND ROADMAP

The fluids project has grown to be:


• Efficient
– Functions do only the work required.
– Caching various values, precomputing others.
– Using various macros and automated expressions to run code with Numba at its optimal speed.
– Not using Numpy/SciPy most of the time, allowing PyPy and Numba to speed code up.
• Capable of vectorized computation
– Wrapped with Numba’s ufunc machinery.
– Wrapped with numpy’s np.vectorize.
– Numba’s nogil mechanism is set and used on all methods.
• Comprehensive
– Most correlations taught at the undergrad level are included.
– Most ancillary calculations such as atmospheric properties and tank geometry are included.
• Capable of handling units
– Pint interface.
– All docstrings/code in base SI units.
There is no official road map, no full time developers, and no commercial support for this library - this is a hobby project
developed primarily by Caleb Bell. Contributors are welcome! Fluid dynamics is really big field and one author can’t
do everything.

5.1 Scope and Future Features

The following is a list of things that have crossed the author’s mind as that would be cool in fluids and might make it
there at some point. The author has no immediate plans to do any of this. Work by the author happens when inspiration
- and free time - happens. Please feel free to work on any of these items:
• More pipe schedules. The author has been asked for EN 10255 in https://github.com/CalebBell/fluids/issues/16
and ASTM A269/A270 in an email.
• More fitting types.
• More tee/wye/junction correlations.

597
Fluids Documentation, Release 1.0.21

• More models for compressible flow, such as: https://www.mathworks.com/help/aerotbx/gas-dynamics-1.html


• Multiphase fitting pressure drop. Literature data is sparse.
• Multiphase flow meter pressure drop. One correlation has been added but there are more available.
• More multiphase flow maps.
• Pump viscosity correction from Hydraulic Institute.
• Tool to download historical weather data to calculate average historical temperatures and weather to use for
design. This is partly complete in a non-exposed module design_climate.py.
• Models for mixing efficiency.
• Additional fluid-particle interaction correlations.

5.2 Contributing

fluids has a lot of infrastructure that makes it attractive to add code to the project. Adding new functionality is possible
without compromising load speed, RAM usage or maintainability. If you have a fluids engineering correlation, please
feel free to open a PR and we can make any changes needed. There is no template - just do your best.
In an ideal world, new contributions would come with unit tests, docstrings, an addition to the tutorial if relevant.

5.3 Running Tests

From the root directory of the project you downloaded with git clone https://github.com/CalebBell/fluids.git, run the
following command:
python3 -m pytest .
This will run all of the tests including the doctests.
The test suite can take some time to run; tests are marked with various markers to allow a fast subset of tests to run.
python3 -m pytest -m “not slow” .
This should only take a few seconds, and show red output if a test is broken. To keep the main test suite fast, pytest
allows a flag which shows how long each test takes.
python3 -m pytest -m “not slow” –durations=100
If a test you added appears in this list, consider splitting it into a fast portion and a slow portion and decorating the slow
portion with “@pytest.mark.slow”.

5.4 Docstrings

The docstrings follow Pep8, most of the numpydoc standard, More information about numpydoc can be found here
In addition to being documentation, the docstrings in fluids serve the following purposes:
• Contain LaTeX math formulas for implemented formulas. This makes it easy for the reader and authors to follow
code. This is especially important when the code can be optimized by hand significantly, and end up not looking
like the math formulas.
• Contain doctests for every public method. These examples often make debugging really easy since they can just
be copy-pasted into Jupyter or an IDE/debugger.

598 Chapter 5. Developer’s Guide and Roadmap


Fluids Documentation, Release 1.0.21

• Contain type information for each variable, which is automatically parsed by the unit handling framework around
pint.
• Contain the units of each argument, which is used by the unit handling framework around pint.
• Contain docstrings for every argument - these are checked by the unit tests programmatically to avoid forgetting
to add a description, which the author did often before the checker was added.

5.5 Doctest

As anyone who has used doctest before knows, floating-point calculations have trivially different results across plat-
forms. An example cause of this is that most compilers have different sin/cos implementations which are not identical.
However, docstrings are checked bit-for-bit, so consistent output is important. Python is better than most languages at
maintaining the same results between versions but it is still an issue.
Thanks to a fairly new pytest feature, numbers in doctests can be checked against the number of digits given, not against
the real result. It is suggested to put numbers in doctests with around 13 digits, instead of the full repr() string for a
number. It is convenient to round the number instead of just removing decimals.

5.6 Type Hints

The python ecosystem is gradually adding support for type information, which may allow static analyzers to help find
bugs in code even before it is ran. The author has not found these helpful in Python yet - the tools are too slow, missing
features, and most libraries do not contain type information. However, type hints might still be useful for your program
that uses fluids!
For that reason fluids includes a set of type hints as stub files (.pyi extension). These are not generated by hand - they
use the cool MonkeyType library. An included script make_test_stubs interfaces with this library, which runs the test
suite and at the end generates the type hints including the types of every argument to every function seen in the test
suite. This is another reason comprehensive test suite coverage is required.
Monkeytype on the fluids test suite takes ~15 minutes to run, and generates a ~1 GB database file which is deleted at
the end of the run. Some manipulation of the result by hand may be required in the future, or MonkeyType may be
replaced by making the type hints by hand. It is planned to incorporate the type stubs into the main file at some point
in the future when the tooling is better, and Python 2 support has been dropped completely.

5.7 Supported Python Versions

There is no plan to drop Python 2.7 support at present, but you are advised to use Python 3.5 or later. Both NumPy and
SciPy have dropped support for Python 2.7 and eventually a backwards-incompatible change may be needed.
Fluids targets Python 2.7 and up as well as PyPy2 and PyPy3. Additionally, fluids has been tested by the author to load
in IronPython, Jython, and Micropython.
Unfortunately there is no CI infrastructure for these other Python implementations. For IronPython, Jython, and Mi-
cropython there is no NumPy/SciPy which means there is no hope of passing the whole test suite on them either; indeed
pytest won’t load on any of them. If you have a need for a specific feature to work in an implementation, don’t hesitate
to reach out to the author to discuss it.
It is intended for IronPython to support everything except functionality which has a hard dependency on NumPy or
SciPy. IronPython is currently Python 2 only; with the Python 3 variant being most of the way there. This may lead to
integration with other programs in the future as IronPython is often used as a scripting language.

5.5. Doctest 599


Fluids Documentation, Release 1.0.21

Micropython is designed to run on limited RAM, and fluids is too large for most microprocessors. You will likely have
to copy/paste the specific parts of fluids you want to use for this application.
Jython is not very popular, but please reach out of you are using fluids with it.

5.8 Packaging

The most up to date fluids can be obtained on GitHub, and new releases are pushed to PyPi whenever a new release is
made. Fluids is available on Conda thanks to Diego Volpatto and on Debian and thus Ubuntu thanks to Kurt Kremitzki.
Conda updates more or less automatically but takes hours to build.

5.9 Code Formatting

Pep8 is loosely followed. Do your best to follow it if possible, otherwise don’t worry about it. Please don’t submit a
PR for just style changes. Some arguments like Method or classes like TANK are unfortunately not pep8 for historical
reasons.

5.10 Documentation

Sphinx is used with readthedocs. Readthedocs is configured to build whatever is on the release branch. From the root
of the fluids project, the documentation can be built with the following command, which will output html files into a
“_build” folder:
sphinx-build -b html docs _build

5.11 Sample Notebooks

The nbval pytest plugin can be used to check the results of running the notebooks against the stored notebooks.
On UNIX/Mac OS/WSL, the notebook results can be regenerated with the following shell command, from the directory
with the notebooks:

for i in *.ipynb ; do python3 -m nbconvert --to notebook --inplace --execute "$i" ; done

5.12 Continuous Integration

Github Actions, Travis and Appveyor are presently used. They test only code in the release branch. Some tests, like
those that download data from the internet, are not ran by design on their platforms. The same goes for testing numba
online - getting an up to date version of numba is challenging.

600 Chapter 5. Developer’s Guide and Roadmap


Fluids Documentation, Release 1.0.21

5.13 Load Speed

On CPython, fluids will load Numpy on load if it is available and SciPy when it is needed. Numpy loads in ~150 ms.
Fluids alone loads in ~10 ms. It is intended for this to increase only slowly.

5.14 RAM Usage

Loading fluids alone takes ~4 MB of RAM. About 2 MB of this is actually docstrings. About 200 KB of pipe schedules,
100 KB of pump information, and 200 KB of Sieve data is also included. Using fluids should not increase RAM except
by the size of objects you initiate; the only things cached are very small. The -OO flag can be used in Python to cut
RAM usage significantly, which will not load any docstrings.
Adding new data and methods is well worth the price of increasing RAM, but it is intended to keep RAM consumption
small via lazy-loading any large data sets. Examples of this can be found in atmosphere.py - spa.py and nrlmsie00.py
are lazy-loaded.
It is intended for RAM consumption of the library to increase only slowly.

5.15 Notes on Pint Integration Implementation

Units in square brackets in the docstrings are parsed for all function inputs and outputs. They are parsed by Pint directly.
In some cases, a function has a variable output unit, as in the case of solvers which can solve for different vari-
ables. In that case, the variable unit shouldn’t put anything in square brackets. Instead, in units.py, the variable vari-
able_output_unit_funcs needs to have an entry for the new function. The return unit will be based on which variables
are not provided as inputs to the function. True represents a present variable, and False represents a variable left as
None. The number of variables the dispatch happens on can be less than the number of function arguments, and should
be specified after the units signature.

5.16 Notes on PyPy

PyPy is really awesome!


It does have some drawbacks today:
• The C-API which is used by NumPy, SciPy get 2-3 times slower in PyPy. This is originally why fluids started
implementing its own numerical methods sometimes, although now it is for custom features and increased speed.
There is a project to solve this issue: https://github.com/pyhandle/hpy
• If running code only a few times, PyPy won’t be able to accelerate it as it is a Just In Time Compiler.
• Sometimes something gets speed up by PyPy some of the time, but not all of the time.
• Uses more memory, typically 1.5x.
• Not as good as Numba at generating vectorized, SIMD instructions for the CPU. PyPy also isn’t as good at
inlining small functions.
The main pros of PyPy are:
• Really, really fast. Some functions literally save 98% of their time by running in PyPy, although 85% is more
typical.
• Accelerates ALL of your code, not a little like numba.

5.13. Load Speed 601


Fluids Documentation, Release 1.0.21

• For scalar functions PyPy is typically quite a bit faster than numba.
• Doesn’t need special handling, does everything CPython can do.
• Doesn’t need a special coding style!
A few compromises in the library to make PyPy more performant were made:
• Use the sqrt operator to compute powers as much as possible. sqrt and a few multiplies is much cheaper than a
power operator. This is not really noticeable on CPython, but you can tell in PyPy. CPUs have special hardware
to make this computation very cheap.

5.17 Notes on Numba

The main pros of Numba are:


• Works with CPython.
• Pretty good at generating SIMD instructions.
• Fast. Gets all the benefits that LLVM gets. This means if you include a line of code that does nothing in your
function, it probably won’t run once compiled with numba.
• When a complete set of code is wrapped by Numba, it can be multithreaded easily.
The main cons of Numba are:
• It doesn’t come close to supporting all of Python. This really hurts on things like dictionary lookups or functions
that return dictionaries.
• It is not available on many platforms, used to require Anaconda.
• Some code can be really, really slow to compile today. Compiling fluids with numba takes ~3 minutes today,
after some optimizations. Caching of functions that take functions as arguments is not yet supported, nor are
jitclasses.
• Can be a pain to work with.
Quite a few compromises in the library were made to add Numba compatibility and in cases to make Numba even more
performant:
• A series of numba pragmas were invented and are interpreted by a loader that recompiles the transformed source
code of fluids.
• Functions that accept functions as arguments or use scipy.special functions are not compatible with Numba’s
caching implementation at this time. To avoid having complaints about that, they are added to a list in numba.py.
• Numba does not support raising exceptions with dynamically created messages. Where possible, this means
using a constant message.
• Sometimes the only way to do something is by changing the code directly. Append “# numba: delete” at the end
of a line in a function to delete the line. Add a new commented out line, and append “# numba: uncomment”
to it. Then put the name of that function in the variable to_change in numba.py, and the changes will be made
when using the Numba interface.
• 1D arrays should be initialized like [0.0]*4, [my_thing]*my_count; and they put the function in the same
to_change variable. This will transform them into the right type of array for Numba.
• Numba uses efficient cbrts while CPython and PyPy do not; any case of x**(1/3) will turn into a cbrt. x**(2/3)
will not, but can be done by hand.
It is hoped many of these trade offs can be removed/resolved by future features added to Numba.

602 Chapter 5. Developer’s Guide and Roadmap


Fluids Documentation, Release 1.0.21

5.18 Things to Keep In Mind While Coding

1. Python is often ran with the -O or -OO flag. This reduces its memory use and increases performance a little.
One of those optimizations is that any assert statements in python code are skipped. This means they should not
be used to control a program’s flow. This is normally the equivalent of using a Release build vs. a Debug build
in C++.
2. Numpy arrays and functions should be used with care. They will make that portion of the code not run on some
implementations, and will add a dependency on NumPy for that function. If it is a vectorization issue, consider
letting Numba or PyPy accelerate it for you. If it about using some fancy functionality like a fourier transform,
then NumPy is the right choice!

5.18. Things to Keep In Mind While Coding 603


Fluids Documentation, Release 1.0.21

604 Chapter 5. Developer’s Guide and Roadmap


CHAPTER

SIX

INSTALLATION

Get the latest version of fluids from https://pypi.python.org/pypi/fluids/


If you have an installation of Python with pip, simple install it with:
$ pip install fluids
Alternatively, if you are using conda as your package management, you can simply install fluids in your environment
from conda-forge channel with:
$ conda install -c conda-forge fluids
To get the git version, run:
$ git clone git://github.com/CalebBell/fluids.git

605
Fluids Documentation, Release 1.0.21

606 Chapter 6. Installation


CHAPTER

SEVEN

LATEST SOURCE CODE

The latest development version of fluids’s sources can be obtained at


https://github.com/CalebBell/fluids

607
Fluids Documentation, Release 1.0.21

608 Chapter 7. Latest source code


CHAPTER

EIGHT

BUG REPORTS

To report bugs, please use the fluids’s Bug Tracker at:


https://github.com/CalebBell/fluids/issues
If you have further questions about the usage of the library, feel free to contact the author at
Caleb.Andrew.Bell@gmail.com.

609
Fluids Documentation, Release 1.0.21

610 Chapter 8. Bug reports


CHAPTER

NINE

LICENSE INFORMATION

Fluids is MIT licensed. See LICENSE.txt for full information on the terms & conditions for usage of this software,
and a DISCLAIMER OF ALL WARRANTIES.
Although not required by the fluids license, if it is convenient for you, please cite fluids if used in your work. Please
also consider contributing any changes you make back, such that they may be incorporated into the main library and
all of us will benefit from them.

611
Fluids Documentation, Release 1.0.21

612 Chapter 9. License information


CHAPTER

TEN

COMPLIANCE INFORMATION

The author testifies that this software is not subject to the US EAR. The country of origin of this software is Canada.
The author also confirms confirm that this software is not developed by, contain components developed by, or receive
substantial influence from entities prohibited by Section 889 of the 2019 NDAA.

613
Fluids Documentation, Release 1.0.21

614 Chapter 10. Compliance information


CHAPTER

ELEVEN

CITATION

To cite fluids in publications use:

Caleb Bell (2016-2021). fluids: Fluid dynamics component of Chemical Engineering Design␣
˓→Library (ChEDL)

https://github.com/CalebBell/fluids.

615
Fluids Documentation, Release 1.0.21

616 Chapter 11. Citation


CHAPTER

TWELVE

INDICES AND TABLES

• genindex
• modindex
• search

617
Fluids Documentation, Release 1.0.21

618 Chapter 12. Indices and tables


BIBLIOGRAPHY

[1] NOAA, NASA, and USAF. “U.S. Standard Atmosphere, 1976” October 15, 1976. http://ntrs.nasa.gov/search.
jsp?R=19770009539.
[2] “ISO 2533:1975 - Standard Atmosphere.” ISO. http://www.iso.org/iso/catalogue_detail.htm?csnumber=7472.
[3] Yager, Robert J. “Calculating Atmospheric Conditions (Temperature, Pressure, Air Density, and Speed of Sound)
Using C++,” June 2013. http://www.dtic.mil/cgi-bin/GetTRDoc?AD=ADA588839
[1] Picone, J. M., A. E. Hedin, D. P. Drob, and A. C. Aikin. “NRLMSISE-00 Empirical Model of the Atmosphere:
Statistical Comparisons and Scientific Issues.” Journal of Geophysical Research: Space Physics 107, no. A12
(December 1, 2002): 1468. doi:10.1029/2002JA009430.
[2] Tapping, K. F. “The 10.7Cm Solar Radio Flux (F10.7).” Space Weather 11, no. 7 (July 1, 2013): 394-406.
doi:10.1002/swe.20064.
[3] Natalia Papitashvili. “NRLMSISE-00 Atmosphere Model.” Accessed November 27, 2016. http://ccmc.gsfc.nasa.
gov/modelweb/models/nrlmsise00.php.
[1] Kasten, Fritz, and Andrew T. Young. “Revised Optical Air Mass Tables and Approximation Formula.” Applied
Optics 28, no. 22 (November 15, 1989): 4735-38. https://doi.org/10.1364/AO.28.004735.
[1] Reda, Ibrahim, and Afshin Andreas. “Solar Position Algorithm for Solar Radiation Applications.” Solar Energy
76, no. 5 (January 1, 2004): 577-89. https://doi.org/10.1016/j.solener.2003.12.003.
[2] “Navigation - What Azimuth Description Systems Are in Use? - Astronomy Stack Exchange.” https://astronomy.
stackexchange.com/questions/237/what-azimuth-description-systems-are-in-use?rq=1.
[1] Will Holmgren, Calama-Consulting, Tony Lorenzo, Uwe Krien, bmu, DaCoEx, mayudong, et al. Pvlib/Pvlib-
Python: 0.5.1. Zenodo, 2017. https://doi.org/10.5281/zenodo.1016425.
[1] Reda, Ibrahim, and Afshin Andreas. “Solar Position Algorithm for Solar Radiation Applications.” Solar Energy
76, no. 5 (January 1, 2004): 577-89. https://doi.org/10.1016/j.solener.2003.12.003.
[1] Reda, Ibrahim, and Afshin Andreas. “Solar Position Algorithm for Solar Radiation Applications.” Solar Energy
76, no. 5 (January 1, 2004): 577-89. https://doi.org/10.1016/j.solener.2003.12.003.
[1] Hedin, A. E., N. W. Spencer, and T. L. Killeen. “Empirical Global Model of Upper Thermosphere Winds Based
on Atmosphere and Dynamics Explorer Satellite Data.” Journal of Geophysical Research: Space Physics 93, no.
A9 (September 1, 1988): 9959-78. doi:10.1029/JA093iA09p09959.
[2] Hedin, A. E., M. A. Biondi, R. G. Burnside, G. Hernandez, R. M. Johnson, T. L. Killeen, C. Mazaudier, et al.
“Revised Global Model of Thermosphere Winds Using Satellite and Ground-Based Observations.” Journal of
Geophysical Research: Space Physics 96, no. A5 (May 1, 1991): 7657-88. doi:10.1029/91JA00251.
[3] Hedin, A. E., E. L. Fleming, A. H. Manson, F. J. Schmidlin, S. K. Avery, R. R. Clark, S. J. Franke, et al.
“Empirical Wind Model for the Upper, Middle and Lower Atmosphere.” Journal of Atmospheric and Terrestrial
Physics 58, no. 13 (September 1996): 1421-47. doi:10.1016/0021-9169(95)00122-0.

619
Fluids Documentation, Release 1.0.21

[1] Drob, Douglas P., John T. Emmert, John W. Meriwether, Jonathan J. Makela, Eelco Doornbos, Mark Conde,
Gonzalo Hernandez, et al. “An Update to the Horizontal Wind Model (HWM): The Quiet Time Thermosphere.”
Earth and Space Science 2, no. 7 (July 1, 2015): 2014EA000089. doi:10.1002/2014EA000089.
[1] Couper, James R., W. Roy Penney, and James R. Fair. Chemical Process Equipment: Selection and Design. 2nd
ed. Amsterdam; Boston: Gulf Professional Publishing, 2009.
[1] Couper, James R., W. Roy Penney, and James R. Fair. Chemical Process Equipment: Selection and Design. 2nd
ed. Amsterdam; Boston: Gulf Professional Publishing, 2009.
[1] Couper, James R., W. Roy Penney, and James R. Fair. Chemical Process Equipment: Selection and Design. 2nd
ed. Amsterdam; Boston: Gulf Professional Publishing, 2009.
[2] GPSA. GPSA Engineering Data Book. 13th edition. Gas Processors Suppliers Association, Tulsa, OK, 2012.
[1] Couper, James R., W. Roy Penney, and James R. Fair. Chemical Process Equipment: Selection and Design. 2nd
ed. Amsterdam; Boston: Gulf Professional Publishing, 2009.
[1] Couper, James R., W. Roy Penney, and James R. Fair. Chemical Process Equipment: Selection and Design. 2nd
ed. Amsterdam; Boston: Gulf Professional Publishing, 2009.
[1] Crane Co. Flow of Fluids Through Valves, Fittings, and Pipe. Crane, 2009.
[2] Kim, J. and Singh, N. “A Novel Equation for Isothermal Pipe Flow.”. Chemical Engineering, June 2012, http:
//www.chemengonline.com/a-novel-equation-for-isothermal-pipe-flow/?printmode=1
[3] Wilkes, James O. Fluid Mechanics for Chemical Engineers with Microfluidics and CFD. 2 edition. Upper Saddle
River, NJ: Prentice Hall, 2005.
[4] Rennels, Donald C., and Hobart M. Hudson. Pipe Flow: A Practical and Comprehensive Guide. 1st edition.
Hoboken, N.J: Wiley, 2012.
[1] Menon, E. Shashi. Gas Pipeline Hydraulics. 1st edition. Boca Raton, FL: CRC Press, 2005.
[2] Crane Co. Flow of Fluids Through Valves, Fittings, and Pipe. Crane, 2009.
[3] GPSA. GPSA Engineering Data Book. 13th edition. Gas Processors Suppliers Association, Tulsa, OK, 2012.
[4] Campbell, John M. Gas Conditioning and Processing, Vol. 2: The Equipment Modules. 7th edition. Campbell
Petroleum Series, 1992.
[5] Coelho, Paulo M., and Carlos Pinho. “Considerations about Equations for Steady State Flow in Natural Gas
Pipelines.” Journal of the Brazilian Society of Mechanical Sciences and Engineering 29, no. 3 (September 2007):
262-73. doi:10.1590/S1678-58782007000300005.
[6] Ikoku, Chi U. Natural Gas Production Engineering. Malabar, Fla: Krieger Pub Co, 1991.
[1] Menon, E. Shashi. Gas Pipeline Hydraulics. 1st edition. Boca Raton, FL: CRC Press, 2005.
[2] Crane Co. Flow of Fluids Through Valves, Fittings, and Pipe. Crane, 2009.
[3] GPSA. GPSA Engineering Data Book. 13th edition. Gas Processors Suppliers Association, Tulsa, OK, 2012.
[4] Campbell, John M. Gas Conditioning and Processing, Vol. 2: The Equipment Modules. 7th edition. Campbell
Petroleum Series, 1992.
[5] Coelho, Paulo M., and Carlos Pinho. “Considerations about Equations for Steady State Flow in Natural Gas
Pipelines.” Journal of the Brazilian Society of Mechanical Sciences and Engineering 29, no. 3 (September 2007):
262-73. doi:10.1590/S1678-58782007000300005.
[6] Ikoku, Chi U. Natural Gas Production Engineering. Malabar, Fla: Krieger Pub Co, 1991.
[1] Menon, E. Shashi. Gas Pipeline Hydraulics. 1st edition. Boca Raton, FL: CRC Press, 2005.
[2] Crane Co. Flow of Fluids Through Valves, Fittings, and Pipe. Crane, 2009.

620 Bibliography
Fluids Documentation, Release 1.0.21

[3] GPSA. GPSA Engineering Data Book. 13th edition. Gas Processors Suppliers Association, Tulsa, OK, 2012.
[4] Campbell, John M. Gas Conditioning and Processing, Vol. 2: The Equipment Modules. 7th edition. Campbell
Petroleum Series, 1992.
[5] Coelho, Paulo M., and Carlos Pinho. “Considerations about Equations for Steady State Flow in Natural Gas
Pipelines.” Journal of the Brazilian Society of Mechanical Sciences and Engineering 29, no. 3 (September 2007):
262-73. doi:10.1590/S1678-58782007000300005.
[6] Ikoku, Chi U. Natural Gas Production Engineering. Malabar, Fla: Krieger Pub Co, 1991.
[1] Coelho, Paulo M., and Carlos Pinho. “Considerations about Equations for Steady State Flow in Natural Gas
Pipelines.” Journal of the Brazilian Society of Mechanical Sciences and Engineering 29, no. 3 (September 2007):
262-73. doi:10.1590/S1678-58782007000300005.
[2] Menon, E. Shashi. Gas Pipeline Hydraulics. 1st edition. Boca Raton, FL: CRC Press, 2005.
[1] Coelho, Paulo M., and Carlos Pinho. “Considerations about Equations for Steady State Flow in Natural Gas
Pipelines.” Journal of the Brazilian Society of Mechanical Sciences and Engineering 29, no. 3 (September 2007):
262-73. doi:10.1590/S1678-58782007000300005.
[2] Menon, E. Shashi. Gas Pipeline Hydraulics. 1st edition. Boca Raton, FL: CRC Press, 2005.
[3] GPSA. GPSA Engineering Data Book. 13th edition. Gas Processors Suppliers Association, Tulsa, OK, 2012.
[4] PetroWiki. “Pressure Drop Evaluation along Pipelines” Accessed September 11, 2016. http://petrowiki.org/
Pressure_drop_evaluation_along_pipelines#Spitzglass_equation_2.
[1] GPSA. GPSA Engineering Data Book. 13th edition. Gas Processors Suppliers Association, Tulsa, OK, 2012.
[2] F. N. Oliphant, “Production of Natural Gas,” Report. USGS, 1902.
[1] Menon, E. Shashi. Gas Pipeline Hydraulics. 1st edition. Boca Raton, FL: CRC Press, 2005.
[2] Coelho, Paulo M., and Carlos Pinho. “Considerations about Equations for Steady State Flow in Natural Gas
Pipelines.” Journal of the Brazilian Society of Mechanical Sciences and Engineering 29, no. 3 (September 2007):
262-73. doi:10.1590/S1678-58782007000300005.
[1] Mohitpour, Mo, Golshan, and Allan Murray. Pipeline Design and Construction: A Practical Approach. 3rd
edition. New York: Amer Soc Mechanical Engineers, 2006.
[2] Menon, E. Shashi. Gas Pipeline Hydraulics. 1st edition. Boca Raton, FL: CRC Press, 2005.
[3] Coelho, Paulo M., and Carlos Pinho. “Considerations about Equations for Steady State Flow in Natural Gas
Pipelines.” Journal of the Brazilian Society of Mechanical Sciences and Engineering 29, no. 3 (September 2007):
262-73. doi:10.1590/S1678-58782007000300005.
[1] Mohitpour, Mo, Golshan, and Allan Murray. Pipeline Design and Construction: A Practical Approach. 3rd
edition. New York: Amer Soc Mechanical Engineers, 2006.
[2] Menon, E. Shashi. Gas Pipeline Hydraulics. 1st edition. Boca Raton, FL: CRC Press, 2005.
[3] Coelho, Paulo M., and Carlos Pinho. “Considerations about Equations for Steady State Flow in Natural Gas
Pipelines.” Journal of the Brazilian Society of Mechanical Sciences and Engineering 29, no. 3 (September 2007):
262-73. doi:10.1590/S1678-58782007000300005.
[1] Cengel, Yunus, and John Cimbala. Fluid Mechanics: Fundamentals and Applications. Boston: McGraw Hill
Higher Education, 2006.
[1] Cengel, Yunus, and John Cimbala. Fluid Mechanics: Fundamentals and Applications. Boston: McGraw Hill
Higher Education, 2006.
[1] API. 2014. API 520 - Part 1 Sizing, Selection, and Installation of Pressure-relieving Devices, Part I - Sizing and
Selection, 9E.

Bibliography 621
Fluids Documentation, Release 1.0.21

[1] Wilkes, James O. Fluid Mechanics for Chemical Engineers with Microfluidics and CFD. 2 edition. Upper Saddle
River, NJ: Prentice Hall, 2005.
[1] Cengel, Yunus, and John Cimbala. Fluid Mechanics: Fundamentals and Applications. Boston: McGraw Hill
Higher Education, 2006.
[1] Cengel, Yunus, and John Cimbala. Fluid Mechanics: Fundamentals and Applications. Boston: McGraw Hill
Higher Education, 2006.
[1] Cengel, Yunus, and John Cimbala. Fluid Mechanics: Fundamentals and Applications. Boston: McGraw Hill
Higher Education, 2006.
[1] Cengel, Yunus, and John Cimbala. Fluid Mechanics: Fundamentals and Applications. Boston: McGraw Hill
Higher Education, 2006.
[1] IEC 60534-2-1 / ISA-75.01.01-2007
[1] IEC 60534-2-1 / ISA-75.01.01-2007
[1] IEC 60534-2-1 / ISA-75.01.01-2007
[1] IEC 60534-2-1 / ISA-75.01.01-2007
[1] IEC 60534-2-1 / ISA-75.01.01-2007
[1] IEC 60534-2-1 / ISA-75.01.01-2007
[1] IEC 60534-2-1 / ISA-75.01.01-2007
[1] IEC 60534-2-1 / ISA-75.01.01-2007
[1] ISA. “RP75.23 Considerations for Evaluating Control Valve Cavitation.” 1995.
[1] IEC 60534-8-4: Industrial-Process Control Valves - Part 8-4: Noise Considerations - Prediction of Noise Gen-
erated by Hydrodynamic Flow. (2015)
[1] IEC 60534-8-3: Industrial-Process Control Valves - Part 8-3: Noise Considerations - Control Valve Aerodynamic
Noise Prediction Method.”
[1] Green, Don, and Robert Perry. Perry’s Chemical Engineers’ Handbook, Eighth Edition. McGraw-Hill Profes-
sional, 2007.
[2] Cengel, Yunus, and John Cimbala. Fluid Mechanics: Fundamentals and Applications. Boston: McGraw Hill
Higher Education, 2006.
[1] Awad, M. M. “The Science and the History of the Two Bejan Numbers.” International Journal of Heat and Mass
Transfer 94 (March 2016): 101-3. doi:10.1016/j.ijheatmasstransfer.2015.11.073.
[2] Bejan, Adrian. Convection Heat Transfer. 4E. Hoboken, New Jersey: Wiley, 2013.
[1] Awad, M. M. “The Science and the History of the Two Bejan Numbers.” International Journal of Heat and Mass
Transfer 94 (March 2016): 101-3. doi:10.1016/j.ijheatmasstransfer.2015.11.073.
[2] Bejan, Adrian. Convection Heat Transfer. 4E. Hoboken, New Jersey: Wiley, 2013.
[1] Green, Don, and Robert Perry. Perry’s Chemical Engineers’ Handbook, Eighth Edition. McGraw-Hill Profes-
sional, 2007.
[2] Cengel, Yunus, and John Cimbala. Fluid Mechanics: Fundamentals and Applications. Boston: McGraw Hill
Higher Education, 2006.
[1] Winterton, Richard H.S. BOILING NUMBER. Thermopedia. Hemisphere, 2011.
10.1615/AtoZ.b.boiling_number
[2] Collier, John G., and John R. Thome. Convective Boiling and Condensation. 3rd edition. Clarendon Press, 1996.

622 Bibliography
Fluids Documentation, Release 1.0.21

[3] Stephan, Karl. Heat Transfer in Condensation and Boiling. Translated by C. V. Green.. 1992 edition. Berlin; New
York: Springer, 2013.
[4] W. F. Davidson, P. H. Hardie, C. G. R. Humphreys, A. A. Markson, A. R. Mumford and T. Ravese “Studies
of heat transmission through boiler tubing at pressures from 500 to 3300 pounds” Trans. ASME, Vol. 65, 9,
February 1943, pp. 553-591.
[1] Green, Don, and Robert Perry. Perry’s Chemical Engineers’ Handbook, Eighth Edition. McGraw-Hill Profes-
sional, 2007.
[1] Green, Don, and Robert Perry. Perry’s Chemical Engineers’ Handbook, Eighth Edition. McGraw-Hill Profes-
sional, 2007.
[2] Kundu, Pijush K., Ira M. Cohen, and David R. Dowling. Fluid Mechanics. Academic Press, 2012.
[1] Green, Don, and Robert Perry. Perry’s Chemical Engineers’ Handbook, Eighth Edition. McGraw-Hill Profes-
sional, 2007.
[2] Cengel, Yunus, and John Cimbala. Fluid Mechanics: Fundamentals and Applications. Boston: McGraw Hill
Higher Education, 2006.
[1] Cornwell, Keith, and Peter A. Kew. “Boiling in Small Parallel Channels.” In Energy Efficiency in Process Tech-
nology, edited by Dr P. A. Pilavachi, 624-638. Springer Netherlands, 1993. doi:10.1007/978-94-011-1454-7_56.
[2] Kandlikar, Satish G. Heat Transfer and Fluid Flow in Minichannels and Microchannels. Elsevier, 2006.
[3] Tran, T. N, M. -C Chyu, M. W Wambsganss, and D. M France. Two-Phase Pressure Drop of Refrigerants during
Flow Boiling in Small Channels: An Experimental Investigation and Correlation Development.” International
Journal of Multiphase Flow 26, no. 11 (November 1, 2000): 1739-54. doi:10.1016/S0301-9322(99)00119-6.
[1] Catchpole, John P., and George. Fulford. “DIMENSIONLESS GROUPS.” Industrial & Engineering Chemistry
58, no. 3 (March 1, 1966): 46-60. doi:10.1021/ie50675a012.
[1] Green, Don, and Robert Perry. Perry’s Chemical Engineers’ Handbook, Eighth Edition. McGraw-Hill Profes-
sional, 2007.
[2] Cengel, Yunus, and John Cimbala. Fluid Mechanics: Fundamentals and Applications. Boston: McGraw Hill
Higher Education, 2006.
[1] Goldstein, Richard J. ECKERT NUMBER. Thermopedia. Hemisphere, 2011. 10.1615/AtoZ.e.eckert_number
[1] Green, Don, and Robert Perry. Perry’s Chemical Engineers’ Handbook, Eighth Edition. McGraw-Hill Profes-
sional, 2007.
[2] Cengel, Yunus, and John Cimbala. Fluid Mechanics: Fundamentals and Applications. Boston: McGraw Hill
Higher Education, 2006.
[1] Green, Don, and Robert Perry. Perry’s Chemical Engineers’ Handbook, Eighth Edition. McGraw-Hill Profes-
sional, 2007.
[2] Cengel, Yunus, and John Cimbala. Fluid Mechanics: Fundamentals and Applications. Boston: McGraw Hill
Higher Education, 2006.
[1] Green, Don, and Robert Perry. Perry’s Chemical Engineers’ Handbook, Eighth Edition. McGraw-Hill Profes-
sional, 2007.
[1] Green, Don, and Robert Perry. Perry’s Chemical Engineers’ Handbook, Eighth Edition. McGraw-Hill Profes-
sional, 2007.
[2] Cengel, Yunus, and John Cimbala. Fluid Mechanics: Fundamentals and Applications. Boston: McGraw Hill
Higher Education, 2006.

Bibliography 623
Fluids Documentation, Release 1.0.21

[1] Hall, A, G Stobie, and R Steven. “Further Evaluation of the Performance of Horizontally Installed Orifice Plate
and Cone Differential Pressure Meters with Wet Gas Flows.” In International SouthEast Asia Hydrocarbon Flow
Measurement Workshop, KualaLumpur, Malaysia, 2008.
[1] Bergman, Theodore L., Adrienne S. Lavine, Frank P. Incropera, and David P. DeWitt. Introduction to Heat
Transfer. 6E. Hoboken, NJ: Wiley, 2011.
[1] Green, Don, and Robert Perry. Perry’s Chemical Engineers’ Handbook, Eighth Edition. McGraw-Hill Profes-
sional, 2007.
[2] Cengel, Yunus, and John Cimbala. Fluid Mechanics: Fundamentals and Applications. Boston: McGraw Hill
Higher Education, 2006.
[1] Martin, Holger. “The Generalized Lévêque Equation and Its Practical Use for the Prediction of Heat and Mass
Transfer Rates from Pressure Drop.” Chemical Engineering Science, Jean-Claude Charpentier Festschrift Issue,
57, no. 16 (August 1, 2002): 3217-23. https://doi.org/10.1016/S0009-2509(02)00194-X.
[2] Shah, Ramesh K., and Dusan P. Sekulic. Fundamentals of Heat Exchanger Design. 1st edition. Hoboken, NJ:
Wiley, 2002.
[3] Gesellschaft, V. D. I., ed. VDI Heat Atlas. 2nd edition. Berlin; New York:: Springer, 2010.
[1] Bergman, Theodore L., Adrienne S. Lavine, Frank P. Incropera, and David P. DeWitt. Introduction to Heat
Transfer. 6E. Hoboken, NJ: Wiley, 2011.
[2] Cengel, Yunus, and John Cimbala. Fluid Mechanics: Fundamentals and Applications. Boston: McGraw Hill
Higher Education, 2006.
[1] Green, Don, and Robert Perry. Perry’s Chemical Engineers’ Handbook, Eighth Edition. McGraw-Hill Profes-
sional, 2007.
[2] Cengel, Yunus, and John Cimbala. Fluid Mechanics: Fundamentals and Applications. Boston: McGraw Hill
Higher Education, 2006.
[1] Green, Don, and Robert Perry. Perry’s Chemical Engineers’ Handbook, Eighth Edition. McGraw-Hill Profes-
sional, 2007.
[2] Cengel, Yunus, and John Cimbala. Fluid Mechanics: Fundamentals and Applications. Boston: McGraw Hill
Higher Education, 2006.
[3] Gesellschaft, V. D. I., ed. VDI Heat Atlas. 2nd edition. Berlin; New York:: Springer, 2010.
[1] Green, Don, and Robert Perry. Perry’s Chemical Engineers’ Handbook, Eighth Edition. McGraw-Hill Profes-
sional, 2007.
[2] Cengel, Yunus, and John Cimbala. Fluid Mechanics: Fundamentals and Applications. Boston: McGraw Hill
Higher Education, 2006.
[1] Kunes, Josef. Dimensionless Physical Quantities in Science and Engineering. Elsevier, 2012.
[2] Yan, Xiaokang, Kaixin Zheng, Yan Jia, Zhenyong Miao, Lijun Wang, Yijun Cao, and Jiongtian Liu. “Drag
Coefficient Prediction of a Single Bubble Rising in Liquids.” Industrial & Engineering Chemistry Research,
April 2, 2018. https://doi.org/10.1021/acs.iecr.7b04743.
[1] Green, Don, and Robert Perry. Perry’s Chemical Engineers’ Handbook, Eighth Edition. McGraw-Hill Profes-
sional, 2007.
[2] Bergman, Theodore L., Adrienne S. Lavine, Frank P. Incropera, and David P. DeWitt. Introduction to Heat
Transfer. 6E. Hoboken, NJ: Wiley, 2011.
[1] Green, Don, and Robert Perry. Perry’s Chemical Engineers’ Handbook, Eighth Edition. McGraw-Hill Profes-
sional, 2007.

624 Bibliography
Fluids Documentation, Release 1.0.21

[1] Green, Don, and Robert Perry. Perry’s Chemical Engineers’ Handbook, Eighth Edition. McGraw-Hill Profes-
sional, 2007.
[2] Cengel, Yunus, and John Cimbala. Fluid Mechanics: Fundamentals and Applications. Boston: McGraw Hill
Higher Education, 2006.
[1] Green, Don, and Robert Perry. Perry’s Chemical Engineers’ Handbook, Eighth Edition. McGraw-Hill Profes-
sional, 2007.
[1] Green, Don, and Robert Perry. Perry’s Chemical Engineers’ Handbook, Eighth Edition. McGraw-Hill Profes-
sional, 2007.
[2] Cengel, Yunus, and John Cimbala. Fluid Mechanics: Fundamentals and Applications. Boston: McGraw Hill
Higher Education, 2006.
[1] Green, Don, and Robert Perry. Perry’s Chemical Engineers’ Handbook, Eighth Edition. McGraw-Hill Profes-
sional, 2007.
[2] Cengel, Yunus, and John Cimbala. Fluid Mechanics: Fundamentals and Applications. Boston: McGraw Hill
Higher Education, 2006.
[3] Gesellschaft, V. D. I., ed. VDI Heat Atlas. 2nd edition. Berlin; New York:: Springer, 2010.
[1] Green, Don, and Robert Perry. Perry’s Chemical Engineers’ Handbook, Eighth Edition. McGraw-Hill Profes-
sional, 2007.
[2] Cengel, Yunus, and John Cimbala. Fluid Mechanics: Fundamentals and Applications. Boston: McGraw Hill
Higher Education, 2006.
[1] Green, Don, and Robert Perry. Perry’s Chemical Engineers’ Handbook, Eighth Edition. McGraw-Hill Profes-
sional, 2007.
[2] Cengel, Yunus, and John Cimbala. Fluid Mechanics: Fundamentals and Applications. Boston: McGraw Hill
Higher Education, 2006.
[1] Green, Don, and Robert Perry. Perry’s Chemical Engineers’ Handbook, Eighth Edition. McGraw-Hill Profes-
sional, 2007.
[2] Cengel, Yunus, and John Cimbala. Fluid Mechanics: Fundamentals and Applications. Boston: McGraw Hill
Higher Education, 2006.
[1] Green, Don, and Robert Perry. Perry’s Chemical Engineers’ Handbook, Eighth Edition. McGraw-Hill Profes-
sional, 2007.
[2] Cengel, Yunus, and John Cimbala. Fluid Mechanics: Fundamentals and Applications. Boston: McGraw Hill
Higher Education, 2006.
[1] Green, Don, and Robert Perry. Perry’s Chemical Engineers’ Handbook, Eighth Edition. McGraw-Hill Profes-
sional, 2007.
[1] Green, Don, and Robert Perry. Perry’s Chemical Engineers’ Handbook, Eighth Edition. McGraw-Hill Profes-
sional, 2007.
[2] Bergman, Theodore L., Adrienne S. Lavine, Frank P. Incropera, and David P. DeWitt. Introduction to Heat
Transfer. 6E. Hoboken, NJ: Wiley, 2011.
[1] Rhodes, Martin J. Introduction to Particle Technology. Wiley, 2013.
[2] Al-Dughaither, Abdullah S., Ahmed A. Ibrahim, and Waheed A. Al-Masry. “Investigating Droplet Separation
Efficiency in Wire-Mesh Mist Eliminators in Bubble Column.” Journal of Saudi Chemical Society 14, no. 4
(October 1, 2010): 331-39. https://doi.org/10.1016/j.jscs.2010.04.001.
[1] Green, Don, and Robert Perry. Perry’s Chemical Engineers’ Handbook, Eighth Edition. McGraw-Hill Profes-
sional, 2007.

Bibliography 625
Fluids Documentation, Release 1.0.21

[2] Cengel, Yunus, and John Cimbala. Fluid Mechanics: Fundamentals and Applications. Boston: McGraw Hill
Higher Education, 2006.
[1] Sen, Nilava. “Suratman Number in Bubble-to-Slug Flow Pattern Transition under Microgravity.” Acta Astro-
nautica 65, no. 3-4 (August 2009): 423-28. doi:10.1016/j.actaastro.2009.02.013.
[2] Catchpole, John P., and George. Fulford. “DIMENSIONLESS GROUPS.” Industrial & Engineering Chemistry
58, no. 3 (March 1, 1966): 46-60. doi:10.1021/ie50675a012.
[1] Green, Don, and Robert Perry. Perry’s Chemical Engineers’ Handbook, Eighth Edition. McGraw-Hill Profes-
sional, 2007.
[2] Cengel, Yunus, and John Cimbala. Fluid Mechanics: Fundamentals and Applications. Boston: McGraw Hill
Higher Education, 2006.
[3] Gesellschaft, V. D. I., ed. VDI Heat Atlas. 2nd edition. Berlin; New York:: Springer, 2010.
[1] Blevins, Robert D. Applied Fluid Dynamics Handbook. New York, N.Y.: Van Nostrand Reinhold Co., 1984.
[1] Green, Don, and Robert Perry. Perry’s Chemical Engineers’ Handbook, Eighth Edition. McGraw-Hill Profes-
sional, 2007.
[2] Cengel, Yunus, and John Cimbala. Fluid Mechanics: Fundamentals and Applications. Boston: McGraw Hill
Higher Education, 2006.
[1] Cengel, Yunus, and John Cimbala. Fluid Mechanics: Fundamentals and Applications. Boston: McGraw Hill
Higher Education, 2006.
[1] Haynes, W.M., Thomas J. Bruno, and David R. Lide. CRC Handbook of Chemistry and Physics. [Boca Raton,
FL]: CRC press, 2014.
[1] Green, Don, and Robert Perry. Perry’s Chemical Engineers’ Handbook, Eighth Edition. McGraw-Hill Profes-
sional, 2007.
[2] Rushton, Albert, Anthony S. Ward, and Richard G. Holdich. Solid-Liquid Filtration and Separation Technology.
1st edition. Weinheim; New York: Wiley-VCH, 1996.
[1] Timmerman, Peter, and Jacobus P. van der Weele. “On the Rise and Fall of a Ball with Linear or Quadratic
Drag.” American Journal of Physics 67, no. 6 (June 1999): 538-46. https://doi.org/10.1119/1.19320.
[1] Rhodes, Martin J. Introduction to Particle Technology. Wiley, 2013.
[1] Barati, Reza, Seyed Ali Akbar Salehi Neyshabouri, and Goodarz Ahmadi. “Development of Empirical Models
with High Accuracy for Estimation of Drag Coefficient of Flow around a Smooth Sphere: An Evolutionary
Approach.” Powder Technology 257 (May 2014): 11-19. doi:10.1016/j.powtec.2014.02.045.
[1] Barati, Reza, Seyed Ali Akbar Salehi Neyshabouri, and Goodarz Ahmadi. “Development of Empirical Models
with High Accuracy for Estimation of Drag Coefficient of Flow around a Smooth Sphere: An Evolutionary
Approach.” Powder Technology 257 (May 2014): 11-19. doi:10.1016/j.powtec.2014.02.045.
[1] Khan, A. R., and J. F. Richardson. “The Resistance to Motion of a Solid Sphere in a Fluid.” Chemical Engineering
Communications 62, no. 1-6 (December 1, 1987): 135-50. doi:10.1080/00986448708912056.
[2] Barati, Reza, Seyed Ali Akbar Salehi Neyshabouri, and Goodarz Ahmadi. “Development of Empirical Models
with High Accuracy for Estimation of Drag Coefficient of Flow around a Smooth Sphere: An Evolutionary
Approach.” Powder Technology 257 (May 2014): 11-19. doi:10.1016/j.powtec.2014.02.045.
[1] Morsi, S. A., and A. J. Alexander. “An Investigation of Particle Trajectories in Two-Phase Flow Systems.” Journal
of Fluid Mechanics 55, no. 02 (September 1972): 193-208. doi:10.1017/S0022112072001806.
[2] Barati, Reza, Seyed Ali Akbar Salehi Neyshabouri, and Goodarz Ahmadi. “Development of Empirical Models
with High Accuracy for Estimation of Drag Coefficient of Flow around a Smooth Sphere: An Evolutionary
Approach.” Powder Technology 257 (May 2014): 11-19. doi:10.1016/j.powtec.2014.02.045.

626 Bibliography
Fluids Documentation, Release 1.0.21

[1] H. Rouse, Fluid Mechanics for Hydraulic Engineers, Dover, New York, N.Y., 1938
[2] Barati, Reza, Seyed Ali Akbar Salehi Neyshabouri, and Goodarz Ahmadi. “Development of Empirical Models
with High Accuracy for Estimation of Drag Coefficient of Flow around a Smooth Sphere: An Evolutionary
Approach.” Powder Technology 257 (May 2014): 11-19. doi:10.1016/j.powtec.2014.02.045.
[1] F. Engelund, E. Hansen, Monograph on Sediment Transport in Alluvial Streams, Monograpsh Denmark Tech-
nical University, Hydraulic Lab, Denmark, 1967.
[2] Barati, Reza, Seyed Ali Akbar Salehi Neyshabouri, and Goodarz Ahmadi. “Development of Empirical Models
with High Accuracy for Estimation of Drag Coefficient of Flow around a Smooth Sphere: An Evolutionary
Approach.” Powder Technology 257 (May 2014): 11-19. doi:10.1016/j.powtec.2014.02.045.
[1] R. Clift, W.H. Gauvin, The motion of particles in turbulent gas streams, Proc. Chemeca, 70, 1970, pp. 14-28.
[2] Barati, Reza, Seyed Ali Akbar Salehi Neyshabouri, and Goodarz Ahmadi. “Development of Empirical Models
with High Accuracy for Estimation of Drag Coefficient of Flow around a Smooth Sphere: An Evolutionary
Approach.” Powder Technology 257 (May 2014): 11-19. doi:10.1016/j.powtec.2014.02.045.
[1] W.H. Graf, Hydraulics of Sediment Transport, Water Resources Publications, Littleton, Colorado, 1984.
[2] Barati, Reza, Seyed Ali Akbar Salehi Neyshabouri, and Goodarz Ahmadi. “Development of Empirical Models
with High Accuracy for Estimation of Drag Coefficient of Flow around a Smooth Sphere: An Evolutionary
Approach.” Powder Technology 257 (May 2014): 11-19. doi:10.1016/j.powtec.2014.02.045.
[1] Flemmer, R. L. C., and C. L. Banks. “On the Drag Coefficient of a Sphere.” Powder Technology 48, no. 3
(November 1986): 217-21. doi:10.1016/0032-5910(86)80044-4.
[2] Barati, Reza, Seyed Ali Akbar Salehi Neyshabouri, and Goodarz Ahmadi. “Development of Empirical Models
with High Accuracy for Estimation of Drag Coefficient of Flow around a Smooth Sphere: An Evolutionary
Approach.” Powder Technology 257 (May 2014): 11-19. doi:10.1016/j.powtec.2014.02.045.
[1] Swamee, P. and Ojha, C. (1991). “Drag Coefficient and Fall Velocity of nonspherical particles.” J. Hydraul. Eng.,
117(5), 660-667.
[2] Barati, Reza, Seyed Ali Akbar Salehi Neyshabouri, and Goodarz Ahmadi. “Development of Empirical Models
with High Accuracy for Estimation of Drag Coefficient of Flow around a Smooth Sphere: An Evolutionary
Approach.” Powder Technology 257 (May 2014): 11-19. doi:10.1016/j.powtec.2014.02.045.
[1] B.C. Yen, Sediment Fall Velocity in Oscillating Flow, University of Virginia, Department of Civil Engineering,
1992.
[2] Barati, Reza, Seyed Ali Akbar Salehi Neyshabouri, and Goodarz Ahmadi. “Development of Empirical Models
with High Accuracy for Estimation of Drag Coefficient of Flow around a Smooth Sphere: An Evolutionary
Approach.” Powder Technology 257 (May 2014): 11-19. doi:10.1016/j.powtec.2014.02.045.
[1] Haider, A., and O. Levenspiel. “Drag Coefficient and Terminal Velocity of Spherical and Nonspherical Particles.”
Powder Technology 58, no. 1 (May 1989): 63-70. doi:10.1016/0032-5910(89)80008-7.
[2] Barati, Reza, Seyed Ali Akbar Salehi Neyshabouri, and Goodarz Ahmadi. “Development of Empirical Models
with High Accuracy for Estimation of Drag Coefficient of Flow around a Smooth Sphere: An Evolutionary
Approach.” Powder Technology 257 (May 2014): 11-19. doi:10.1016/j.powtec.2014.02.045.
[1] Cheng, Nian-Sheng. “Comparison of Formulas for Drag Coefficient and Settling Velocity of Spherical Particles.”
Powder Technology 189, no. 3 (February 13, 2009): 395-398. doi:10.1016/j.powtec.2008.07.006.
[2] Barati, Reza, Seyed Ali Akbar Salehi Neyshabouri, and Goodarz Ahmadi. “Development of Empirical Models
with High Accuracy for Estimation of Drag Coefficient of Flow around a Smooth Sphere: An Evolutionary
Approach.” Powder Technology 257 (May 2014): 11-19. doi:10.1016/j.powtec.2014.02.045.
[1] Terfous, A., A. Hazzab, and A. Ghenaim. “Predicting the Drag Coefficient and Settling Velocity of Spherical
Particles.” Powder Technology 239 (May 2013): 12-20. doi:10.1016/j.powtec.2013.01.052.

Bibliography 627
Fluids Documentation, Release 1.0.21

[2] Barati, Reza, Seyed Ali Akbar Salehi Neyshabouri, and Goodarz Ahmadi. “Development of Empirical Models
with High Accuracy for Estimation of Drag Coefficient of Flow around a Smooth Sphere: An Evolutionary
Approach.” Powder Technology 257 (May 2014): 11-19. doi:10.1016/j.powtec.2014.02.045.
[1] Mikhailov, M. D., and A. P. Silva Freire. “The Drag Coefficient of a Sphere: An Approximation Using Shanks
Transform.” Powder Technology 237 (March 2013): 432-35. doi:10.1016/j.powtec.2012.12.033.
[2] Barati, Reza, Seyed Ali Akbar Salehi Neyshabouri, and Goodarz Ahmadi. “Development of Empirical Models
with High Accuracy for Estimation of Drag Coefficient of Flow around a Smooth Sphere: An Evolutionary
Approach.” Powder Technology 257 (May 2014): 11-19. doi:10.1016/j.powtec.2014.02.045.
[1] R. Clift, J.R. Grace, M.E. Weber, Bubbles, Drops, and Particles, Academic, New York, 1978.
[2] Barati, Reza, Seyed Ali Akbar Salehi Neyshabouri, and Goodarz Ahmadi. “Development of Empirical Models
with High Accuracy for Estimation of Drag Coefficient of Flow around a Smooth Sphere: An Evolutionary
Approach.” Powder Technology 257 (May 2014): 11-19. doi:10.1016/j.powtec.2014.02.045.
[1] Ceylan, Kadim, Ayşe Altunbaş, and Gudret Kelbaliyev. “A New Model for Estimation of Drag Force in the Flow
of Newtonian Fluids around Rigid or Deformable Particles.” Powder Technology 119, no. 2-3 (September 24,
2001): 250-56. doi:10.1016/S0032-5910(01)00261-3.
[2] Barati, Reza, Seyed Ali Akbar Salehi Neyshabouri, and Goodarz Ahmadi. “Development of Empirical Models
with High Accuracy for Estimation of Drag Coefficient of Flow around a Smooth Sphere: An Evolutionary
Approach.” Powder Technology 257 (May 2014): 11-19. doi:10.1016/j.powtec.2014.02.045.
[1] Almedeij, Jaber. “Drag Coefficient of Flow around a Sphere: Matching Asymptotically the Wide Trend.” Powder
Technology 186, no. 3 (September 10, 2008): 218-23. doi:10.1016/j.powtec.2007.12.006.
[2] Barati, Reza, Seyed Ali Akbar Salehi Neyshabouri, and Goodarz Ahmadi. “Development of Empirical Models
with High Accuracy for Estimation of Drag Coefficient of Flow around a Smooth Sphere: An Evolutionary
Approach.” Powder Technology 257 (May 2014): 11-19. doi:10.1016/j.powtec.2014.02.045.
[1] Morrison, Faith A. An Introduction to Fluid Mechanics. Cambridge University Press, 2013.
[2] Barati, Reza, Seyed Ali Akbar Salehi Neyshabouri, and Goodarz Ahmadi. “Development of Empirical Models
with High Accuracy for Estimation of Drag Coefficient of Flow around a Smooth Sphere: An Evolutionary
Approach.” Powder Technology 257 (May 2014): 11-19. doi:10.1016/j.powtec.2014.02.045.
[1] Song, Xianzhi, Zhengming Xu, Gensheng Li, Zhaoyu Pang, and Zhaopeng Zhu. “A New Model for Predicting
Drag Coefficient and Settling Velocity of Spherical and Non-Spherical Particle in Newtonian Fluid.” Powder
Technology 321 (November 2017): 242-50. doi:10.1016/j.powtec.2017.08.017.
[1] Blevins, Robert D. Applied Fluid Dynamics Handbook. New York, N.Y.: Van Nostrand Reinhold Co., 1984.
[1] Blevins, Robert D. Applied Fluid Dynamics Handbook. New York, N.Y.: Van Nostrand Reinhold Co., 1984.
[1] Blevins, Robert D. Applied Fluid Dynamics Handbook. New York, N.Y.: Van Nostrand Reinhold Co., 1984.
[1] Blevins, Robert D. Applied Fluid Dynamics Handbook. New York, N.Y.: Van Nostrand Reinhold Co., 1984.
[1] Blevins, Robert D. Applied Fluid Dynamics Handbook. New York, N.Y.: Van Nostrand Reinhold Co., 1984.
[1] Rennels, Donald C., and Hobart M. Hudson. Pipe Flow: A Practical and Comprehensive Guide. 1st edition.
Hoboken, N.J: Wiley, 2012.
[2] Miller, Donald S. Internal Flow Systems: Design and Performance Prediction. Gulf Publishing Company, 1990.
[3] Idel’chik, I. E. Handbook of Hydraulic Resistance: Coefficients of Local Resistance and of Friction (Spravochnik
Po Gidravlicheskim Soprotivleniyam, Koeffitsienty Mestnykh Soprotivlenii i Soprotivleniya Treniya). National
technical information Service, 1966.
[4] Blevins, Robert D. Applied Fluid Dynamics Handbook. New York, N.Y.: Van Nostrand Reinhold Co., 1984.
[5] Crane Co. Flow of Fluids Through Valves, Fittings, and Pipe. Crane, 2009.

628 Bibliography
Fluids Documentation, Release 1.0.21

[6] Swamee, Prabhata K., and Ashok K. Sharma. Design of Water Supply Pipe Networks. John Wiley & Sons, 2008.
[1] Rennels, Donald C., and Hobart M. Hudson. Pipe Flow: A Practical and Comprehensive Guide. 1st edition.
Hoboken, N.J: Wiley, 2012.
[2] Miller, Donald S. Internal Flow Systems: Design and Performance Prediction. Gulf Publishing Company, 1990.
[3] Idel’chik, I. E. Handbook of Hydraulic Resistance: Coefficients of Local Resistance and of Friction (Spravochnik
Po Gidravlicheskim Soprotivleniyam, Koeffitsienty Mestnykh Soprotivlenii i Soprotivleniya Treniya). National
technical information Service, 1966.
[4] Harris, Charles William. The Influence of Pipe Thickness on Re-Entrant Intake Losses. Vol. 48. University of
Washington, 1928.
[5] Blevins, Robert D. Applied Fluid Dynamics Handbook. New York, N.Y.: Van Nostrand Reinhold Co., 1984.
[6] Crane Co. Flow of Fluids Through Valves, Fittings, and Pipe. Crane, 2009.
[1] Rennels, Donald C., and Hobart M. Hudson. Pipe Flow: A Practical and Comprehensive Guide. 1st edition.
Hoboken, N.J: Wiley, 2012.
[2] Idel’chik, I. E. Handbook of Hydraulic Resistance: Coefficients of Local Resistance and of Friction (Spravochnik
Po Gidravlicheskim Soprotivleniyam, Koeffitsienty Mestnykh Soprotivlenii i Soprotivleniya Treniya). National
technical information Service, 1966.
[3] Blevins, Robert D. Applied Fluid Dynamics Handbook. New York, N.Y.: Van Nostrand Reinhold Co., 1984.
[1] Rennels, Donald C., and Hobart M. Hudson. Pipe Flow: A Practical and Comprehensive Guide. 1st edition.
Hoboken, N.J: Wiley, 2012.
[2] Hamilton, James Baker. Suppression of Pipe Intake Losses by Various Degrees of Rounding. Seattle: Published
by the University of Washington, 1929. https://search.library.wisc.edu/catalog/999823652202121.
[3] Miller, Donald S. Internal Flow Systems: Design and Performance Prediction. Gulf Publishing Company, 1990.
[4] Harris, Charles William. Elimination of Hydraulic Eddy Current Loss at Intake, Agreement of Theory and
Experiment. University of Washington, 1930.
[5] Swamee, Prabhata K., and Ashok K. Sharma. Design of Water Supply Pipe Networks. John Wiley & Sons, 2008.
[6] Crane Co. Flow of Fluids Through Valves, Fittings, and Pipe. Crane, 2009.
[7] Blevins, Robert D. Applied Fluid Dynamics Handbook. New York, N.Y.: Van Nostrand Reinhold Co., 1984.
[8] Idel’chik, I. E. Handbook of Hydraulic Resistance: Coefficients of Local Resistance and of Friction (Spravochnik
Po Gidravlicheskim Soprotivleniyam, Koeffitsienty Mestnykh Soprotivlenii i Soprotivleniya Treniya). National
technical information Service, 1966.
[1] Rennels, Donald C., and Hobart M. Hudson. Pipe Flow: A Practical and Comprehensive Guide. 1st edition.
Hoboken, N.J: Wiley, 2012.
[2] Idel’chik, I. E. Handbook of Hydraulic Resistance: Coefficients of Local Resistance and of Friction (Spravochnik
Po Gidravlicheskim Soprotivleniyam, Koeffitsienty Mestnykh Soprotivlenii i Soprotivleniya Treniya). National
technical information Service, 1966.
[1] Rennels, Donald C., and Hobart M. Hudson. Pipe Flow: A Practical and Comprehensive Guide. 1st edition.
Hoboken, N.J: Wiley, 2012.
[1] Miller, Donald S. Internal Flow Systems: Design and Performance Prediction. Gulf Publishing Company, 1990.
[1] Rennels, Donald C., and Hobart M. Hudson. Pipe Flow: A Practical and Comprehensive Guide. 1st edition.
Hoboken, N.J: Wiley, 2012.
[1] Rennels, Donald C., and Hobart M. Hudson. Pipe Flow: A Practical and Comprehensive Guide. 1st edition.
Hoboken, N.J: Wiley, 2012.

Bibliography 629
Fluids Documentation, Release 1.0.21

[2] Miller, Donald S. Internal Flow Systems: Design and Performance Prediction. Gulf Publishing Company, 1990.
[3] Crane Co. Flow of Fluids Through Valves, Fittings, and Pipe. Crane, 2009.
[4] Swamee, Prabhata K., and Ashok K. Sharma. Design of Water Supply Pipe Networks. John Wiley & Sons, 2008.
[5] Ito, H.”Pressure Losses in Smooth Pipe Bends.” Journal of Fluids Engineering 82, no. 1 (March 1, 1960): 131-
40. doi:10.1115/1.3662501
[6] Blevins, Robert D. Applied Fluid Dynamics Handbook. New York, N.Y.: Van Nostrand Reinhold Co., 1984.
[1] Miller, Donald S. Internal Flow Systems: Design and Performance Prediction. Gulf Publishing Company, 1990.
[1] Crane Co. Flow of Fluids Through Valves, Fittings, and Pipe. Crane, 2009.
[1] Rennels, Donald C., and Hobart M. Hudson. Pipe Flow: A Practical and Comprehensive Guide. 1st edition.
Hoboken, N.J: Wiley, 2012.
[2] Miller, Donald S. Internal Flow Systems: Design and Performance Prediction. Gulf Publishing Company, 1990.
[3] Crane Co. Flow of Fluids Through Valves, Fittings, and Pipe. Crane, 2009.
[4] Blevins, Robert D. Applied Fluid Dynamics Handbook. New York, N.Y.: Van Nostrand Reinhold Co., 1984.
[1] Miller, Donald S. Internal Flow Systems: Design and Performance Prediction. Gulf Publishing Company, 1990.
[1] Rennels, Donald C., and Hobart M. Hudson. Pipe Flow: A Practical and Comprehensive Guide. 1st edition.
Hoboken, N.J: Wiley, 2012.
[1] Rennels, Donald C., and Hobart M. Hudson. Pipe Flow: A Practical and Comprehensive Guide. 1st edition.
Hoboken, N.J: Wiley, 2012.
[1] Rennels, Donald C., and Hobart M. Hudson. Pipe Flow: A Practical and Comprehensive Guide. 1st edition.
Hoboken, N.J: Wiley, 2012.
[2] Hooper, William B. “Calculate Head Loss Caused by Change in Pipe Size.” Chemical Engineering 95, no. 16
(November 7, 1988): 89.
[1] Rennels, Donald C., and Hobart M. Hudson. Pipe Flow: A Practical and Comprehensive Guide. 1st edition.
Hoboken, N.J: Wiley, 2012.
[2] Miller, Donald S. Internal Flow Systems: Design and Performance Prediction. Gulf Publishing Company, 1990.
[3] Idel’chik, I. E. Handbook of Hydraulic Resistance: Coefficients of Local Resistance and of Friction (Spravochnik
Po Gidravlicheskim Soprotivleniyam, Koeffitsienty Mestnykh Soprotivlenii i Soprotivleniya Treniya). National
technical information Service, 1966.
[1] Miller, Donald S. Internal Flow Systems: Design and Performance Prediction. Gulf Publishing Company, 1990.
[1] Rennels, Donald C., and Hobart M. Hudson. Pipe Flow: A Practical and Comprehensive Guide. 1st edition.
Hoboken, N.J: Wiley, 2012.
[2] Idel’chik, I. E. Handbook of Hydraulic Resistance: Coefficients of Local Resistance and of Friction (Spravochnik
Po Gidravlicheskim Soprotivleniyam, Koeffitsienty Mestnykh Soprotivlenii i Soprotivleniya Treniya). National
technical information Service, 1966.
[3] Blevins, Robert D. Applied Fluid Dynamics Handbook. New York, N.Y.: Van Nostrand Reinhold Co., 1984.
[4] Crane Co. Flow of Fluids Through Valves, Fittings, and Pipe. Crane, 2009.
[5] Swamee, Prabhata K., and Ashok K. Sharma. Design of Water Supply Pipe Networks. John Wiley & Sons, 2008.
[6] Miller, Donald S. Internal Flow Systems: Design and Performance Prediction. Gulf Publishing Company, 1990.
[7] Hooper, William B. “Calculate Head Loss Caused by Change in Pipe Size.” Chemical Engineering 95, no. 16
(November 7, 1988): 89.

630 Bibliography
Fluids Documentation, Release 1.0.21

[1] Crane Co. Flow of Fluids Through Valves, Fittings, and Pipe. Crane, 2009.
[1] Rennels, Donald C., and Hobart M. Hudson. Pipe Flow: A Practical and Comprehensive Guide. 1st edition.
Hoboken, N.J: Wiley, 2012.
[1] Rennels, Donald C., and Hobart M. Hudson. Pipe Flow: A Practical and Comprehensive Guide. 1st edition.
Hoboken, N.J: Wiley, 2012.
[2] Hooper, William B. “Calculate Head Loss Caused by Change in Pipe Size.” Chemical Engineering 95, no. 16
(November 7, 1988): 89.
[1] Rennels, Donald C., and Hobart M. Hudson. Pipe Flow: A Practical and Comprehensive Guide. 1st edition.
Hoboken, N.J: Wiley, 2012.
[2] Idel’chik, I. E. Handbook of Hydraulic Resistance: Coefficients of Local Resistance and of Friction (Spravochnik
Po Gidravlicheskim Soprotivleniyam, Koeffitsienty Mestnykh Soprotivlenii i Soprotivleniya Treniya). National
technical information Service, 1966.
[3] Crane Co. Flow of Fluids Through Valves, Fittings, and Pipe. Crane, 2009.
[4] Swamee, Prabhata K., and Ashok K. Sharma. Design of Water Supply Pipe Networks. John Wiley & Sons, 2008.
[5] Miller, Donald S. Internal Flow Systems: Design and Performance Prediction. Gulf Publishing Company, 1990.
[6] Hooper, William B. “Calculate Head Loss Caused by Change in Pipe Size.” Chemical Engineering 95, no. 16
(November 7, 1988): 89.
[1] Rennels, Donald C., and Hobart M. Hudson. Pipe Flow: A Practical and Comprehensive Guide. 1st edition.
Hoboken, N.J: Wiley, 2012.
[1] Rennels, Donald C., and Hobart M. Hudson. Pipe Flow: A Practical and Comprehensive Guide. 1st edition.
Hoboken, N.J: Wiley, 2012.
[1] Rennels, Donald C., and Hobart M. Hudson. Pipe Flow: A Practical and Comprehensive Guide. 1st edition.
Hoboken, N.J: Wiley, 2012.
[1] Crane Co. Flow of Fluids Through Valves, Fittings, and Pipe. Crane, 2009.
[1] Crane Co. Flow of Fluids Through Valves, Fittings, and Pipe. Crane, 2009.
[1] Crane Co. Flow of Fluids Through Valves, Fittings, and Pipe. Crane, 2009.
[1] Crane Co. Flow of Fluids Through Valves, Fittings, and Pipe. Crane, 2009.
[1] Crane Co. Flow of Fluids Through Valves, Fittings, and Pipe. Crane, 2009.
[2] Harvey Wilson. “Pressure Drop in Pipe Fittings and Valves | Equivalent Length and Resistance Coefficient.”
Katmar Software. Accessed July 28, 2017. http://www.katmarsoftware.com/articles/pipe-fitting-pressure-drop.
htm.
[1] Crane Co. Flow of Fluids Through Valves, Fittings, and Pipe. Crane, 2009.
[1] Crane Co. Flow of Fluids Through Valves, Fittings, and Pipe. Crane, 2009.
[1] Crane Co. Flow of Fluids Through Valves, Fittings, and Pipe. Crane, 2009.
[1] Crane Co. Flow of Fluids Through Valves, Fittings, and Pipe. Crane, 2009.
[1] Crane Co. Flow of Fluids Through Valves, Fittings, and Pipe. Crane, 2009.
[1] Crane Co. Flow of Fluids Through Valves, Fittings, and Pipe. Crane, 2009.
[1] Crane Co. Flow of Fluids Through Valves, Fittings, and Pipe. Crane, 2009.
[1] Crane Co. Flow of Fluids Through Valves, Fittings, and Pipe. Crane, 2009.
[1] Crane Co. Flow of Fluids Through Valves, Fittings, and Pipe. Crane, 2009.

Bibliography 631
Fluids Documentation, Release 1.0.21

[1] Crane Co. Flow of Fluids Through Valves, Fittings, and Pipe. Crane, 2009.
[1] Crane Co. Flow of Fluids Through Valves, Fittings, and Pipe. Crane, 2009.
[1] Crane Co. Flow of Fluids Through Valves, Fittings, and Pipe. Crane, 2009.
[1] Hooper, W. B., “The 2-K Method Predicts Head Losses in Pipe Fittings,” Chem. Eng., p. 97, Aug. 24 (1981).
[2] Hooper, William B. “Calculate Head Loss Caused by Change in Pipe Size.” Chemical Engineering 95, no. 16
(November 7, 1988): 89.
[3] Kayode Coker. Ludwig’s Applied Process Design for Chemical and Petrochemical Plants. 4E. Amsterdam;
Boston: Gulf Professional Publishing, 2007.
[1] Silverberg, Peter, and Ron Darby. “Correlate Pressure Drops through Fittings: Three Constants Accurately Cal-
culate Flow through Elbows, Valves and Tees.” Chemical Engineering 106, no. 7 (July 1999): 101.
[2] Silverberg, Peter. “Correlate Pressure Drops Through Fittings.” Chemical Engineering 108, no. 4 (April 2001):
127,129-130.
[1] ISA-75.01.01-2007 (60534-2-1 Mod) Draft
[1] ISA-75.01.01-2007 (60534-2-1 Mod) Draft
[1] ISA-75.01.01-2007 (60534-2-1 Mod) Draft
[1] ISA-75.01.01-2007 (60534-2-1 Mod) Draft
[1] ISA-75.01.01-2007 (60534-2-1 Mod) Draft
[1] ISA-75.01.01-2007 (60534-2-1 Mod) Draft
[1] Crane Co. Flow of Fluids Through Valves, Fittings, and Pipe. Crane, 2009.
[100] Crane Co. TP 410 Flow of Fluids Through Valves, Fittings, and Pipe. Crane, 2009.
[101] Rennels, Donald C., and Hobart M. Hudson. Pipe Flow: A Practical and Comprehensive Guide. 1st edition.
Hoboken, N.J: Wiley, 2012.
[102] Miller, Donald S. Internal Flow Systems: Design and Performance Prediction. Gulf Publishing Company, 1990.
[103] Idel’chik, I. E. Handbook of Hydraulic Resistance: Coefficients of Local Resistance and of Friction (Spravochnik
Po Gidravlicheskim Soprotivleniyam, Koeffitsienty Mestnykh Soprotivlenii i Soprotivleniya Treniya). National
technical information Service, 1966.
[104] Blevins, Robert D. Applied Fluid Dynamics Handbook. New York, N.Y.: Van Nostrand Reinhold Co., 1984.
[1] American Society of Mechanical Engineers. Mfc-3M-2004 Measurement Of Fluid Flow In Pipes Using Orifice,
Nozzle, And Venturi. ASME, 2001.
[2] ISO 5167-2:2003 - Measurement of Fluid Flow by Means of Pressure Differential Devices Inserted in Circular
Cross-Section Conduits Running Full – Part 2: Orifice Plates.
[1] American Society of Mechanical Engineers. Mfc-3M-2004 Measurement Of Fluid Flow In Pipes Using Orifice,
Nozzle, And Venturi. ASME, 2001.
[2] ISO 5167-2:2003 - Measurement of Fluid Flow by Means of Pressure Differential Devices Inserted in Circular
Cross-Section Conduits Running Full – Part 2: Orifice Plates.
[3] Reader-Harris, M. J., “The Equation for the Expansibility Factor for Orifice Plates,” Proceedings of FLOMEKO
1998, Lund, Sweden, 1998: 209-214.
[4] Reader-Harris, Michael. Orifice Plates and Venturi Tubes. Springer, 2015.
[1] TC 30/SC 2, ISO. ISO/TR 15377:1998, Measurement of Fluid Flow by Means of Pressure-Differential Devices
- Guide for the Specification of Nozzles and Orifice Plates beyond the Scope of ISO 5167-1.

632 Bibliography
Fluids Documentation, Release 1.0.21

[2] Yashvanth, S., Varadarajan Seshadri, and J. YogeshKumarK. “CFD Analysis of Flow through Single and Multi
Stage Eccentric Orifice Plate Assemblies,” 2017.
[1] TC 30/SC 2, ISO. ISO/TR 15377:1998, Measurement of Fluid Flow by Means of Pressure-Differential Devices
- Guide for the Specification of Nozzles and Orifice Plates beyond the Scope of ISO 5167-1.
[1] Miller, Richard W. Flow Measurement Engineering Handbook. McGraw-Hill Education, 1996.
[2] “RW Miller & Associates.” Accessed April 13, 2020. http://rwmillerassociates.com/.
[1] American Society of Mechanical Engineers. Mfc-3M-2004 Measurement Of Fluid Flow In Pipes Using Orifice,
Nozzle, And Venturi. ASME, 2001.
[2] ISO 5167-2:2003 - Measurement of Fluid Flow by Means of Pressure Differential Devices Inserted in Circular
Cross-Section Conduits Running Full – Part 2: Orifice Plates.
[1] American Society of Mechanical Engineers. MFC-3M-1989 Measurement Of Fluid Flow In Pipes Using Orifice,
Nozzle, And Venturi. ASME, 2005.
[2] Miller, Richard W. Flow Measurement Engineering Handbook. 3rd edition. New York: McGraw-Hill Education,
1996.
[1] American Society of Mechanical Engineers. Mfc-3M-2004 Measurement Of Fluid Flow In Pipes Using Orifice,
Nozzle, And Venturi. ASME, 2001.
[2] ISO 5167-3:2003 - Measurement of Fluid Flow by Means of Pressure Differential Devices Inserted in Circular
Cross-Section Conduits Running Full – Part 3: Nozzles and Venturi Nozzles.
[1] American Society of Mechanical Engineers. Mfc-3M-2004 Measurement Of Fluid Flow In Pipes Using Orifice,
Nozzle, And Venturi. ASME, 2001.
[2] ISO 5167-3:2003 - Measurement of Fluid Flow by Means of Pressure Differential Devices Inserted in Circular
Cross-Section Conduits Running Full – Part 3: Nozzles and Venturi Nozzles.
[1] American Society of Mechanical Engineers. Mfc-3M-2004 Measurement Of Fluid Flow In Pipes Using Orifice,
Nozzle, And Venturi. ASME, 2001.
[2] ISO 5167-3:2003 - Measurement of Fluid Flow by Means of Pressure Differential Devices Inserted in Circular
Cross-Section Conduits Running Full – Part 3: Nozzles and Venturi Nozzles.
[1] American Society of Mechanical Engineers. Mfc-3M-2004 Measurement Of Fluid Flow In Pipes Using Orifice,
Nozzle, And Venturi. ASME, 2001.
[2] ISO 5167-3:2003 - Measurement of Fluid Flow by Means of Pressure Differential Devices Inserted in Circular
Cross-Section Conduits Running Full – Part 3: Nozzles and Venturi Nozzles.
[1] American Society of Mechanical Engineers. Mfc-3M-2004 Measurement Of Fluid Flow In Pipes Using Orifice,
Nozzle, And Venturi. ASME, 2001.
[2] ISO 5167-4:2003 - Measurement of Fluid Flow by Means of Pressure Differential Devices Inserted in Circular
Cross-Section Conduits Running Full – Part 4: Venturi Tubes.
[1] Reader-harris, Michael, and Tuv Nel. An Improved Model for Venturi-Tube Over-Reading in Wet Gas, 2009.
[2] ISO/TR 11583:2012 Measurement of Wet Gas Flow by Means of Pressure Differential Devices Inserted in
Circular Cross-Section Conduits.
[1] Reader-harris, Michael, and Tuv Nel. An Improved Model for Venturi-Tube Over-Reading in Wet Gas, 2009.
[2] ISO/TR 11583:2012 Measurement of Wet Gas Flow by Means of Pressure Differential Devices Inserted in
Circular Cross-Section Conduits.
[1] Hollingshead, Colter. “Discharge Coefficient Performance of Venturi, Standard Concentric Orifice Plate, V-
Cone, and Wedge Flow Meters at Small Reynolds Numbers.” May 1, 2011. https://digitalcommons.usu.edu/etd/
869.

Bibliography 633
Fluids Documentation, Release 1.0.21

[1] Stewart, D. G., M. Reader-Harris, and NEL Dr RJW Peters. “Derivation of an Expansibility Factor for the V-
Cone Meter.” In Flow Measurement International Conference, Peebles, Scotland, UK, 2001.
[2] ISO 5167-5:2016 - Measurement of Fluid Flow by Means of Pressure Differential Devices Inserted in Circular
Cross-Section Conduits Running Full – Part 5: Cone meters.
[1] ISO 5167-5:2016 - Measurement of Fluid Flow by Means of Pressure Differential Devices Inserted in Circular
Cross-Section Conduits Running Full – Part 5: Cone meters.
[1] ISO/DIS 5167-6 - Measurement of Fluid Flow by Means of Pressure Differential Devices Inserted in Circular
Cross-Section Conduits Running Full – Part 6: Wedge Meters.
[1] Miller, Richard W. Flow Measurement Engineering Handbook. 3rd edition. New York: McGraw-Hill Education,
1996.
[2] Seshadri, V., S. N. Singh, and S. Bhargava. “Effect of Wedge Shape and Pressure Tap Locations on the Charac-
teristics of a Wedge Flowmeter.” IJEMS Vol.01(5), October 1994.
[1] Hollingshead, Colter. “Discharge Coefficient Performance of Venturi, Standard Concentric Orifice Plate, V-
Cone, and Wedge Flow Meters at Small Reynolds Numbers.” May 1, 2011. https://digitalcommons.usu.edu/etd/
869.
[2] IntraWedge WEDGE FLOW METER Type: IWM. January 2011. http://www.intra-automation.com/download.
php?file=pdf/products/technical_information/en/ti_iwm_en.pdf
[1] ISO/DIS 5167-6 - Measurement of Fluid Flow by Means of Pressure Differential Devices Inserted in Circular
Cross-Section Conduits Running Full – Part 6: Wedge Meters.
[1] American Society of Mechanical Engineers. Mfc-3M-2004 Measurement Of Fluid Flow In Pipes Using Orifice,
Nozzle, And Venturi. ASME, 2001.
[2] ISO 5167-2:2003 - Measurement of Fluid Flow by Means of Pressure Differential Devices Inserted in Circular
Cross-Section Conduits Running Full – Part 2: Orifice Plates.
[1] American Society of Mechanical Engineers. Mfc-3M-2004 Measurement Of Fluid Flow In Pipes Using Orifice,
Nozzle, And Venturi. ASME, 2001.
[2] ISO 5167-2:2003 - Measurement of Fluid Flow by Means of Pressure Differential Devices Inserted in Circular
Cross-Section Conduits Running Full – Part 2: Orifice Plates.
[1] American Society of Mechanical Engineers. Mfc-3M-2004 Measurement Of Fluid Flow In Pipes Using Orifice,
Nozzle, And Venturi. ASME, 2001.
[1] American Society of Mechanical Engineers. Mfc-3M-2004 Measurement Of Fluid Flow In Pipes Using Orifice,
Nozzle, And Venturi. ASME, 2001.
[2] Miller, Richard W. Flow Measurement Engineering Handbook. 3rd edition. New York: McGraw-Hill Education,
1996.
[1] American Society of Mechanical Engineers. Mfc-3M-2004 Measurement Of Fluid Flow In Pipes Using Orifice,
Nozzle, And Venturi. ASME, 2001.
[2] ISO 5167-2:2003 - Measurement of Fluid Flow by Means of Pressure Differential Devices Inserted in Circular
Cross-Section Conduits Running Full – Part 2: Orifice Plates.
[1] Avila, Kerstin, David Moxey, Alberto de Lozar, Marc Avila, Dwight Barkley, and Björn Hof. “The Onset of
Turbulence in Pipe Flow.” Science 333, no. 6039 (July 8, 2011): 192-96. doi:10.1126/science.1203223.
[1] Schlunder, Ernst U, and International Center for Heat and Mass Transfer. Heat Exchanger Design Handbook.
Washington: Hemisphere Pub. Corp., 1983.
[1] Schlunder, Ernst U, and International Center for Heat and Mass Transfer. Heat Exchanger Design Handbook.
Washington: Hemisphere Pub. Corp., 1983.

634 Bibliography
Fluids Documentation, Release 1.0.21

[1] Crane Co. Flow of Fluids Through Valves, Fittings, and Pipe. Crane, 2009.
[1] Colebrook, C F.”Turbulent Flow in Pipes, with Particular Reference to the Transition Region Between the Smooth
and Rough Pipe Laws.” Journal of the ICE 11, no. 4 (February 1, 1939): 133-156. doi:10.1680/ijoti.1939.13150.
[1] Clamond, Didier. “Efficient Resolution of the Colebrook Equation.” Industrial & Engi-
neering Chemistry Research 48, no. 7 (April 1, 2009): 3665-71. doi:10.1021/ie801626g.
http://math.unice.fr/%7Edidierc/DidPublis/ICR_2009.pdf
[1] Cengel, Yunus, and John Cimbala. Fluid Mechanics: Fundamentals and Applications. Boston: McGraw Hill
Higher Education, 2006.
[2] McKEON, B. J., C. J. SWANSON, M. V. ZAGAROLA, R. J. DONNELLY, and A. J. SMITS.
“Friction Factors for Smooth Pipe Flow.” Journal of Fluid Mechanics 511 (July 1, 2004): 41-44.
doi:10.1017/S0022112004009796.
[1] Winning, H. and T. Coole. “Explicit Friction Factor Accuracy and Computational Efficiency for Turbulent Flow
in Pipes.” Flow, Turbulence and Combustion 90, no. 1 (January 1, 2013): 1-27. doi:10.1007/s10494-012-9419-7
[2] Moody, L.F.: An approximate formula for pipe friction factors. Trans. Am. Soc. Mech. Eng. 69,1005-1006
(1947)
[1] Blasius, H.”Das Aehnlichkeitsgesetz bei Reibungsvorgängen in Flüssigkeiten.” In Mitteilungen über
Forschungsarbeiten auf dem Gebiete des Ingenieurwesens, edited by Verein deutscher Ingenieure, 1-41. Berlin,
Heidelberg: Springer Berlin Heidelberg, 1913. http://rd.springer.com/chapter/10.1007/978-3-662-02239-9_1.
[2] Hager, W. H. “Blasius: A Life in Research and Education.” In Experiments in Fluids, 566–571, 2003.
[1] Rennels, Donald C., and Hobart M. Hudson. Pipe Flow: A Practical and Comprehensive Guide. 1st edition.
Hoboken, N.J: Wiley, 2012.
[2] McGovern, Jim. “Technical Note: Friction Factor Diagrams for Pipe Flow.” Paper, October 3, 2011. http://arrow.
dit.ie/engschmecart/28.
[1] Rennels, Donald C., and Hobart M. Hudson. Pipe Flow: A Practical and Comprehensive Guide. 1st edition.
Hoboken, N.J: Wiley, 2012.
[2] McGovern, Jim. “Technical Note: Friction Factor Diagrams for Pipe Flow.” Paper, October 3, 2011. http://arrow.
dit.ie/engschmecart/28.
[1] Winning, H. and T. Coole. “Explicit Friction Factor Accuracy and Computational Efficiency for Turbulent Flow
in Pipes.” Flow, Turbulence and Combustion 90, no. 1 (January 1, 2013): 1-27. doi:10.1007/s10494-012-9419-7
[1] Winning, H. and T. Coole. “Explicit Friction Factor Accuracy and Computational Efficiency for Turbulent Flow
in Pipes.” Flow, Turbulence and Combustion 90, no. 1 (January 1, 2013): 1-27. doi:10.1007/s10494-012-9419-7
[2] Wood, D.J.: An Explicit Friction Factor Relationship, vol. 60. Civil Engineering American Society of Civil
Engineers (1966)
[1] Winning, H. and T. Coole. “Explicit Friction Factor Accuracy and Computational Efficiency for Turbulent Flow
in Pipes.” Flow, Turbulence and Combustion 90, no. 1 (January 1, 2013): 1-27. doi:10.1007/s10494-012-9419-7
[2] Churchill, Stuart W. “Empirical Expressions for the Shear Stress in Turbulent Flow in Commercial Pipe.” AIChE
Journal 19, no. 2 (March 1, 1973): 375-76. doi:10.1002/aic.690190228.
[1] Winning, H. and T. Coole. “Explicit Friction Factor Accuracy and Computational Efficiency for Turbulent Flow
in Pipes.” Flow, Turbulence and Combustion 90, no. 1 (January 1, 2013): 1-27. doi:10.1007/s10494-012-9419-7
[2] Eck, B.: Technische Stromungslehre. Springer, New York (1973)
[1] Winning, H. and T. Coole. “Explicit Friction Factor Accuracy and Computational Efficiency for Turbulent Flow
in Pipes.” Flow, Turbulence and Combustion 90, no. 1 (January 1, 2013): 1-27. doi:10.1007/s10494-012-9419-7

Bibliography 635
Fluids Documentation, Release 1.0.21

[2] Jain, Akalank K.”Accurate Explicit Equation for Friction Factor.” Journal of the Hydraulics Division 102, no. 5
(May 1976): 674-77.
[1] Winning, H. and T. Coole. “Explicit Friction Factor Accuracy and Computational Efficiency for Turbulent Flow
in Pipes.” Flow, Turbulence and Combustion 90, no. 1 (January 1, 2013): 1-27. doi:10.1007/s10494-012-9419-7
[2] Swamee, Prabhata K., and Akalank K. Jain.”Explicit Equations for Pipe-Flow Problems.” Journal of the Hy-
draulics Division 102, no. 5 (May 1976): 657-664.
[1] Winning, H. and T. Coole. “Explicit Friction Factor Accuracy and Computational Efficiency for Turbulent Flow
in Pipes.” Flow, Turbulence and Combustion 90, no. 1 (January 1, 2013): 1-27. doi:10.1007/s10494-012-9419-7
[2] Churchill, S.W.: Friction factor equation spans all fluid flow regimes. Chem. Eng. J. 91, 91-92 (1977)
[1] Winning, H. and T. Coole. “Explicit Friction Factor Accuracy and Computational Efficiency for Turbulent Flow
in Pipes.” Flow, Turbulence and Combustion 90, no. 1 (January 1, 2013): 1-27. doi:10.1007/s10494-012-9419-7
[2] Chen, Ning Hsing. “An Explicit Equation for Friction Factor in Pipe.” Industrial & Engineering Chemistry
Fundamentals 18, no. 3 (August 1, 1979): 296-97. doi:10.1021/i160071a019.
[1] Winning, H. and T. Coole. “Explicit Friction Factor Accuracy and Computational Efficiency for Turbulent Flow
in Pipes.” Flow, Turbulence and Combustion 90, no. 1 (January 1, 2013): 1-27. doi:10.1007/s10494-012-9419-7
[2] Round, G. F.”An Explicit Approximation for the Friction Factor-Reynolds Number Relation for Rough and
Smooth Pipes.” The Canadian Journal of Chemical Engineering 58, no. 1 (February 1, 1980): 122-23.
doi:10.1002/cjce.5450580119.
[1] Winning, H. and T. Coole. “Explicit Friction Factor Accuracy and Computational Efficiency for Turbulent Flow
in Pipes.” Flow, Turbulence and Combustion 90, no. 1 (January 1, 2013): 1-27. doi:10.1007/s10494-012-9419-7
[2] Shacham, M. “Comments on: ‘An Explicit Equation for Friction Factor in Pipe.’” Industrial & Engineering
Chemistry Fundamentals 19, no. 2 (May 1, 1980): 228-228. doi:10.1021/i160074a019.
[1] Winning, H. and T. Coole. “Explicit Friction Factor Accuracy and Computational Efficiency for Turbulent Flow
in Pipes.” Flow, Turbulence and Combustion 90, no. 1 (January 1, 2013): 1-27. doi:10.1007/s10494-012-9419-7
[2] Barr, Dih, and Colebrook White.”Technical Note. Solutions Of The Colebrook-White Function For Resistance To
Uniform Turbulent Flow.” ICE Proceedings 71, no. 2 (January 6, 1981): 529-35. doi:10.1680/iicep.1981.1895.
[1] Winning, H. and T. Coole. “Explicit Friction Factor Accuracy and Computational Efficiency for Turbulent Flow
in Pipes.” Flow, Turbulence and Combustion 90, no. 1 (January 1, 2013): 1-27. doi:10.1007/s10494-012-9419-7
[2] Zigrang, D. J., and N. D. Sylvester.”Explicit Approximations to the Solution of Colebrook’s Friction Factor
Equation.” AIChE Journal 28, no. 3 (May 1, 1982): 514-15. doi:10.1002/aic.690280323.
[1] Winning, H. and T. Coole. “Explicit Friction Factor Accuracy and Computational Efficiency for Turbulent Flow
in Pipes.” Flow, Turbulence and Combustion 90, no. 1 (January 1, 2013): 1-27. doi:10.1007/s10494-012-9419-7
[2] Zigrang, D. J., and N. D. Sylvester.”Explicit Approximations to the Solution of Colebrook’s Friction Factor
Equation.” AIChE Journal 28, no. 3 (May 1, 1982): 514-15. doi:10.1002/aic.690280323.
[1] Winning, H. and T. Coole. “Explicit Friction Factor Accuracy and Computational Efficiency for Turbulent Flow
in Pipes.” Flow, Turbulence and Combustion 90, no. 1 (January 1, 2013): 1-27. doi:10.1007/s10494-012-9419-7
[2] Haaland, S. E.”Simple and Explicit Formulas for the Friction Factor in Turbulent Pipe Flow.” Journal of Fluids
Engineering 105, no. 1 (March 1, 1983): 89-90. doi:10.1115/1.3240948.
[1] Winning, H. and T. Coole. “Explicit Friction Factor Accuracy and Computational Efficiency for Turbulent Flow
in Pipes.” Flow, Turbulence and Combustion 90, no. 1 (January 1, 2013): 1-27. doi:10.1007/s10494-012-9419-7
[2] Serghides T.K (1984).”Estimate friction factor accurately” Chemical Engineering, Vol. 91(5), pp. 63-64.
[1] Winning, H. and T. Coole. “Explicit Friction Factor Accuracy and Computational Efficiency for Turbulent Flow
in Pipes.” Flow, Turbulence and Combustion 90, no. 1 (January 1, 2013): 1-27. doi:10.1007/s10494-012-9419-7

636 Bibliography
Fluids Documentation, Release 1.0.21

[2] Serghides T.K (1984).”Estimate friction factor accurately” Chemical Engineering, Vol. 91(5), pp. 63-64.
[1] Winning, H. and T. Coole. “Explicit Friction Factor Accuracy and Computational Efficiency for Turbulent Flow
in Pipes.” Flow, Turbulence and Combustion 90, no. 1 (January 1, 2013): 1-27. doi:10.1007/s10494-012-9419-7
[2] Tsal, R.J.: Altshul-Tsal friction factor equation. Heat-Piping-Air Cond. 8, 30-45 (1989)
[1] Winning, H. and T. Coole. “Explicit Friction Factor Accuracy and Computational Efficiency for Turbulent Flow
in Pipes.” Flow, Turbulence and Combustion 90, no. 1 (January 1, 2013): 1-27. doi:10.1007/s10494-012-9419-7
[2] Manadilli, G.: Replace implicit equations with signomial functions. Chem. Eng. 104, 129 (1997)
[1] Winning, H. and T. Coole. “Explicit Friction Factor Accuracy and Computational Efficiency for Turbulent Flow
in Pipes.” Flow, Turbulence and Combustion 90, no. 1 (January 1, 2013): 1-27. doi:10.1007/s10494-012-9419-7
[2] Romeo, Eva, Carlos Royo, and Antonio Monzon.”Improved Explicit Equations for Estimation of the Fric-
tion Factor in Rough and Smooth Pipes.” Chemical Engineering Journal 86, no. 3 (April 28, 2002): 369-74.
doi:10.1016/S1385-8947(01)00254-6.
[1] Winning, H. and T. Coole. “Explicit Friction Factor Accuracy and Computational Efficiency for Turbulent Flow
in Pipes.” Flow, Turbulence and Combustion 90, no. 1 (January 1, 2013): 1-27. doi:10.1007/s10494-012-9419-7
[2] Travis, Quentin B., and Larry W. Mays.”Relationship between Hazen-William and Colebrook-White Roughness
Values.” Journal of Hydraulic Engineering 133, no. 11 (November 2007): 1270-73. doi:10.1061/(ASCE)0733-
9429(2007)133:11(1270).
[1] Winning, H. and T. Coole. “Explicit Friction Factor Accuracy and Computational Efficiency for Turbulent Flow
in Pipes.” Flow, Turbulence and Combustion 90, no. 1 (January 1, 2013): 1-27. doi:10.1007/s10494-012-9419-7
[2] Rao, A.R., Kumar, B.: Friction factor for turbulent pipe flow. Division of Mechanical Sciences, Civil Engineer-
ing Indian Institute of Science Bangalore, India ID Code 9587 (2007)
[1] Winning, H. and T. Coole. “Explicit Friction Factor Accuracy and Computational Efficiency for Turbulent Flow
in Pipes.” Flow, Turbulence and Combustion 90, no. 1 (January 1, 2013): 1-27. doi:10.1007/s10494-012-9419-7
[2] Buzzelli, D.: Calculating friction in one step. Mach. Des. 80, 54-55 (2008)
[1] Winning, H. and T. Coole. “Explicit Friction Factor Accuracy and Computational Efficiency for Turbulent Flow
in Pipes.” Flow, Turbulence and Combustion 90, no. 1 (January 1, 2013): 1-27. doi:10.1007/s10494-012-9419-7
[2] Avci, Atakan, and Irfan Karagoz.”A Novel Explicit Equation for Friction Factor in Smooth and Rough Pipes.”
Journal of Fluids Engineering 131, no. 6 (2009): 061203. doi:10.1115/1.3129132.
[1] Winning, H. and T. Coole. “Explicit Friction Factor Accuracy and Computational Efficiency for Turbulent Flow
in Pipes.” Flow, Turbulence and Combustion 90, no. 1 (January 1, 2013): 1-27. doi:10.1007/s10494-012-9419-7
[2] Papaevangelou, G., Evangelides, C., Tzimopoulos, C.: A New Explicit Relation for the Friction Factor Coef-
ficient in the Darcy-Weisbach Equation, pp. 166-172. Protection and Restoration of the Environment Corfu,
Greece: University of Ioannina Greece and Stevens Institute of Technology New Jersey (2010)
[1] Winning, H. and T. Coole. “Explicit Friction Factor Accuracy and Computational Efficiency for Turbulent Flow
in Pipes.” Flow, Turbulence and Combustion 90, no. 1 (January 1, 2013): 1-27. doi:10.1007/s10494-012-9419-7
[2] Brkic, Dejan.”Review of Explicit Approximations to the Colebrook Relation for Flow Friction.” Journal of
Petroleum Science and Engineering 77, no. 1 (April 2011): 34-48. doi:10.1016/j.petrol.2011.02.006.
[1] Winning, H. and T. Coole. “Explicit Friction Factor Accuracy and Computational Efficiency for Turbulent Flow
in Pipes.” Flow, Turbulence and Combustion 90, no. 1 (January 1, 2013): 1-27. doi:10.1007/s10494-012-9419-7
[2] Brkic, Dejan.”Review of Explicit Approximations to the Colebrook Relation for Flow Friction.” Journal of
Petroleum Science and Engineering 77, no. 1 (April 2011): 34-48. doi:10.1016/j.petrol.2011.02.006.
[1] Winning, H. and T. Coole. “Explicit Friction Factor Accuracy and Computational Efficiency for Turbulent Flow
in Pipes.” Flow, Turbulence and Combustion 90, no. 1 (January 1, 2013): 1-27. doi:10.1007/s10494-012-9419-7

Bibliography 637
Fluids Documentation, Release 1.0.21

[2] Fang, Xiande, Yu Xu, and Zhanru Zhou.”New Correlations of Single-Phase Friction Factor for Turbulent Pipe
Flow and Evaluation of Existing Single-Phase Friction Factor Correlations.” Nuclear Engineering and Design,
The International Conference on Structural Mechanics in Reactor Technology (SMiRT19) Special Section, 241,
no. 3 (March 2011): 897-902. doi:10.1016/j.nucengdes.2010.12.019.
[1] White, C. M. “Streamline Flow through Curved Pipes.” Proceedings of the Royal Society of London A: Mathe-
matical, Physical and Engineering Sciences 123, no. 792 (April 6, 1929): 645-63. doi:10.1098/rspa.1929.0089.
[2] El-Genk, Mohamed S., and Timothy M. Schriener. “A Review and Correlations for Convection Heat Transfer
and Pressure Losses in Toroidal and Helically Coiled Tubes.” Heat Transfer Engineering 0, no. 0 (June 7, 2016):
1-28. doi:10.1080/01457632.2016.1194693.
[3] Blevins, Robert D. Applied Fluid Dynamics Handbook. New York, N.Y.: Van Nostrand Reinhold Co., 1984.
[1] Mori, Yasuo, and Wataru Nakayama. “Study on Forced Convective Heat Transfer in Curved Pipes: 1st Re-
port, Laminar Region.” Transactions of the Japan Society of Mechanical Engineers 30, no. 216 (1964): 977-88.
doi:10.1299/kikai1938.30.977.
[2] El-Genk, Mohamed S., and Timothy M. Schriener. “A Review and Correlations for Convection Heat Transfer
and Pressure Losses in Toroidal and Helically Coiled Tubes.” Heat Transfer Engineering 0, no. 0 (June 7, 2016):
1-28. doi:10.1080/01457632.2016.1194693.
[3] Pimenta, T. A., and J. B. L. M. Campos. “Friction Losses of Newtonian and Non-Newtonian Fluids Flowing
in Laminar Regime in a Helical Coil.” Experimental Thermal and Fluid Science 36 (January 2012): 194-204.
doi:10.1016/j.expthermflusci.2011.09.013.
[1] Schmidt, Eckehard F. “Wärmeübergang Und Druckverlust in Rohrschlangen.” Chemie Ingenieur Technik 39, no.
13 (July 10, 1967): 781-89. doi:10.1002/cite.330391302.
[2] El-Genk, Mohamed S., and Timothy M. Schriener. “A Review and Correlations for Convection Heat Transfer
and Pressure Losses in Toroidal and Helically Coiled Tubes.” Heat Transfer Engineering 0, no. 0 (June 7, 2016):
1-28. doi:10.1080/01457632.2016.1194693.
[3] Pimenta, T. A., and J. B. L. M. Campos. “Friction Losses of Newtonian and Non-Newtonian Fluids Flowing
in Laminar Regime in a Helical Coil.” Experimental Thermal and Fluid Science 36 (January 2012): 194-204.
doi:10.1016/j.expthermflusci.2011.09.013.
[1] Schmidt, Eckehard F. “Wärmeübergang Und Druckverlust in Rohrschlangen.” Chemie Ingenieur Technik 39, no.
13 (July 10, 1967): 781-89. doi:10.1002/cite.330391302.
[2] El-Genk, Mohamed S., and Timothy M. Schriener. “A Review and Correlations for Convection Heat Transfer
and Pressure Losses in Toroidal and Helically Coiled Tubes.” Heat Transfer Engineering 0, no. 0 (June 7, 2016):
1-28. doi:10.1080/01457632.2016.1194693.
[1] Mori, Yasuo, and Wataru Nakayama. “Study of Forced Convective Heat Transfer in Curved Pipes (2nd Re-
port, Turbulent Region).” International Journal of Heat and Mass Transfer 10, no. 1 (January 1, 1967): 37-59.
doi:10.1016/0017-9310(67)90182-2.
[2] El-Genk, Mohamed S., and Timothy M. Schriener. “A Review and Correlations for Convection Heat Transfer
and Pressure Losses in Toroidal and Helically Coiled Tubes.” Heat Transfer Engineering 0, no. 0 (June 7, 2016):
1-28. doi:10.1080/01457632.2016.1194693.
[3] Ali, Shaukat. “Pressure Drop Correlations for Flow through Regular Helical Coil Tubes.” Fluid Dynamics Re-
search 28, no. 4 (April 2001): 295-310. doi:10.1016/S0169-5983(00)00034-4.
[1] Prasad, B. V. S. S. S., D. H. Das, and A. K. Prabhakar. “Pressure Drop, Heat Transfer and Performance of a
Helically Coiled Tubular Exchanger.” Heat Recovery Systems and CHP 9, no. 3 (January 1, 1989): 249-56.
doi:10.1016/0890-4332(89)90008-2.
[2] El-Genk, Mohamed S., and Timothy M. Schriener. “A Review and Correlations for Convection Heat Transfer
and Pressure Losses in Toroidal and Helically Coiled Tubes.” Heat Transfer Engineering 0, no. 0 (June 7, 2016):
1-28. doi:10.1080/01457632.2016.1194693.

638 Bibliography
Fluids Documentation, Release 1.0.21

[1] Czop, V., D. Barbier, and S. Dong. “Pressure Drop, Void Fraction and Shear Stress Measurements in an Adiabatic
Two-Phase Flow in a Coiled Tube.” Nuclear Engineering and Design 149, no. 1 (September 1, 1994): 323-33.
doi:10.1016/0029-5493(94)90298-4.
[2] El-Genk, Mohamed S., and Timothy M. Schriener. “A Review and Correlations for Convection Heat Transfer
and Pressure Losses in Toroidal and Helically Coiled Tubes.” Heat Transfer Engineering 0, no. 0 (June 7, 2016):
1-28. doi:10.1080/01457632.2016.1194693.
[1] Guo, Liejin, Ziping Feng, and Xuejun Chen. “An Experimental Investigation of the Frictional Pressure Drop
of Steam–water Two-Phase Flow in Helical Coils.” International Journal of Heat and Mass Transfer 44, no. 14
(July 2001): 2601-10. doi:10.1016/S0017-9310(00)00312-4.
[2] El-Genk, Mohamed S., and Timothy M. Schriener. “A Review and Correlations for Convection Heat Transfer
and Pressure Losses in Toroidal and Helically Coiled Tubes.” Heat Transfer Engineering 0, no. 0 (June 7, 2016):
1-28. doi:10.1080/01457632.2016.1194693.
[1] Ju, Huaiming, Zhiyong Huang, Yuanhui Xu, Bing Duan, and Yu Yu. “Hydraulic Performance of Small Bending
Radius Helical Coil-Pipe.” Journal of Nuclear Science and Technology 38, no. 10 (October 1, 2001): 826-31.
doi:10.1080/18811248.2001.9715102.
[2] El-Genk, Mohamed S., and Timothy M. Schriener. “A Review and Correlations for Convection Heat Transfer
and Pressure Losses in Toroidal and Helically Coiled Tubes.” Heat Transfer Engineering 0, no. 0 (June 7, 2016):
1-28. doi:10.1080/01457632.2016.1194693.
[1] Srinivasan, PS, SS Nandapurkar, and FA Holland. “Friction Factors for Coils.” TRANSACTIONS OF THE
INSTITUTION OF CHEMICAL ENGINEERS AND THE CHEMICAL ENGINEER 48, no. 4-6 (1970): T156
[2] Blevins, Robert D. Applied Fluid Dynamics Handbook. New York, N.Y.: Van Nostrand Reinhold Co., 1984.
[3] Rohsenow, Warren and James Hartnett and Young Cho. Handbook of Heat Transfer, 3E. New York: McGraw-
Hill, 1998.
[1] Mandal, Monisha Mridha, and K. D. P. Nigam. “Experimental Study on Pressure Drop and Heat Transfer of
Turbulent Flow in Tube in Tube Helical Heat Exchanger.” Industrial & Engineering Chemistry Research 48, no.
20 (October 21, 2009): 9318-24. doi:10.1021/ie9002393.
[2] El-Genk, Mohamed S., and Timothy M. Schriener. “A Review and Correlations for Convection Heat Transfer
and Pressure Losses in Toroidal and Helically Coiled Tubes.” Heat Transfer Engineering 0, no. 0 (June 7, 2016):
1-28. doi:10.1080/01457632.2016.1194693.
[1] Seth, K. K., and E. P. Stahel. “HEAT TRANSFER FROM HELICAL COILS IMMERSED IN AGITATED
VESSELS.” Industrial & Engineering Chemistry 61, no. 6 (June 1, 1969): 39-49. doi:10.1021/ie50714a007.
[1] H. Ito. “Friction factors for turbulent flow in curved pipes.” Journal Basic Engineering, Transactions of the
ASME, 81 (1959): 123-134.
[2] El-Genk, Mohamed S., and Timothy M. Schriener. “A Review and Correlations for Convection Heat Transfer
and Pressure Losses in Toroidal and Helically Coiled Tubes.” Heat Transfer Engineering 0, no. 0 (June 7, 2016):
1-28. doi:10.1080/01457632.2016.1194693.
[3] Mori, Yasuo, and Wataru Nakayama. “Study on Forced Convective Heat Transfer in Curved Pipes.” International
Journal of Heat and Mass Transfer 10, no. 5 (May 1, 1967): 681-95. doi:10.1016/0017-9310(67)90113-5.
[1] Kubair, Venugopala, and N. R. Kuloor. “Heat Transfer to Newtonian Fluids in Coiled Pipes in Laminar
Flow.” International Journal of Heat and Mass Transfer 9, no. 1 (January 1, 1966): 63-75. doi:10.1016/0017-
9310(66)90057-3.
[2] El-Genk, Mohamed S., and Timothy M. Schriener. “A Review and Correlations for Convection Heat Transfer
and Pressure Losses in Toroidal and Helically Coiled Tubes.” Heat Transfer Engineering 0, no. 0 (June 7, 2016):
1-28. doi:10.1080/01457632.2016.1194693.

Bibliography 639
Fluids Documentation, Release 1.0.21

[1] Kutateladze, S. S, and V. M Borishanskiı̆. A Concise Encyclopedia of Heat Transfer. Oxford; New York: Perg-
amon Press, 1966.
[2] El-Genk, Mohamed S., and Timothy M. Schriener. “A Review and Correlations for Convection Heat Transfer
and Pressure Losses in Toroidal and Helically Coiled Tubes.” Heat Transfer Engineering 0, no. 0 (June 7, 2016):
1-28. doi:10.1080/01457632.2016.1194693.
[1] Schmidt, Eckehard F. “Wärmeübergang Und Druckverlust in Rohrschlangen.” Chemie Ingenieur Technik 39, no.
13 (July 10, 1967): 781-89. doi:10.1002/cite.330391302.
[2] El-Genk, Mohamed S., and Timothy M. Schriener. “A Review and Correlations for Convection Heat Transfer
and Pressure Losses in Toroidal and Helically Coiled Tubes.” Heat Transfer Engineering 0, no. 0 (June 7, 2016):
1-28. doi:10.1080/01457632.2016.1194693.
[3] Schlunder, Ernst U, and International Center for Heat and Mass Transfer. Heat Exchanger Design Handbook.
Washington: Hemisphere Pub. Corp., 1983.
[1] Srinivasan, P. S., Nandapurkar, S. S., and Holland, F. A., “Pressure Drop and Heat Transfer in Coils”, Chemical
Engineering, 218, CE131-119, (1968).
[2] El-Genk, Mohamed S., and Timothy M. Schriener. “A Review and Correlations for Convection Heat Transfer
and Pressure Losses in Toroidal and Helically Coiled Tubes.” Heat Transfer Engineering 0, no. 0 (June 7, 2016):
1-28. doi:10.1080/01457632.2016.1194693.
[3] Rohsenow, Warren and James Hartnett and Young Cho. Handbook of Heat Transfer, 3E. New York: McGraw-
Hill, 1998.
[1] Martin, Holger. “Economic optimization of compact heat exchangers.” EF-Conference on Compact Heat Ex-
changers and Enhancement Technology for the Process Industries, Banff, Canada, July 18-23, 1999, 1999.
https://publikationen.bibliothek.kit.edu/1000034866.
[2] Martin, Holger. “A Theoretical Approach to Predict the Performance of Chevron-Type Plate Heat Exchangers.”
Chemical Engineering and Processing: Process Intensification 35, no. 4 (January 1, 1996): 301-10. https://doi.
org/10.1016/0255-2701(95)04129-X.
[3] Shah, Ramesh K., and Dusan P. Sekulic. Fundamentals of Heat Exchanger Design. 1st edition. Hoboken, NJ:
Wiley, 2002.
[1] Gesellschaft, V. D. I., ed. VDI Heat Atlas. 2nd edition. Berlin; New York:: Springer, 2010.
[1] Kumar, H. “The plate heat exchanger: construction and design.” In First U.K. National Conference on Heat
Transfer: Held at the University of Leeds, 3-5 July 1984, Institute of Chemical Engineering Symposium Series,
vol. 86, pp. 1275-1288. 1984.
[2] Ayub, Zahid H. “Plate Heat Exchanger Literature Survey and New Heat Transfer and Pressure Drop Cor-
relations for Refrigerant Evaporators.” Heat Transfer Engineering 24, no. 5 (September 1, 2003): 3-16.
doi:10.1080/01457630304056.
[1] Muley, A., and R. M. Manglik. “Experimental Study of Turbulent Flow Heat Transfer and Pressure Drop in a
Plate Heat Exchanger With Chevron Plates.” Journal of Heat Transfer 121, no. 1 (February 1, 1999): 110-17.
doi:10.1115/1.2825923.
[2] Ayub, Zahid H. “Plate Heat Exchanger Literature Survey and New Heat Transfer and Pressure Drop Cor-
relations for Refrigerant Evaporators.” Heat Transfer Engineering 24, no. 5 (September 1, 2003): 3-16.
doi:10.1080/01457630304056.
[1] Idelchik, I. E, and A. S Ginevskiı̆. Handbook of Hydraulic Resistance. Redding, CT: Begell House, 2007.
[2] Farshad, Fred F., and Herman H. Rieke. “Surface Roughness Design Values for Modern Pipes.” SPE Drilling &
Completion 21, no. 3 (September 1, 2006): 212-215. doi:10.2118/89040-PA.
[1] Idelchik, I. E, and A. S Ginevskiı̆. Handbook of Hydraulic Resistance. Redding, CT: Begell House, 2007.

640 Bibliography
Fluids Documentation, Release 1.0.21

[1] Farshad, Fred F., and Herman H. Rieke. “Surface Roughness Design Values for Modern Pipes.” SPE Drilling &
Completion 21, no. 3 (September 1, 2006): 212-215. doi:10.2118/89040-PA.
[1] Crane Co. Flow of Fluids Through Valves, Fittings, and Pipe. Crane, 2009.
[1] Shoham, Ovadia. Mechanistic Modeling of Gas-Liquid Two-Phase Flow in Pipes. Pap/Cdr edition. Richardson,
TX: Society of Petroleum Engineers, 2006.
[1] Menon, E. Shashi. Gas Pipeline Hydraulics. 1st edition. Boca Raton, FL: CRC Press, 2005.
[1] Jones, D. “Compute Fluid Volumes in Vertical Tanks.” Chemical Processing. December 18, 2003. http://www.
chemicalprocessing.com/articles/2003/193/
[1] Jones, D. “Calculating Tank Wetted Area.” Text. Chemical Processing. April 2017. https://www.
chemicalprocessing.com/assets/Uploads/calculating-tank-wetted-area.pdf http://www.chemicalprocessing.
com/articles/2003/193/
[1] El-Genk, Mohamed S., and Timothy M. Schriener. “A Review and Correlations for Convection Heat Transfer
and Pressure Losses in Toroidal and Helically Coiled Tubes.” Heat Transfer Engineering 0, no. 0 (June 7, 2016):
1-28. doi:10.1080/01457632.2016.1194693.
[1] Amalfi, Raffaele L., Farzad Vakili-Farahani, and John R. Thome. “Flow Boiling and Frictional Pressure Gradi-
ents in Plate Heat Exchangers. Part 1: Review and Experimental Database.” International Journal of Refrigera-
tion 61 (January 2016): 166-84. doi:10.1016/j.ijrefrig.2015.07.010.
[1] Schlunder, Ernst U, and International Center for Heat and Mass Transfer. Heat Exchanger Design Handbook.
Washington: Hemisphere Pub. Corp., 1983.
[1] Chen, W. F., and E. M. Lui, eds. Handbook of Structural Engineering, Second Edition. Boca Raton, Fla: CRC
Press, 2005.
[2] Ansary, A. M. El, A. A. El Damatty, and A. O. Nassef. Optimum Shape and Design of Cooling Towers, 2011.
[1] Yang, Yujie, and Yanzhong Li. “General Prediction of the Thermal Hydraulic Performance for Plate-Fin Heat
Exchanger with Offset Strip Fins.” International Journal of Heat and Mass Transfer 78 (November 1, 2014):
860-70. doi:10.1016/j.ijheatmasstransfer.2014.07.060.
[2] Sheik Ismail, L., R. Velraj, and C. Ranganayakulu. “Studies on Pumping Power in Terms of Pressure Drop and
Heat Transfer Characteristics of Compact Plate-Fin Heat Exchangers-A Review.” Renewable and Sustainable
Energy Reviews 14, no. 1 (January 2010): 478-85. doi:10.1016/j.rser.2009.06.033.
[1] Weisstein, Eric W. “Spherical Cap.” Text. Accessed December 22, 2015. http://mathworld.wolfram.com/
SphericalCap.html.
[1] Jones, D. “Calculating Tank Volume.” Text. Accessed December 22, 2015. http://www.webcalc.com.br/blog/
Tank_Volume.PDF
[1] Jones, D. “Calculating Tank Volume.” Text. Accessed December 22, 2015. http://www.webcalc.com.br/blog/
Tank_Volume.PDF
[1] Jones, D. “Calculating Tank Volume.” Text. Accessed December 22, 2015. http://www.webcalc.com.br/blog/
Tank_Volume.PDF
[1] Jones, D. “Calculating Tank Volume.” Text. Accessed December 22, 2015. http://www.webcalc.com.br/blog/
Tank_Volume.PDF
[1] Jones, D. “Calculating Tank Volume.” Text. Accessed December 22, 2015. http://www.webcalc.com.br/blog/
Tank_Volume.PDF
[1] Jones, D. “Calculating Tank Volume.” Text. Accessed December 22, 2015. http://www.webcalc.com.br/blog/
Tank_Volume.PDF
[1] Jones, D. “Calculating Tank Volume.” Text. Accessed December 22, 2015. http://www.webcalc.com.br/blog/
Tank_Volume.PDF

Bibliography 641
Fluids Documentation, Release 1.0.21

[1] Jones, D. “Calculating Tank Volume.” Text. Accessed December 22, 2015. http://www.webcalc.com.br/blog/
Tank_Volume.PDF
[1] Jones, D. “Calculating Tank Volume.” Text. Accessed December 22, 2015. http://www.webcalc.com.br/blog/
Tank_Volume.PDF
[1] Jones, D. “Compute Fluid Volumes in Vertical Tanks.” Chemical Processing. December 18, 2003. http://www.
chemicalprocessing.com/articles/2003/193/
[1] Jones, D. “Compute Fluid Volumes in Vertical Tanks.” Chemical Processing. December 18, 2003. http://www.
chemicalprocessing.com/articles/2003/193/
[1] Jones, D. “Compute Fluid Volumes in Vertical Tanks.” Chemical Processing. December 18, 2003. http://www.
chemicalprocessing.com/articles/2003/193/
[1] Jones, D. “Compute Fluid Volumes in Vertical Tanks.” Chemical Processing. December 18, 2003. http://www.
chemicalprocessing.com/articles/2003/193/
[1] Weisstein, Eric W. “Spherical Cap.” Text. Accessed December 22, 2015. http://mathworld.wolfram.com/
SphericalCap.html.
[1] Weisstein, Eric W. “Spheroid.” Text. Accessed March 14, 2016. http://mathworld.wolfram.com/Spheroid.html.
[2] Jones, D. “Calculating Tank Wetted Area.” Text. Chemical Processing. April 2017. https://www.
chemicalprocessing.com/assets/Uploads/calculating-tank-wetted-area.pdf
[1] Weisstein, Eric W. “Cone.” Text. Accessed March 14, 2016. http://mathworld.wolfram.com/Cone.html.
[1] Weisstein, Eric W. “Cone.” Text. Accessed March 14, 2016. http://mathworld.wolfram.com/Cone.html.
[1] Honeywell. “Calculate Surface Areas and Cross-sectional Areas in Vessels with Dished Heads”. https://www.
honeywellprocess.com/library/marketing/whitepapers/WP-VesselsWithDishedHeads-UniSimDesign.pdf
Whitepaper. 2014.
[1] Weisstein, Eric W. “Circular Segment.” Text. Wolfram Research, Inc. Accessed May 10, 2020. https://mathworld.
wolfram.com/CircularSegment.html.
[1] Jones, D. “Calculating Tank Wetted Area.” Text. Chemical Processing. April 2017. https://www.
chemicalprocessing.com/assets/Uploads/calculating-tank-wetted-area.pdf
[1] Jones, D. “Calculating Tank Wetted Area.” Text. Chemical Processing. April 2017. https://www.
chemicalprocessing.com/assets/Uploads/calculating-tank-wetted-area.pdf
[1] Jones, D. “Calculating Tank Wetted Area.” Text. Chemical Processing. April 2017. https://www.
chemicalprocessing.com/assets/Uploads/calculating-tank-wetted-area.pdf
[1] Jones, D. “Calculating Tank Wetted Area.” Text. Chemical Processing. April 2017. https://www.
chemicalprocessing.com/assets/Uploads/calculating-tank-wetted-area.pdf
[1] Jones, D. “Calculating Tank Wetted Area.” Text. Chemical Processing. April 2017. https://www.
chemicalprocessing.com/assets/Uploads/calculating-tank-wetted-area.pdf
[1] Jones, D. “Calculating Tank Wetted Area.” Text. Chemical Processing. April 2017. https://www.
chemicalprocessing.com/assets/Uploads/calculating-tank-wetted-area.pdf
[1] Jones, D. “Calculating Tank Wetted Area.” Text. Chemical Processing. April 2017. https://www.
chemicalprocessing.com/assets/Uploads/calculating-tank-wetted-area.pdf
[1] Jones, D. “Calculating Tank Wetted Area.” Text. Chemical Processing. April 2017. https://www.
chemicalprocessing.com/assets/Uploads/calculating-tank-wetted-area.pdf
[1] Jones, D. “Calculating Tank Wetted Area.” Text. Chemical Processing. April 2017. https://www.
chemicalprocessing.com/assets/Uploads/calculating-tank-wetted-area.pdf

642 Bibliography
Fluids Documentation, Release 1.0.21

[1] Schlunder, Ernst U, and International Center for Heat and Mass Transfer. Heat Exchanger Design Handbook.
Washington: Hemisphere Pub. Corp., 1983.
[1] Jones, D. “Calculating Tank Volume.” Text. Accessed December 22, 2015. http://www.webcalc.com.br/blog/
Tank_Volume.PDF
[1] Weisstein, Eric W. “Circular Segment.” Text. Wolfram Research, Inc. Accessed May 10, 2020. https://mathworld.
wolfram.com/CircularSegment.html.
[1] Weisstein, Eric W. “Circular Segment.” Text. Wolfram Research, Inc. Accessed May 10, 2020. https://mathworld.
wolfram.com/CircularSegment.html.
[1] Rhodes, Martin J., ed. Introduction to Particle Technology. 2E. Chichester, England; Hoboken, NJ: Wiley, 2008.
[2] “Sphericity.” Wikipedia, March 8, 2017. https://en.wikipedia.org/w/index.php?title=Sphericity&oldid=
769183043
[1] Karassik, Igor J., Joseph P. Messina, Paul Cooper, and Charles C. Heald. Pump Handbook. 4th edition. New
York: McGraw-Hill Education, 2007.
[2] Winoto S. H., Li H., and Shah D. A. “Efficiency of Jet Pumps.” Journal of Hydraulic Engineering 126, no. 2
(February 1, 2000): 150-56. https://doi.org/10.1061/(ASCE)0733-9429(2000)126:2(150).
[3] Elmore, Emily, Khalid Al-Mutairi, Bilal Hussain, and A. Sheriff El-Gizawy. “Development of Analytical Model
for Predicting Dual-Phase Ejector Performance,” November 11, 2016, V007T09A013.
[4] Ejectors and Jet Pumps. Design and Performance for Incompressible Liquid Flow. 85032. ESDU International
PLC, 1985.
[1] Ejectors and Jet Pumps. Design and Performance for Incompressible Liquid Flow. 85032. ESDU International
PLC, 1985.
[1] “Standards for Steam Jet Vacuum Systems”, 5th Edition
[1] Ryans, J. L. and Croll, S. “Selecting Vacuum Systems,” 1981.
[2] Coker, Kayode. Ludwig’s Applied Process Design for Chemical and Petrochemical Plants. 4 edition. Amsterdam;
Boston: Gulf Professional Publishing, 2007.
[3] Govoni, Patrick. “An Overview of Vacuum System Design” Chemical Engineering Magazine, September 2017.
[1] Coker, Kayode. Ludwig’s Applied Process Design for Chemical and Petrochemical Plants. 4 edition. Amsterdam;
Boston: Gulf Professional Publishing, 2007.
[1] Seider, Warren D., J. D. Seader, and Daniel R. Lewin. Product and Process Design Principles: Synthesis, Anal-
ysis, and Evaluation. 2nd edition. New York: Wiley, 2003.
[1] Paul, Edward L, Victor A Atiemo-Obeng, and Suzanne M Kresta. Handbook of Industrial Mixing: Science and
Practice. Hoboken, N.J.: Wiley-Interscience, 2004.
[2] Giorges, Aklilu T. G., Larry J. Forney, and Xiaodong Wang. “Numerical Study of Multi-Jet Mixing.” Chemical
Engineering Research and Design, Fluid Flow, 79, no. 5 (July 2001): 515-22. doi:10.1205/02638760152424280.
[1] Paul, Edward L, Victor A Atiemo-Obeng, and Suzanne M Kresta. Handbook of Industrial Mixing: Science and
Practice. Hoboken, N.J.: Wiley-Interscience, 2004.
[2] Streiff, F. A., S. Jaffer, and G. Schneider (1999). Design and application of motionless mixer technology, Proc.
ISMIP3, Osaka, pp. 107-114.
[1] Paul, Edward L, Victor A Atiemo-Obeng, and Suzanne M Kresta. Handbook of Industrial Mixing: Science and
Practice. Hoboken, N.J.: Wiley-Interscience, 2004.
[2] Streiff, F. A., S. Jaffer, and G. Schneider (1999). Design and application of motionless mixer technology, Proc.
ISMIP3, Osaka, pp. 107-114.

Bibliography 643
Fluids Documentation, Release 1.0.21

[1] Paul, Edward L, Victor A Atiemo-Obeng, and Suzanne M Kresta. Handbook of Industrial Mixing: Science and
Practice. Hoboken, N.J.: Wiley-Interscience, 2004.
[1] Paul, Edward L, Victor A Atiemo-Obeng, and Suzanne M Kresta. Handbook of Industrial Mixing: Science and
Practice. Hoboken, N.J.: Wiley-Interscience, 2004.
[2] Rieger, F., V. Novak, and D. Havelkov (1988). The influence of the geometrical shape on the power requirements
of ribbon impellers, Int. Chem. Eng., 28, 376-383.
[1] Paul, Edward L, Victor A Atiemo-Obeng, and Suzanne M Kresta. Handbook of Industrial Mixing: Science and
Practice. Hoboken, N.J.: Wiley-Interscience, 2004.
[2] Grenville, R. K., T. M. Hutchinson, and R. W. Higbee (2001). Optimisation of helical ribbon geometry for
blending in the laminar regime, presented at MIXING XVIII, NAMF.
[1] Shen, John. “Discharge Characteristics of Triangular-Notch Thin-Plate Weirs: Studies of Flow to Water over
Weirs and Dams.” USGS Numbered Series. Water Supply Paper. U.S. Geological Survey: U.S. G.P.O., 1981
[2] Blevins, Robert D. Applied Fluid Dynamics Handbook. New York, N.Y.: Van Nostrand Reinhold Co., 1984.
[1] Kindsvater, Carl E., and Rolland W. Carter. “Discharge Characteristics of Rectangular Thin-Plate Weirs.” Journal
of the Hydraulics Division 83, no. 6 (December 1957): 1-36.
[2] Blevins, Robert D. Applied Fluid Dynamics Handbook. New York, N.Y.: Van Nostrand Reinhold Co., 1984.
[1] Normen für Wassermessungen: bei Durchführung von Abnahmeversuchen an Wasserkraftmaschinen. SIA,
1924.
[2] Blevins, Robert D. Applied Fluid Dynamics Handbook. New York, N.Y.: Van Nostrand Reinhold Co., 1984.
[1] Ackers, Peter, W. R. White, J. A. Perkins, and A. J. M. Harrison. Weirs and Flumes for Flow Measurement.
Chichester; New York: John Wiley & Sons Ltd, 1978.
[2] Blevins, Robert D. Applied Fluid Dynamics Handbook. New York, N.Y.: Van Nostrand Reinhold Co., 1984.
[3] Cengel, Yunus, and John Cimbala. Fluid Mechanics: Fundamentals and Applications. Boston: McGraw Hill
Higher Education, 2006.
[1] Normen für Wassermessungen: bei Durchführung von Abnahmeversuchen an Wasserkraftmaschinen. SIA,
1924.
[2] Blevins, Robert D. Applied Fluid Dynamics Handbook. New York, N.Y.: Van Nostrand Reinhold Co., 1984.
[1] King, H. W., Floyd A. Nagler, A. Streiff, R. L. Parshall, W. S. Pardoe, R. E. Ballester, Gardner S. Williams, Th
Rehbock, Erik G. W. Lindquist, and Clemens Herschel. “Discussion of ‘Precise Weir Measurements.’” Trans-
actions of the American Society of Civil Engineers 93, no. 1 (January 1929): 1111-78.
[2] Blevins, Robert D. Applied Fluid Dynamics Handbook. New York, N.Y.: Van Nostrand Reinhold Co., 1984.
[1] Kindsvater, Carl E., and Rolland W. Carter. “Discharge Characteristics of Rectangular Thin-Plate Weirs.” Journal
of the Hydraulics Division 83, no. 6 (December 1957): 1-36.
[2] Blevins, Robert D. Applied Fluid Dynamics Handbook. New York, N.Y.: Van Nostrand Reinhold Co., 1984.
[1] Blevins, Robert D. Applied Fluid Dynamics Handbook. New York, N.Y.: Van Nostrand Reinhold Co., 1984.
[2] Cengel, Yunus, and John Cimbala. Fluid Mechanics: Fundamentals and Applications. Boston: McGraw Hill
Higher Education, 2006.
[1] Blevins, Robert D. Applied Fluid Dynamics Handbook. New York, N.Y.: Van Nostrand Reinhold Co., 1984.
[2] Cengel, Yunus, and John Cimbala. Fluid Mechanics: Fundamentals and Applications. Boston: McGraw Hill
Higher Education, 2006.
[3] Chow, Ven Te. Open-Channel Hydraulics. New York: McGraw-Hill, 1959.

644 Bibliography
Fluids Documentation, Release 1.0.21

[1] Chow, Ven Te. Open-Channel Hydraulics. New York: McGraw-Hill, 1959.
[1] Chow, Ven Te. Open-Channel Hydraulics. New York: McGraw-Hill, 1959.
[1] Ergun, S. (1952) “Fluid flow through packed columns”, Chem. Eng. Prog., 48, 89-94.
[2] Erdim, Esra, Ömer Akgiray, and İbrahim Demir. “A Revisit of Pressure Drop-Flow Rate Correlations for Packed
Beds of Spheres.” Powder Technology 283 (October 2015): 488-504. doi:10.1016/j.powtec.2015.06.017.
[3] Jones, D. P., and H. Krier. “Gas Flow Resistance Measurements Through Packed Beds at High Reynolds Num-
bers.” Journal of Fluids Engineering 105, no. 2 (June 1, 1983): 168-172. doi:10.1115/1.3240959.
[1] Kuo, K. K. and Nydegger, C., “Flow Resistance Measurement and Correlation in Packed Beds of WC 870 Ball
Propellants,” Journal of Ballistics , Vol. 2, No. 1, pp. 1-26, 1978.
[2] Erdim, Esra, Ömer Akgiray, and İbrahim Demir. “A Revisit of Pressure Drop-Flow Rate Correlations for Packed
Beds of Spheres.” Powder Technology 283 (October 2015): 488-504. doi:10.1016/j.powtec.2015.06.017.
[3] Jones, D. P., and H. Krier. “Gas Flow Resistance Measurements Through Packed Beds at High Reynolds Num-
bers.” Journal of Fluids Engineering 105, no. 2 (June 1, 1983): 168-172. doi:10.1115/1.3240959.
[1] Jones, D. P., and H. Krier. “Gas Flow Resistance Measurements Through Packed Beds at High Reynolds Num-
bers.” Journal of Fluids Engineering 105, no. 2 (June 1, 1983): 168-172. doi:10.1115/1.3240959.
[2] Erdim, Esra, Ömer Akgiray, and İbrahim Demir. “A Revisit of Pressure Drop-Flow Rate Correlations for Packed
Beds of Spheres.” Powder Technology 283 (October 2015): 488-504. doi:10.1016/j.powtec.2015.06.017.
[1] P.C. Carman, Fluid flow through granular beds, Transactions of the London Institute of Chemical Engineers 15
(1937) 150-166.
[2] Erdim, Esra, Ömer Akgiray, and İbrahim Demir. “A Revisit of Pressure Drop-Flow Rate Correlations for Packed
Beds of Spheres.” Powder Technology 283 (October 2015): 488-504. doi:10.1016/j.powtec.2015.06.017.
[3] Allen, K. G., T. W. von Backstrom, and D. G. Kroger. “Packed Bed Pressure Drop Dependence on Particle Shape,
Size Distribution, Packing Arrangement and Roughness.” Powder Technology 246 (September 2013): 590-600.
doi:10.1016/j.powtec.2013.06.022.
[1] Hicks, R. E. “Pressure Drop in Packed Beds of Spheres.” Industrial Engineering Chemistry Fundamentals 9, no.
3 (August 1, 1970): 500-502. doi:10.1021/i160035a032.
[2] Erdim, Esra, Ömer Akgiray, and İbrahim Demir. “A Revisit of Pressure Drop-Flow Rate Correlations for Packed
Beds of Spheres.” Powder Technology 283 (October 2015): 488-504. doi:10.1016/j.powtec.2015.06.017.
[3] Allen, K. G., T. W. von Backstrom, and D. G. Kroger. “Packed Bed Pressure Drop Dependence on Particle Shape,
Size Distribution, Packing Arrangement and Roughness.” Powder Technology 246 (September 2013): 590-600.
doi:10.1016/j.powtec.2013.06.022.
[1] H. Brauer, Grundlagen der Einphasen -und Mehrphasenstromungen, Sauerlander AG, Aarau, 1971.
[2] Erdim, Esra, Ömer Akgiray, and İbrahim Demir. “A Revisit of Pressure Drop-Flow Rate Correlations for Packed
Beds of Spheres.” Powder Technology 283 (October 2015): 488-504. doi:10.1016/j.powtec.2015.06.017.
[3] Allen, K. G., T. W. von Backstrom, and D. G. Kroger. “Packed Bed Pressure Drop Dependence on Particle Shape,
Size Distribution, Packing Arrangement and Roughness.” Powder Technology 246 (September 2013): 590-600.
doi:10.1016/j.powtec.2013.06.022.
[1] KTA. KTA 3102.3 Reactor Core Design of High-Temperature Gas-Cooled Reactors Part 3: Loss of Pressure
through Friction in Pebble Bed Cores. Germany, 1981.
[2] Erdim, Esra, Ömer Akgiray, and İbrahim Demir. “A Revisit of Pressure Drop-Flow Rate Correlations for Packed
Beds of Spheres.” Powder Technology 283 (October 2015): 488-504. doi:10.1016/j.powtec.2015.06.017.
[1] Erdim, Esra, Ömer Akgiray, and İbrahim Demir. “A Revisit of Pressure Drop-Flow Rate Correlations for Packed
Beds of Spheres.” Powder Technology 283 (October 2015): 488-504. doi:10.1016/j.powtec.2015.06.017.

Bibliography 645
Fluids Documentation, Release 1.0.21

[1] R.W. Fahien, C.B. Schriver, Paper presented at the 1961 Denver meeting of AIChE, in: R.W. Fahien, Funda-
mentals of Transport Phenomena, McGraw-Hill, New York, 1983.
[2] Erdim, Esra, Ömer Akgiray, and İbrahim Demir. “A Revisit of Pressure Drop-Flow Rate Correlations for Packed
Beds of Spheres.” Powder Technology 283 (October 2015): 488-504. doi:10.1016/j.powtec.2015.06.017.
[1] Tallmadge, J. A. “Packed Bed Pressure Drop-an Extension to Higher Reynolds Numbers.” AIChE Journal 16,
no. 6 (November 1, 1970): 1092-93.
[2] Erdim, Esra, Ömer Akgiray, and İbrahim Demir. “A Revisit of Pressure Drop-Flow Rate Correlations for Packed
Beds of Spheres.” Powder Technology 283 (October 2015): 488-504. doi:10.1016/j.powtec.2015.06.017.
[3] Montillet, A., E. Akkari, and J. Comiti. “About a Correlating Equation for Predicting Pressure Drops through
Packed Beds of Spheres in a Large Range of Reynolds Numbers.” Chemical Engineering and Processing: Process
Intensification 46, no. 4 (April 2007): 329-33. doi:10.1016/j.cep.2006.07.002.
[1] Idelchik, I. E. Flow Resistance: A Design Guide for Engineers. Hemisphere Publishing Corporation, New York,
1989.
[2] Allen, K. G., T. W. von Backstrom, and D. G. Kroger. “Packed Bed Pressure Drop Dependence on Particle Shape,
Size Distribution, Packing Arrangement and Roughness.” Powder Technology 246 (September 2013): 590-600.
doi:10.1016/j.powtec.2013.06.022.
[1] KTA. KTA 3102.3 Reactor Core Design of High-Temperature Gas-Cooled Reactors Part 3: Loss of Pressure
through Friction in Pebble Bed Cores. Germany, 1981.
[2] Erdim, Esra, Ömer Akgiray, and İbrahim Demir. “A Revisit of Pressure Drop-Flow Rate Correlations for Packed
Beds of Spheres.” Powder Technology 283 (October 2015): 488-504. doi:10.1016/j.powtec.2015.06.017.
[1] Montillet, A., E. Akkari, and J. Comiti. “About a Correlating Equation for Predicting Pressure Drops through
Packed Beds of Spheres in a Large Range of Reynolds Numbers.” Chemical Engineering and Processing: Process
Intensification 46, no. 4 (April 2007): 329-33. doi:10.1016/j.cep.2006.07.002.
[2] Allen, K. G., T. W. von Backstrom, and D. G. Kroger. “Packed Bed Pressure Drop Dependence on Particle Shape,
Size Distribution, Packing Arrangement and Roughness.” Powder Technology 246 (September 2013): 590-600.
doi:10.1016/j.powtec.2013.06.022.
[1] Guo, Zehua, Zhongning Sun, Nan Zhang, Ming Ding, and Jiaqing Liu. “Pressure Drop in Slender
Packed Beds with Novel Packing Arrangement.” Powder Technology 321 (November 2017): 286-92.
doi:10.1016/j.powtec.2017.08.024.
[1] Benyahia, F., and K. E. O’Neill. “Enhanced Voidage Correlations for Packed Beds of Various Particle Shapes and
Sizes.” Particulate Science and Technology 23, no. 2 (April 1, 2005): 169-77. doi:10.1080/02726350590922242.
[1] Benyahia, F., and K. E. O’Neill. “Enhanced Voidage Correlations for Packed Beds of Various Particle Shapes and
Sizes.” Particulate Science and Technology 23, no. 2 (April 1, 2005): 169-77. doi:10.1080/02726350590922242.
[1] Benyahia, F., and K. E. O’Neill. “Enhanced Voidage Correlations for Packed Beds of Various Particle Shapes and
Sizes.” Particulate Science and Technology 23, no. 2 (April 1, 2005): 169-77. doi:10.1080/02726350590922242.
[1] Robbins [Chem. Eng. Progr., p. 87 (May 1991) Improved Pressure Drop Prediction with a New Correlation.
[1] Stichlmair, J., J. L. Bravo, and J. R. Fair. “General Model for Prediction of Pressure Drop and Capacity of
Countercurrent Gas/liquid Packed Columns.” Gas Separation & Purification 3, no. 1 (March 1989): 19-28.
doi:10.1016/0950-4214(89)80016-7.
[1] Stichlmair, J., J. L. Bravo, and J. R. Fair. “General Model for Prediction of Pressure Drop and Capacity of
Countercurrent Gas/liquid Packed Columns.” Gas Separation & Purification 3, no. 1 (March 1989): 19-28.
doi:10.1016/0950-4214(89)80016-7.
[2] Piche, Simon R., Faical Larachi, and Bernard P. A. Grandjean. “Improving the Prediction of Irrigated Pressure
Drop in Packed Absorption Towers.” The Canadian Journal of Chemical Engineering 79, no. 4 (August 1, 2001):
584-94. doi:10.1002/cjce.5450790417.

646 Bibliography
Fluids Documentation, Release 1.0.21

[1] Stichlmair, J., J. L. Bravo, and J. R. Fair. “General Model for Prediction of Pressure Drop and Capacity of
Countercurrent Gas/liquid Packed Columns.” Gas Separation & Purification 3, no. 1 (March 1989): 19-28.
doi:10.1016/0950-4214(89)80016-7.
[1] Setekleiv, A. Eddie, and Hallvard F. Svendsen. “Dry Pressure Drop in Spiral Wound Wire Mesh Pads
at Low and Elevated Pressures.” Chemical Engineering Research and Design 109 (May 2016): 141-149.
doi:10.1016/j.cherd.2016.01.019.
[1] Setekleiv, A. Eddie, and Hallvard F. Svendsen. “Dry Pressure Drop in Spiral Wound Wire Mesh Pads
at Low and Elevated Pressures.” Chemical Engineering Research and Design 109 (May 2016): 141-149.
doi:10.1016/j.cherd.2016.01.019.
[1] El-Dessouky, Hisham T, Imad M Alatiqi, Hisham M Ettouney, and Noura S Al-Deffeeri. “Performance of Wire
Mesh Mist Eliminator.” Chemical Engineering and Processing: Process Intensification 39, no. 2 (March 2000):
129-39. doi:10.1016/S0255-2701(99)00033-1.
[1] El-Dessouky, Hisham T, Imad M Alatiqi, Hisham M Ettouney, and Noura S Al-Deffeeri. “Performance of Wire
Mesh Mist Eliminator.” Chemical Engineering and Processing: Process Intensification 39, no. 2 (March 2000):
129-39. doi:10.1016/S0255-2701(99)00033-1.
[1] Helsør, T., and H. Svendsen. “Experimental Characterization of Pressure Drop in Dry Demisters at
Low and Elevated Pressures.” Chemical Engineering Research and Design 85, no. 3 (2007): 377-85.
doi:10.1205/cherd06048.
[1] Helsør, T., and H. Svendsen. “Experimental Characterization of Pressure Drop in Dry Demisters at
Low and Elevated Pressures.” Chemical Engineering Research and Design 85, no. 3 (2007): 377-85.
doi:10.1205/cherd06048.
[1] ISO 9276-2:2014 - Representation of Results of Particle Size Analysis - Part 2: Calculation of Average Particle
Sizes/Diameters and Moments from Particle Size Distributions.
[1] ASTM E11 - 17 - Standard Specification for Woven Wire Test Sieve Cloth and Test Sieves.
[2] ISO 3310-1:2016 - Test Sieves – Technical Requirements and Testing – Part 1: Test Sieves of Metal Wire Cloth.
[1] Mugele, R. A., and H. D. Evans. “Droplet Size Distribution in Sprays.” Industrial & Engineering Chemistry 43,
no. 6 (June 1951): 1317-24. https://doi.org/10.1021/ie50498a023.
[2] ASTM E799 - 03(2015) - Standard Practice for Determining Data Criteria and Processing for Liquid Drop Size
Analysis.
[3] ISO 9276-2:2014 - Representation of Results of Particle Size Analysis - Part 2: Calculation of Average Particle
Sizes/Diameters and Moments from Particle Size Distributions.
[1] ISO 9276-2:2014 - Representation of Results of Particle Size Analysis - Part 2: Calculation of Average Particle
Sizes/Diameters and Moments from Particle Size Distributions.
[1] Masuda, Hiroaki, Ko Higashitani, and Hideto Yoshida. Powder Technology: Fundamentals of Particles, Powder
Beds, and Particle Generation. CRC Press, 2006.
[1] ISO 9276-2:2014 - Representation of Results of Particle Size Analysis - Part 2: Calculation of Average Particle
Sizes/Diameters and Moments from Particle Size Distributions.
[1] ASTM E799 - 03(2015) - Standard Practice for Determining Data Criteria and Processing for Liquid Drop Size
Analysis.
[2] ISO 9276-2:2014 - Representation of Results of Particle Size Analysis - Part 2: Calculation of Average Particle
Sizes/Diameters and Moments from Particle Size Distributions.
[1] ASTM E799 - 03(2015) - Standard Practice for Determining Data Criteria and Processing for Liquid Drop Size
Analysis.

Bibliography 647
Fluids Documentation, Release 1.0.21

[1] Mugele, R. A., and H. D. Evans. “Droplet Size Distribution in Sprays.” Industrial & Engineering Chemistry 43,
no. 6 (June 1951): 1317-24. https://doi.org/10.1021/ie50498a023.
[2] ASTM E799 - 03(2015) - Standard Practice for Determining Data Criteria and Processing for Liquid Drop Size
Analysis.
[3] ISO 9276-2:2014 - Representation of Results of Particle Size Analysis - Part 2: Calculation of Average Particle
Sizes/Diameters and Moments from Particle Size Distributions.
[1] ISO 9276-2:2014 - Representation of Results of Particle Size Analysis - Part 2: Calculation of Average Particle
Sizes/Diameters and Moments from Particle Size Distributions.
[1] ISO 9276-2:2014 - Representation of Results of Particle Size Analysis - Part 2: Calculation of Average Particle
Sizes/Diameters and Moments from Particle Size Distributions.
[1] ISO 9276-2:2014 - Representation of Results of Particle Size Analysis - Part 2: Calculation of Average Particle
Sizes/Diameters and Moments from Particle Size Distributions.
[1] ISO 9276-2:2014 - Representation of Results of Particle Size Analysis - Part 2: Calculation of Average Particle
Sizes/Diameters and Moments from Particle Size Distributions.
[1] Schuhmann, R., 1940. Principles of Comminution, I-Size Distribution and Surface Calculations. American Insti-
tute of Mining, Metallurgical and Petroleum Engineers Technical Publication 1189. Mining Technology, volume
4, p. 1-11.
[2] Bayat, Hossein, Mostafa Rastgo, Moharram Mansouri Zadeh, and Harry Vereecken. “Particle Size Distribution
Models, Their Characteristics and Fitting Capability.” Journal of Hydrology 529 (October 1, 2015): 872-89.
[1] Schuhmann, R., 1940. Principles of Comminution, I-Size Distribution and Surface Calculations. American Insti-
tute of Mining, Metallurgical and Petroleum Engineers Technical Publication 1189. Mining Technology, volume
4, p. 1-11.
[2] Bayat, Hossein, Mostafa Rastgo, Moharram Mansouri Zadeh, and Harry Vereecken. “Particle Size Distribution
Models, Their Characteristics and Fitting Capability.” Journal of Hydrology 529 (October 1, 2015): 872-89.
[1] Rosin, P. “The Laws Governing the Fineness of Powdered Coal.” J. Inst. Fuel. 7 (1933): 29-36.
[2] Bayat, Hossein, Mostafa Rastgo, Moharram Mansouri Zadeh, and Harry Vereecken. “Particle Size Distribution
Models, Their Characteristics and Fitting Capability.” Journal of Hydrology 529 (October 1, 2015): 872-89.
[1] Rosin, P. “The Laws Governing the Fineness of Powdered Coal.” J. Inst. Fuel. 7 (1933): 29-36.
[2] Bayat, Hossein, Mostafa Rastgo, Moharram Mansouri Zadeh, and Harry Vereecken. “Particle Size Distribution
Models, Their Characteristics and Fitting Capability.” Journal of Hydrology 529 (October 1, 2015): 872-89.
[1] ASTM E11 - 17 - Standard Specification for Woven Wire Test Sieve Cloth and Test Sieves.
[1] ISO 3310-1:2016 - Test Sieves – Technical Requirements and Testing – Part 1: Test Sieves of Metal Wire Cloth.
[1] ISO 3310-1:2016 - Test Sieves – Technical Requirements and Testing – Part 1: Test Sieves of Metal Wire Cloth.
[1] ISO 3310-1:2016 - Test Sieves – Technical Requirements and Testing – Part 1: Test Sieves of Metal Wire Cloth.
[1] ISO 3310-1:2016 - Test Sieves – Technical Requirements and Testing – Part 1: Test Sieves of Metal Wire Cloth.
[1] ISO 3310-1:2016 - Test Sieves – Technical Requirements and Testing – Part 1: Test Sieves of Metal Wire Cloth.
[1] ASTM E11 - 17 - Standard Specification for Woven Wire Test Sieve Cloth and Test Sieves.
[2] ISO 3310-1:2016 - Test Sieves – Technical Requirements and Testing – Part 1: Test Sieves of Metal Wire Cloth.
[1] American National Standards Institute, and American Society of Mechanical Engineers. B36.10M-2004:
Welded and Seamless Wrought Steel Pipe. New York: American Society of Mechanical Engineers, 2004.
[2] American National Standards Institute, and American Society of Mechanical Engineers. B36-19M-2004: Stain-
less Steel Pipe. New York, N.Y.: American Society of Mechanical Engineers, 2004.

648 Bibliography
Fluids Documentation, Release 1.0.21

[3] F17 Committee. “Specification for Acrylonitrile-Butadiene-Styrene (ABS) Plastic Pipe, Schedules 40 and 80.”
ASTM International. https://doi.org/10.1520/D1527-99R05.
[4] F17 Committee. “Specification for Acrylonitrile-Butadiene-Styrene (ABS) and Poly(Vinyl Chloride) (PVC)
Composite Sewer Piping.” ASTM International. https://doi.org/10.1520/D2680-01R14.
[5] AWWA-American Water Works Association. “AWWA C900-07 Polyvinyl Chloride (PVC) Pressure Pipe and
Fabricated Fittings, 4 In. Through 12 In. (100 Mm Through 300 Mm), for Water Transmission and Distribution.”
[6] AWWA-American Water Works Association. “AWWA C905-97 Polyvinyl Chloride (PVC) Pressure Pipe and
Fabricated Fittings, 14 in. Through 48 in. (350 Mm through 1,200 Mm), for Water Transmission and Distribu-
tion.”
[7] F17 Committee. “Specification for Poly(Vinyl Chloride) (PVC) Large-Diameter Plastic Gravity Sewer Pipe and
Fittings.” ASTM International. https://doi.org/10.1520/F0679-16.
[8] F17 Committee. “Specification for Poly(Vinyl Chloride) (PVC) Plastic Drain, Waste, and Vent Pipe and Fittings.”
ASTM International. https://doi.org/10.1520/D2665-14.
[9] F17 Committee. “Specification for Poly(Vinyl Chloride) (PVC) Plastic Pipe, Schedules 40, 80, and 120.” ASTM
International. https://doi.org/10.1520/D1785-15E01.
[10] F17 Committee. “Specification for Chlorinated Poly(Vinyl Chloride) (CPVC) Plastic Pipe, Schedules 40 and
80.” ASTM International. https://doi.org/10.1520/F0441_F0441M-15.
[11] F17 Committee. “Specification for High-Density Polyethylene (PE) Line Pipe.” ASTM International. https://doi.
org/10.1520/F2619_F2619M-20.
[1] Oberg, Erik, Franklin D. Jones, and Henry H. Ryffel. Machinery’s Handbook. Industrial Press, Incorporated,
2012.
[1] Oberg, Erik, Franklin D. Jones, and Henry H. Ryffel. Machinery’s Handbook. Industrial Press, Incorporated,
2012.
[1] Seider, Warren D., J. D. Seader, and Daniel R. Lewin. Product and Process Design Principles: Synthesis, Anal-
ysis, and Evaluation. 2 edition. New York: Wiley, 2003.
[2] Corripio, A.B., K.S. Chrien, and L.B. Evans, “Estimate Costs of Centrifugal Pumps and Electric Motors,” Chem.
Eng., 89, 115-118, February 22 (1982).
[1] Natural Resources Canada. Electric Motors (1 to 500 HP/0.746 to 375 kW). As modified 2015-12-17. https:
//www.nrcan.gc.ca/energy/regulations-codes-standards/products/6885
[1] Washington State Energy Office. Energy-Efficient Electric Motor Selection Handbook. 1993.
[1] Seider, Warren D., J. D. Seader, and Daniel R. Lewin. Product and Process Design Principles: Synthesis, Anal-
ysis, and Evaluation. 2 edition. New York: Wiley, 2003.
[2] Corripio, A.B., K.S. Chrien, and L.B. Evans, “Estimate Costs of Centrifugal Pumps and Electric Motors,” Chem.
Eng., 89, 115-118, February 22 (1982).
[1] GoHz.com. Variable Frequency Drive Efficiency. http://www.variablefrequencydrive.org/vfd-efficiency
[1] HI 1.3 Rotodynamic Centrifugal Pumps for Design and Applications
[1] Green, Don, and Robert Perry. Perry’s Chemical Engineers’ Handbook, Eighth Edition. McGraw-Hill Profes-
sional, 2007.
[1] All About Circuits. Synchronous Motors. Chapter 13 - AC Motors http://www.allaboutcircuits.com/textbook/
alternating-current/chpt-13/synchronous-motors/
[1] Natural Resources Canada. Electric Motors (1 to 500 HP/0.746 to 375 kW). As modified 2015-12-17. https:
//www.nrcan.gc.ca/energy/regulations-codes-standards/products/6885

Bibliography 649
Fluids Documentation, Release 1.0.21

[1] Electrical Construction, and Maintenance. “Calculating Single- and 3-Phase Parameters.” April 1, 2008. http:
//ecmweb.com/basics/calculating-single-and-3-phase-parameters.
[1] API Standard 520, Part 1 - Sizing and Selection.
[1] API Standard 520, Part 1 - Sizing and Selection.
[1] API Standard 526.
[1] API Standard 520, Part 1 - Sizing and Selection.
[1] API Standard 520, Part 1 - Sizing and Selection.
[1] API Standard 520, Part 1 - Sizing and Selection.
[1] API Standard 520, Part 1 - Sizing and Selection.
[1] API Standard 520, Part 1 - Sizing and Selection.
[1] API Standard 520, Part 1 - Sizing and Selection.
[1] API Standard 520, Part 1 - Sizing and Selection.
[1] Souders, Mott., and George Granger. Brown. “Design of Fractionating Columns I. Entrainment and Capacity.”
Industrial & Engineering Chemistry 26, no. 1 (January 1, 1934): 98-103. https://doi.org/10.1021/ie50289a025.
[2] Vasude, Gael D. Ulrich and Palligarnai T. Chemical Engineering Process Design and Economics: A Practical
Guide. 2nd edition. Durham, N.H: Process Publishing, 2004.
[1] Watkins (1967). Sizing Separators and Accumulators, Hydrocarbon Processing, November 1967.
[2] Blackwell, W. Wayne. Chemical Process Design on a Programmable Calculator. New York: Mcgraw-Hill, 1984.
[3] Branan, Carl R. Pocket Guide to Chemical Engineering. 1st edition. Houston, Tex: Gulf Professional Publishing,
1999.
[2] Otto H. York Company, “Mist Elimination in Gas Treatment Plants and Refineries,” Engineering, Parsippany,
NJ.
[1] Svrcek, W. Y., and W. D. Monnery. “Design Two-Phase Separators within the Right Limits” Chemical Engi-
neering Progress, (October 1, 1993): 53-60.
[1] Svrcek, W. Y., and W. D. Monnery. “Design Two-Phase Separators within the Right Limits” Chemical Engi-
neering Progress, (October 1, 1993): 53-60.
[1] Rizk, F. “Pneumatic conveying at optimal operation conditions and a solution of Bath’s equation.” Proceedings
of Pneumotransport 3, paper D4. BHRA Fluid Engineering, Cranfield, England (1973)
[2] Klinzing, G. E., F. Rizk, R. Marcus, and L. S. Leung. Pneumatic Conveying of Solids: A Theoretical and
Practical Approach. Springer, 2013.
[3] Rhodes, Martin J. Introduction to Particle Technology. Wiley, 2013.
[1] Matsumoto, Shigeru, Michio Kara, Shozaburo Saito, and Siro Maeda. “Minimum Transport Velocity for
Horizontal Pneumatic Conveying.” Journal of Chemical Engineering of Japan 7, no. 6 (1974): 425-30.
doi:10.1252/jcej.7.425.
[2] Jones, Peter J., and L. S. Leung. “A Comparison of Correlations for Saltation Velocity in Horizontal Pneumatic
Conveying.” Industrial & Engineering Chemistry Process Design and Development 17, no. 4 (October 1, 1978):
571-75. doi:10.1021/i260068a031
[1] Matsumoto, Shigeru, Shundo Harada, Shozaburo Saito, and Siro Maeda. “Saltation Velocity for Hor-
izontal Pneumatic Conveying.” Journal of Chemical Engineering of Japan 8, no. 4 (1975): 331-33.
doi:10.1252/jcej.8.331.

650 Bibliography
Fluids Documentation, Release 1.0.21

[2] Jones, Peter J., and L. S. Leung. “A Comparison of Correlations for Saltation Velocity in Horizontal Pneumatic
Conveying.” Industrial & Engineering Chemistry Process Design and Development 17, no. 4 (October 1, 1978):
571-75. doi:10.1021/i260068a031
[1] Matsumoto, Shigeru, Makoto Kikuta, and Siro Maeda. “Effect of Particle Size on the Minimum Transport Veloc-
ity for Horizontal Pneumatic Conveying of Solids.” Journal of Chemical Engineering of Japan 10, no. 4 (1977):
273-79. doi:10.1252/jcej.10.273.
[2] Klinzing, G. E., F. Rizk, R. Marcus, and L. S. Leung. Pneumatic Conveying of Solids: A Theoretical and
Practical Approach. Springer, 2013.
[3] Gomes, L. M., and A. L. Amarante Mesquita. “On the Prediction of Pickup and Saltation Velocities in Pneumatic
Conveying.” Brazilian Journal of Chemical Engineering 31, no. 1 (March 2014): 35-46. doi:10.1590/S0104-
66322014000100005
[4] Rabinovich, Evgeny, and Haim Kalman. “Threshold Velocities of Particle-Fluid Flows in Horizontal
Pipes and Ducts: Literature Review.” Reviews in Chemical Engineering 27, no. 5-6 (January 1, 2011).
doi:10.1515/REVCE.2011.011.
[1] Schade, B., Zum Ubergang Sprung-Strahnen-forderung bei der Horizontalen Pneumatischen Feststoffordrung.
Dissertation, University of Karlsruche (1987)
[2] Rabinovich, Evgeny, and Haim Kalman. “Threshold Velocities of Particle-Fluid Flows in Horizontal
Pipes and Ducts: Literature Review.” Reviews in Chemical Engineering 27, no. 5-6 (January 1, 2011).
doi:10.1515/REVCE.2011.011.
[3] Setia, G., S. S. Mallick, R. Pan, and P. W. Wypych. “Modeling Minimum Transport Boundary for
Fluidized Dense-Phase Pneumatic Conveying Systems.” Powder Technology 277 (June 2015): 244-51.
doi:10.1016/j.powtec.2015.02.050.
[4] Bansal, A., S. S. Mallick, and P. W. Wypych. “Investigating Straight-Pipe Pneumatic Conveying Characteristics
for Fluidized Dense-Phase Pneumatic Conveying.” Particulate Science and Technology 31, no. 4 (July 4, 2013):
348-56. doi:10.1080/02726351.2012.732677.
[5] Gomes, L. M., and A. L. Amarante Mesquita. “On the Prediction of Pickup and Saltation Velocities in Pneumatic
Conveying.” Brazilian Journal of Chemical Engineering 31, no. 1 (March 2014): 35-46. doi:10.1590/S0104-
66322014000100005
[1] Weber, M. 1981. Principles of hydraulic and pneumatic conveying in pipes. Bulk Solids Handling 1: 57-63.
[2] Rabinovich, Evgeny, and Haim Kalman. “Threshold Velocities of Particle-Fluid Flows in Horizontal
Pipes and Ducts: Literature Review.” Reviews in Chemical Engineering 27, no. 5-6 (January 1, 2011).
doi:10.1515/REVCE.2011.011.
[3] Setia, G., S. S. Mallick, R. Pan, and P. W. Wypych. “Modeling Minimum Transport Boundary for
Fluidized Dense-Phase Pneumatic Conveying Systems.” Powder Technology 277 (June 2015): 244-51.
doi:10.1016/j.powtec.2015.02.050.
[4] Bansal, A., S. S. Mallick, and P. W. Wypych. “Investigating Straight-Pipe Pneumatic Conveying Characteristics
for Fluidized Dense-Phase Pneumatic Conveying.” Particulate Science and Technology 31, no. 4 (July 4, 2013):
348-56. doi:10.1080/02726351.2012.732677.
[5] Gomes, L. M., and A. L. Amarante Mesquita. “On the Prediction of Pickup and Saltation Velocities in Pneumatic
Conveying.” Brazilian Journal of Chemical Engineering 31, no. 1 (March 2014): 35-46. doi:10.1590/S0104-
66322014000100005
[1] Weber, M. 1981. Principles of hydraulic and pneumatic conveying in pipes. Bulk Solids Handling 1: 57-63.
[2] Rabinovich, Evgeny, and Haim Kalman. “Threshold Velocities of Particle-Fluid Flows in Horizontal
Pipes and Ducts: Literature Review.” Reviews in Chemical Engineering 27, no. 5-6 (January 1, 2011).
doi:10.1515/REVCE.2011.011.

Bibliography 651
Fluids Documentation, Release 1.0.21

[3] Gomes, L. M., and A. L. Amarante Mesquita. “On the Prediction of Pickup and Saltation Velocities in Pneumatic
Conveying.” Brazilian Journal of Chemical Engineering 31, no. 1 (March 2014): 35-46. doi:10.1590/S0104-
66322014000100005
[1] Rohsenow, Warren and James Hartnett and Young Cho. Handbook of Heat Transfer, 3E. New York: McGraw-
Hill, 1998.
[2] Awad, M. M., and Y. S. Muzychka. “Effective Property Models for Homogeneous Two-
Phase Flows.” Experimental Thermal and Fluid Science 33, no. 1 (October 1, 2008): 106-13.
doi:10.1016/j.expthermflusci.2008.07.006.
[3] Kim, Sung-Min, and Issam Mudawar. “Review of Databases and Predictive Methods for Pressure Drop in Adi-
abatic, Condensing and Boiling Mini/Micro-Channel Flows.” International Journal of Heat and Mass Transfer
77 (October 2014): 74-97. doi:10.1016/j.ijheatmasstransfer.2014.04.035.
[1] Rohsenow, Warren and James Hartnett and Young Cho. Handbook of Heat Transfer, 3E. New York: McGraw-
Hill, 1998.
[2] Kim, Sung-Min, and Issam Mudawar. “Review of Databases and Predictive Methods for Pressure Drop in Adi-
abatic, Condensing and Boiling Mini/Micro-Channel Flows.” International Journal of Heat and Mass Transfer
77 (October 2014): 74-97. doi:10.1016/j.ijheatmasstransfer.2014.04.035.
[3] Thome, John R. “Engineering Data Book III.” Wolverine Tube Inc (2004). http://www.wlv.com/
heat-transfer-databook/
[1] Shoham, Ovadia. Mechanistic Modeling of Gas-Liquid Two-Phase Flow in Pipes. Pap/Cdr edition. Richardson,
TX: Society of Petroleum Engineers, 2006.
[2] Rohsenow, Warren and James Hartnett and Young Cho. Handbook of Heat Transfer, 3E. New York: McGraw-
Hill, 1998.
[3] Kim, Sung-Min, and Issam Mudawar. “Review of Databases and Predictive Methods for Pressure Drop in Adi-
abatic, Condensing and Boiling Mini/Micro-Channel Flows.” International Journal of Heat and Mass Transfer
77 (October 2014): 74-97. doi:10.1016/j.ijheatmasstransfer.2014.04.035.
[1] Rohsenow, Warren and James Hartnett and Young Cho. Handbook of Heat Transfer, 3E. New York: McGraw-
Hill, 1998.
[2] Kim, Sung-Min, and Issam Mudawar. “Review of Databases and Predictive Methods for Pressure Drop in Adi-
abatic, Condensing and Boiling Mini/Micro-Channel Flows.” International Journal of Heat and Mass Transfer
77 (October 2014): 74-97. doi:10.1016/j.ijheatmasstransfer.2014.04.035.
[1] Beggs, D.H., and J.P. Brill. “A Study of Two-Phase Flow in Inclined Pipes.” Journal of Petroleum Technology
25, no. 05 (May 1, 1973): 607-17. https://doi.org/10.2118/4007-PA.
[2] Brill, James P., and Howard Dale Beggs. Two-Phase Flow in Pipes, 1994.
[3] Shoham, Ovadia. Mechanistic Modeling of Gas-Liquid Two-Phase Flow in Pipes. Pap/Cdr edition. Richardson,
TX: Society of Petroleum Engineers, 2006.
[1] Lockhart, R. W. & Martinelli, R. C. (1949), “Proposed correlation of data for isothermal two-phase, two-
component flow in pipes”, Chemical Engineering Progress 45 (1), 39-48.
[2] Chisholm, D.”A Theoretical Basis for the Lockhart-Martinelli Correlation for Two-Phase Flow.” International
Journal of Heat and Mass Transfer 10, no. 12 (December 1967): 1767-78. doi:10.1016/0017-9310(67)90047-6.
[3] Cui, Xiaozhou, and John J. J. Chen.”A Re-Examination of the Data of Lockhart-Martinelli.” International Journal
of Multiphase Flow 36, no. 10 (October 2010): 836-46. doi:10.1016/j.ijmultiphaseflow.2010.06.001.
[4] Kim, Sung-Min, and Issam Mudawar. “Universal Approach to Predicting Two-Phase Frictional Pressure Drop
for Adiabatic and Condensing Mini/ Micro-Channel Flows.” International Journal of Heat and Mass Transfer
55, no. 11-12 (May 2012): 3246-61. doi:10.1016/j.ijheatmasstransfer.2012.02.047.

652 Bibliography
Fluids Documentation, Release 1.0.21

[1] Friedel, L. “Improved Friction Pressure Drop Correlations for Horizontal and Vertical Two-Phase Pipe Flow.” ,
in: Proceedings, European Two Phase Flow Group Meeting, Ispra, Italy, 1979: 485-481.
[2] Whalley, P. B. Boiling, Condensation, and Gas-Liquid Flow. Oxford: Oxford University Press, 1987.
[3] Triplett, K. A., S. M. Ghiaasiaan, S. I. Abdel-Khalik, A. LeMouel, and B. N. McCord. “Gas-liquid Two-Phase
Flow in Microchannels: Part II: Void Fraction and Pressure Drop.” International Journal of Multiphase Flow 25,
no. 3 (April 1999): 395-410. doi:10.1016/S0301-9322(98)00055-X.
[4] Mekisso, Henock Mateos. “Comparison of Frictional Pressure Drop Correlations for Isothermal Two-Phase
Horizontal Flow.” Thesis, Oklahoma State University, 2013. https://shareok.org/handle/11244/11109.
[5] Thome, John R. “Engineering Data Book III.” Wolverine Tube Inc (2004). http://www.wlv.com/
heat-transfer-databook/
[6] Ghiaasiaan, S. Mostafa. Two-Phase Flow, Boiling, and Condensation: In Conventional and Miniature Systems.
Cambridge University Press, 2007.
[1] Chisholm, D. “Pressure Gradients due to Friction during the Flow of Evaporating Two-Phase Mixtures in Smooth
Tubes and Channels.” International Journal of Heat and Mass Transfer 16, no. 2 (February 1973): 347-58.
doi:10.1016/0017-9310(73)90063-X.
[2] Mekisso, Henock Mateos. “Comparison of Frictional Pressure Drop Correlations for Isothermal Two-Phase
Horizontal Flow.” Thesis, Oklahoma State University, 2013. https://shareok.org/handle/11244/11109.
[3] Thome, John R. “Engineering Data Book III.” Wolverine Tube Inc (2004). http://www.wlv.com/
heat-transfer-databook/
[4] Chisholm, D. “Research Note: Influence of Pipe Surface Roughness on Friction Pressure Gradient dur-
ing Two-Phase Flow.” Journal of Mechanical Engineering Science 20, no. 6 (December 1, 1978): 353-354.
doi:10.1243/JMES_JOUR_1978_020_061_02.
[1] Kim, Sung-Min, and Issam Mudawar. “Universal Approach to Predicting Two-Phase Frictional Pressure Drop
for Adiabatic and Condensing Mini/ Micro-Channel Flows.” International Journal of Heat and Mass Transfer
55, no. 11-12 (May 2012): 3246-61. doi:10.1016/j.ijheatmasstransfer.2012.02.047.
[2] Kim, Sung-Min, and Issam Mudawar. “Review of Databases and Predictive Methods for Pressure Drop in Adi-
abatic, Condensing and Boiling Mini/Micro-Channel Flows.” International Journal of Heat and Mass Transfer
77 (October 2014): 74-97. doi:10.1016/j.ijheatmasstransfer.2014.04.035.
[1] Baroczy, C. J. “A systematic correlation for two-phase pressure drop.” In Chem. Eng. Progr., Symp. Ser., 62:
No. 64, 232-49 (1966).
[2] Chisholm, D. “Pressure Gradients due to Friction during the Flow of Evaporating Two-Phase Mixtures in Smooth
Tubes and Channels.” International Journal of Heat and Mass Transfer 16, no. 2 (February 1973): 347-58.
doi:10.1016/0017-9310(73)90063-X.
[3] Mekisso, Henock Mateos. “Comparison of Frictional Pressure Drop Correlations for Isothermal Two-Phase
Horizontal Flow.” Thesis, Oklahoma State University, 2013. https://shareok.org/handle/11244/11109.
[1] Theissing, Peter. “Eine Allgemeingültige Methode Zur Berechnung Des Reibungsdruckverlustes Der
Mehrphasenströmung (A Generally Valid Method for Calculating Frictional Pressure Drop on Multiphase
Flow).” Chemie Ingenieur Technik 52, no. 4 (January 1, 1980): 344-345. doi:10.1002/cite.330520414.
[2] Mekisso, Henock Mateos. “Comparison of Frictional Pressure Drop Correlations for Isothermal Two-Phase
Horizontal Flow.” Thesis, Oklahoma State University, 2013. https://shareok.org/handle/11244/11109.
[3] Greco, A., and G. P. Vanoli. “Experimental Two-Phase Pressure Gradients during Evaporation of Pure and Mixed
Refrigerants in a Smooth Horizontal Tube. Comparison with Correlations.” Heat and Mass Transfer 42, no. 8
(April 6, 2006): 709-725. doi:10.1007/s00231-005-0020-7.

Bibliography 653
Fluids Documentation, Release 1.0.21

[1] Müller-Steinhagen, H, and K Heck. “A Simple Friction Pressure Drop Correlation for Two-Phase Flow in
Pipes.” Chemical Engineering and Processing: Process Intensification 20, no. 6 (November 1, 1986): 297-308.
doi:10.1016/0255-2701(86)80008-3.
[2] Mekisso, Henock Mateos. “Comparison of Frictional Pressure Drop Correlations for Isothermal Two-Phase
Horizontal Flow.” Thesis, Oklahoma State University, 2013. https://shareok.org/handle/11244/11109.
[3] Thome, John R. “Engineering Data Book III.” Wolverine Tube Inc (2004). http://www.wlv.com/
heat-transfer-databook/
[1] Gronnerud, R. “Investigation of Liquid Hold-Up, Flow Resistance and Heat Transfer in Circulation Type Evap-
orators. 4. Two-Phase Flow Resistance in Boiling Refrigerants.” Proc. Freudenstadt Meet., IIR/C. R. Réun.
Freudenstadt, IIF. 1972-1: 127-138. 1972.
[2] ASHRAE Handbook: Fundamentals. American Society of Heating, Refrigerating and Air-Conditioning Engi-
neers, Incorporated, 2013.
[3] Mekisso, Henock Mateos. “Comparison of Frictional Pressure Drop Correlations for Isothermal Two-Phase
Horizontal Flow.” Thesis, Oklahoma State University, 2013. https://shareok.org/handle/11244/11109.
[4] Thome, John R. “Engineering Data Book III.” Wolverine Tube Inc (2004). http://www.wlv.com/
heat-transfer-databook/
[1] Lombardi, C., and E. Pedrocchi. “Pressure Drop Correlation in Two- Phase Flow.” Energ. Nucl. (Milan) 19: No.
2, 91-99, January 1, 1972.
[2] Mekisso, Henock Mateos. “Comparison of Frictional Pressure Drop Correlations for Isothermal Two-Phase
Horizontal Flow.” Thesis, Oklahoma State University, 2013. https://shareok.org/handle/11244/11109.
[3] Turgut, Oğuz Emrah, Mustafa Turhan Çoban, and Mustafa Asker. “Comparison of Flow Boiling Pressure
Drop Correlations for Smooth Macrotubes.” Heat Transfer Engineering 37, no. 6 (April 12, 2016): 487-506.
doi:10.1080/01457632.2015.1060733.
[1] Jung, D. S., and R. Radermacher. “Prediction of Pressure Drop during Horizontal Annular Flow Boiling of
Pure and Mixed Refrigerants.” International Journal of Heat and Mass Transfer 32, no. 12 (December 1, 1989):
2435-46. doi:10.1016/0017-9310(89)90203-2.
[2] Kim, Sung-Min, and Issam Mudawar. “Universal Approach to Predicting Two-Phase Frictional Pressure Drop
for Adiabatic and Condensing Mini/ Micro-Channel Flows.” International Journal of Heat and Mass Transfer
55, no. 11–12 (May 2012): 3246-61. doi:10.1016/j.ijheatmasstransfer.2012.02.047.
[3] Filip, Alina, Florin Băltărețu, and Radu-Mircea Damian. “Comparison of Two-Phase Pressure Drop Models for
Condensing Flows in Horizontal Tubes.” Mathematical Modelling in Civil Engineering 10, no. 4 (2015): 19-27.
doi:10.2478/mmce-2014-0019.
[1] Tran, T. N, M. -C Chyu, M. W Wambsganss, and D. M France. “Two-Phase Pressure Drop of Refrigerants during
Flow Boiling in Small Channels: An Experimental Investigation and Correlation Development.” International
Journal of Multiphase Flow 26, no. 11 (November 1, 2000): 1739-54. doi:10.1016/S0301-9322(99)00119-6.
[2] Kim, Sung-Min, and Issam Mudawar. “Universal Approach to Predicting Two-Phase Frictional Pressure Drop
for Adiabatic and Condensing Mini/ Micro-Channel Flows.” International Journal of Heat and Mass Transfer
55, no. 11–12 (May 2012): 3246-61. doi:10.1016/j.ijheatmasstransfer.2012.02.047.
[3] Choi, Kwang-Il, A. S. Pamitran, Chun-Young Oh, and Jong-Taek Oh. “Two-Phase Pressure Drop of R-410A
in Horizontal Smooth Minichannels.” International Journal of Refrigeration 31, no. 1 (January 2008): 119-29.
doi:10.1016/j.ijrefrig.2007.06.006.
[1] Chen, Ing Youn, Kai-Shing Yang, Yu-Juei Chang, and Chi-Chung Wang. “Two-Phase Pressure Drop of
Air–water and R-410A in Small Horizontal Tubes.” International Journal of Multiphase Flow 27, no. 7 (July
2001): 1293-99. doi:10.1016/S0301-9322(01)00004-0.

654 Bibliography
Fluids Documentation, Release 1.0.21

[2] Kim, Sung-Min, and Issam Mudawar. “Universal Approach to Predicting Two-Phase Frictional Pressure Drop
for Adiabatic and Condensing Mini/ Micro-Channel Flows.” International Journal of Heat and Mass Transfer
55, no. 11–12 (May 2012): 3246-61. doi:10.1016/j.ijheatmasstransfer.2012.02.047.
[3] Choi, Kwang-Il, A. S. Pamitran, Chun-Young Oh, and Jong-Taek Oh. “Two-Phase Pressure Drop of R-410A
in Horizontal Smooth Minichannels.” International Journal of Refrigeration 31, no. 1 (January 2008): 119-29.
doi:10.1016/j.ijrefrig.2007.06.006.
[1] Zhang, Ming, and Ralph L. Webb. “Correlation of Two-Phase Friction for Refrigerants in Small-Diameter
Tubes.” Experimental Thermal and Fluid Science 25, no. 3-4 (October 2001): 131-39. doi:10.1016/S0894-
1777(01)00066-8.
[2] Choi, Kwang-Il, A. S. Pamitran, Chun-Young Oh, and Jong-Taek Oh. “Two-Phase Pressure Drop of R-410A
in Horizontal Smooth Minichannels.” International Journal of Refrigeration 31, no. 1 (January 2008): 119-29.
doi:10.1016/j.ijrefrig.2007.06.006.
[1] Xu, Yu, and Xiande Fang. “A New Correlation of Two-Phase Frictional Pressure Drop for Condensing Flow in
Pipes.” Nuclear Engineering and Design 263 (October 2013): 87-96. doi:10.1016/j.nucengdes.2013.04.017.
[1] Yu, W., D. M. France, M. W. Wambsganss, and J. R. Hull. “Two-Phase Pressure Drop, Boiling Heat Transfer,
and Critical Heat Flux to Water in a Small-Diameter Horizontal Tube.” International Journal of Multiphase Flow
28, no. 6 (June 2002): 927-41. doi:10.1016/S0301-9322(02)00019-8.
[2] Kim, Sung-Min, and Issam Mudawar. “Universal Approach to Predicting Two-Phase Frictional Pressure Drop
for Adiabatic and Condensing Mini/ Micro-Channel Flows.” International Journal of Heat and Mass Transfer
55, no. 11-12 (May 2012): 3246-61. doi:10.1016/j.ijheatmasstransfer.2012.02.047.
[3] Xu, Yu, Xiande Fang, Xianghui Su, Zhanru Zhou, and Weiwei Chen. “Evaluation of Frictional Pressure Drop
Correlations for Two-Phase Flow in Pipes.” Nuclear Engineering and Design, SI: CFD4NRS-3, 253 (December
2012): 86-97. doi:10.1016/j.nucengdes.2012.08.007.
[1] Wang, Chi-Chuan, Ching-Shan Chiang, and Ding-Chong Lu. “Visual Observation of Two-Phase Flow Pattern
of R-22, R-134a, and R-407C in a 6.5-Mm Smooth Tube.” Experimental Thermal and Fluid Science 15, no. 4
(November 1, 1997): 395-405. doi:10.1016/S0894-1777(97)00007-1.
[2] Kim, Sung-Min, and Issam Mudawar. “Universal Approach to Predicting Two-Phase Frictional Pressure Drop
for Adiabatic and Condensing Mini/ Micro-Channel Flows.” International Journal of Heat and Mass Transfer
55, no. 11-12 (May 2012): 3246-61. doi:10.1016/j.ijheatmasstransfer.2012.02.047.
[3] Xu, Yu, Xiande Fang, Xianghui Su, Zhanru Zhou, and Weiwei Chen. “Evaluation of Frictional Pressure Drop
Correlations for Two-Phase Flow in Pipes.” Nuclear Engineering and Design, SI: CFD4NRS-3, 253 (December
2012): 86-97. doi:10.1016/j.nucengdes.2012.08.007.
[1] Hwang, Yun Wook, and Min Soo Kim. “The Pressure Drop in Microtubes and the Correlation De-
velopment.” International Journal of Heat and Mass Transfer 49, no. 11-12 (June 2006): 1804-12.
doi:10.1016/j.ijheatmasstransfer.2005.10.040.
[2] Kim, Sung-Min, and Issam Mudawar. “Universal Approach to Predicting Two-Phase Frictional Pressure Drop
for Adiabatic and Condensing Mini/ Micro-Channel Flows.” International Journal of Heat and Mass Transfer
55, no. 11-12 (May 2012): 3246-61. doi:10.1016/j.ijheatmasstransfer.2012.02.047.
[3] Xu, Yu, Xiande Fang, Xianghui Su, Zhanru Zhou, and Weiwei Chen. “Evaluation of Frictional Pressure Drop
Correlations for Two-Phase Flow in Pipes.” Nuclear Engineering and Design, SI: CFD4NRS-3, 253 (December
2012): 86-97. doi:10.1016/j.nucengdes.2012.08.007.
[1] Zhang, W., T. Hibiki, and K. Mishima. “Correlations of Two-Phase Frictional Pressure Drop and Void Fraction
in Mini-Channel.” International Journal of Heat and Mass Transfer 53, no. 1-3 (January 15, 2010): 453-65.
doi:10.1016/j.ijheatmasstransfer.2009.09.011.

Bibliography 655
Fluids Documentation, Release 1.0.21

[2] Kim, Sung-Min, and Issam Mudawar. “Universal Approach to Predicting Two-Phase Frictional Pressure Drop
for Adiabatic and Condensing Mini/ Micro-Channel Flows.” International Journal of Heat and Mass Transfer
55, no. 11-12 (May 2012): 3246-61. doi:10.1016/j.ijheatmasstransfer.2012.02.047.
[3] Xu, Yu, Xiande Fang, Xianghui Su, Zhanru Zhou, and Weiwei Chen. “Evaluation of Frictional Pressure Drop
Correlations for Two-Phase Flow in Pipes.” Nuclear Engineering and Design, SI: CFD4NRS-3, 253 (December
2012): 86-97. doi:10.1016/j.nucengdes.2012.08.007.
[1] Mishima, K., and T. Hibiki. “Some Characteristics of Air-Water Two- Phase Flow in Small Diameter Verti-
cal Tubes.” International Journal of Multiphase Flow 22, no. 4 (August 1, 1996): 703-12. doi:10.1016/0301-
9322(96)00010-9.
[2] Kim, Sung-Min, and Issam Mudawar. “Universal Approach to Predicting Two-Phase Frictional Pressure Drop
for Adiabatic and Condensing Mini/ Micro-Channel Flows.” International Journal of Heat and Mass Transfer
55, no. 11-12 (May 2012): 3246-61. doi:10.1016/j.ijheatmasstransfer.2012.02.047.
[3] Xu, Yu, Xiande Fang, Xianghui Su, Zhanru Zhou, and Weiwei Chen. “Evaluation of Frictional Pressure Drop
Correlations for Two-Phase Flow in Pipes.” Nuclear Engineering and Design, SI: CFD4NRS-3, 253 (December
2012): 86-97. doi:10.1016/j.nucengdes.2012.08.007.
[1] Bankoff, S. G. “A Variable Density Single-Fluid Model for Two-Phase Flow With Particular Reference to Steam-
Water Flow.” Journal of Heat Transfer 82, no. 4 (November 1, 1960): 265-72. doi:10.1115/1.3679930.
[2] Thome, John R. “Engineering Data Book III.” Wolverine Tube Inc (2004). http://www.wlv.com/
heat-transfer-databook/
[3] Moreno Quibén, Jesús. “Experimental and Analytical Study of Two- Phase Pressure Drops during Evaporation
in Horizontal Tubes,” 2005. doi:10.5075/epfl-thesis-3337.
[4] Mekisso, Henock Mateos. “Comparison of Frictional Pressure Drop Correlations for Isothermal Two-Phase
Horizontal Flow.” Thesis, Oklahoma State University, 2013. https://shareok.org/handle/11244/11109.
[1] Mandhane, J. M., G. A. Gregory, and K. Aziz. “A Flow Pattern Map for Gas-liquid Flow in Horizontal Pipes.” In-
ternational Journal of Multiphase Flow 1, no. 4 (October 30, 1974): 537-53. doi:10.1016/0301-9322(74)90006-
8.
[1] Taitel, Yemada, and A. E. Dukler. “A Model for Predicting Flow Regime Transitions in Horizontal and near
Horizontal Gas-Liquid Flow.” AIChE Journal 22, no. 1 (January 1, 1976): 47-55. doi:10.1002/aic.690220105.
[2] Brill, James P., and Howard Dale Beggs. Two-Phase Flow in Pipes, 1994.
[3] Shoham, Ovadia. Mechanistic Modeling of Gas-Liquid Two-Phase Flow in Pipes. Pap/Cdr edition. Richardson,
TX: Society of Petroleum Engineers, 2006.
[1] Awad, M. M., and Y. S. Muzychka. “Effective Property Models for Homogeneous Two-Phase Flows.” Experi-
mental Thermal and Fluid Science 33, no. 1 (October 1, 2008): 106-13.
[1] Thom, J. R. S. “Prediction of Pressure Drop during Forced Circulation Boiling of Water.” International Journal
of Heat and Mass Transfer 7, no. 7 (July 1, 1964): 709-24. doi:10.1016/0017-9310(64)90002-X.
[2] Xu, Yu, and Xiande Fang. “Correlations of Void Fraction for Two- Phase Refrigerant Flow in Pipes.” Applied
Thermal Engineering 64, no. 1-2 (March 2014): 242–51. doi:10.1016/j.applthermaleng.2013.12.032.
[3] Dalkilic, A. S., S. Laohalertdecha, and S. Wongwises. “Effect of Void Fraction Models on the Two-Phase Friction
Factor of R134a during Condensation in Vertical Downward Flow in a Smooth Tube.” International Communica-
tions in Heat and Mass Transfer 35, no. 8 (October 2008): 921-27. doi:10.1016/j.icheatmasstransfer.2008.04.001.
[1] Zivi, S. M. “Estimation of Steady-State Steam Void-Fraction by Means of the Principle of Minimum Entropy
Production.” Journal of Heat Transfer 86, no. 2 (May 1, 1964): 247-51. doi:10.1115/1.3687113.
[2] Xu, Yu, and Xiande Fang. “Correlations of Void Fraction for Two- Phase Refrigerant Flow in Pipes.” Applied
Thermal Engineering 64, no. 1-2 (March 2014): 242–51. doi:10.1016/j.applthermaleng.2013.12.032.

656 Bibliography
Fluids Documentation, Release 1.0.21

[3] Dalkilic, A. S., S. Laohalertdecha, and S. Wongwises. “Effect of Void Fraction Models on the Two-Phase Friction
Factor of R134a during Condensation in Vertical Downward Flow in a Smooth Tube.” International Communica-
tions in Heat and Mass Transfer 35, no. 8 (October 2008): 921-27. doi:10.1016/j.icheatmasstransfer.2008.04.001.
[1] Smith, S. L. “Void Fractions in Two-Phase Flow: A Correlation Based upon an Equal Velocity Head
Model.” Proceedings of the Institution of Mechanical Engineers 184, no. 1 (June 1, 1969): 647-64.
doi:10.1243/PIME_PROC_1969_184_051_02.
[2] Xu, Yu, and Xiande Fang. “Correlations of Void Fraction for Two- Phase Refrigerant Flow in Pipes.” Applied
Thermal Engineering 64, no. 1-2 (March 2014): 242–51. doi:10.1016/j.applthermaleng.2013.12.032.
[3] Dalkilic, A. S., S. Laohalertdecha, and S. Wongwises. “Effect of Void Fraction Models on the Two-Phase Friction
Factor of R134a during Condensation in Vertical Downward Flow in a Smooth Tube.” International Communica-
tions in Heat and Mass Transfer 35, no. 8 (October 2008): 921-27. doi:10.1016/j.icheatmasstransfer.2008.04.001.
[1] Fauske, H., Critical two-phase, steam-water flows, in: Heat Transfer and Fluid Mechanics Institute 1961: Pro-
ceedings. Stanford University Press, 1961, p. 79-89.
[2] Xu, Yu, and Xiande Fang. “Correlations of Void Fraction for Two- Phase Refrigerant Flow in Pipes.” Applied
Thermal Engineering 64, no. 1-2 (March 2014): 242–51. doi:10.1016/j.applthermaleng.2013.12.032.
[3] Dalkilic, A. S., S. Laohalertdecha, and S. Wongwises. “Effect of Void Fraction Models on the Two-Phase Friction
Factor of R134a during Condensation in Vertical Downward Flow in a Smooth Tube.” International Communica-
tions in Heat and Mass Transfer 35, no. 8 (October 2008): 921-27. doi:10.1016/j.icheatmasstransfer.2008.04.001.
[1] Chisholm, D. “Pressure Gradients due to Friction during the Flow of Evaporating Two-Phase Mixtures in Smooth
Tubes and Channels.” International Journal of Heat and Mass Transfer 16, no. 2 (February 1, 1973): 347-58.
doi:10.1016/0017-9310(73)90063-X.
[2] Xu, Yu, and Xiande Fang. “Correlations of Void Fraction for Two- Phase Refrigerant Flow in Pipes.” Applied
Thermal Engineering 64, no. 1-2 (March 2014): 242–51. doi:10.1016/j.applthermaleng.2013.12.032.
[3] Dalkilic, A. S., S. Laohalertdecha, and S. Wongwises. “Effect of Void Fraction Models on the Two-Phase Friction
Factor of R134a during Condensation in Vertical Downward Flow in a Smooth Tube.” International Communica-
tions in Heat and Mass Transfer 35, no. 8 (October 2008): 921-27. doi:10.1016/j.icheatmasstransfer.2008.04.001.
[1] J.M. Turner, G.B. Wallis, The Separate-cylinders Model of Two-phase Flow, NYO-3114-6, Thayer’s School
Eng., Dartmouth College, Hanover, New Hampshire, USA, 1965.
[2] Xu, Yu, and Xiande Fang. “Correlations of Void Fraction for Two- Phase Refrigerant Flow in Pipes.” Applied
Thermal Engineering 64, no. 1-2 (March 2014): 242–51. doi:10.1016/j.applthermaleng.2013.12.032.
[3] Dalkilic, A. S., S. Laohalertdecha, and S. Wongwises. “Effect of Void Fraction Models on the Two-Phase Friction
Factor of R134a during Condensation in Vertical Downward Flow in a Smooth Tube.” International Communica-
tions in Heat and Mass Transfer 35, no. 8 (October 2008): 921-27. doi:10.1016/j.icheatmasstransfer.2008.04.001.
[1] Xu, Yu, and Xiande Fang. “Correlations of Void Fraction for Two- Phase Refrigerant Flow in Pipes.” Applied
Thermal Engineering 64, no. 1-2 (March 2014): 242–51. doi:10.1016/j.applthermaleng.2013.12.032.
[2] Dalkilic, A. S., S. Laohalertdecha, and S. Wongwises. “Effect of Void Fraction Models on the Two-Phase Friction
Factor of R134a during Condensation in Vertical Downward Flow in a Smooth Tube.” International Communica-
tions in Heat and Mass Transfer 35, no. 8 (October 2008): 921-27. doi:10.1016/j.icheatmasstransfer.2008.04.001.
[3] Woldesemayat, Melkamu A., and Afshin J. Ghajar. “Comparison of Void Fraction Correlations for Different
Flow Patterns in Horizontal and Upward Inclined Pipes.” International Journal of Multiphase Flow 33, no. 4
(April 2007): 347-370. doi:10.1016/j.ijmultiphaseflow.2006.09.004.
[1] Chisholm, Duncan. Two-Phase Flow in Pipelines and Heat Exchangers. Institution of Chemical Engineers, 1983.
[2] Armand, Aleksandr Aleksandrovich. The Resistance During the Movement of a Two-Phase System in Horizontal
Pipes. Atomic Energy Research Establishment, 1959.

Bibliography 657
Fluids Documentation, Release 1.0.21

[3] Xu, Yu, and Xiande Fang. “Correlations of Void Fraction for Two- Phase Refrigerant Flow in Pipes.” Applied
Thermal Engineering 64, no. 1-2 (March 2014): 242–51. doi:10.1016/j.applthermaleng.2013.12.032.
[4] Dalkilic, A. S., S. Laohalertdecha, and S. Wongwises. “Effect of Void Fraction Models on the Two-Phase Friction
Factor of R134a during Condensation in Vertical Downward Flow in a Smooth Tube.” International Communica-
tions in Heat and Mass Transfer 35, no. 8 (October 2008): 921-27. doi:10.1016/j.icheatmasstransfer.2008.04.001.
[5] Woldesemayat, Melkamu A., and Afshin J. Ghajar. “Comparison of Void Fraction Correlations for Different
Flow Patterns in Horizontal and Upward Inclined Pipes.” International Journal of Multiphase Flow 33, no. 4
(April 2007): 347-370. doi:10.1016/j.ijmultiphaseflow.2006.09.004.
[1] Armand, Aleksandr Aleksandrovich. The Resistance During the Movement of a Two-Phase System in Horizontal
Pipes. Atomic Energy Research Establishment, 1959.
[2] Xu, Yu, and Xiande Fang. “Correlations of Void Fraction for Two- Phase Refrigerant Flow in Pipes.” Applied
Thermal Engineering 64, no. 1-2 (March 2014): 242–51. doi:10.1016/j.applthermaleng.2013.12.032.
[3] Dalkilic, A. S., S. Laohalertdecha, and S. Wongwises. “Effect of Void Fraction Models on the Two-Phase Friction
Factor of R134a during Condensation in Vertical Downward Flow in a Smooth Tube.” International Communica-
tions in Heat and Mass Transfer 35, no. 8 (October 2008): 921-27. doi:10.1016/j.icheatmasstransfer.2008.04.001.
[4] Woldesemayat, Melkamu A., and Afshin J. Ghajar. “Comparison of Void Fraction Correlations for Different
Flow Patterns in Horizontal and Upward Inclined Pipes.” International Journal of Multiphase Flow 33, no. 4
(April 2007): 347-370. doi:10.1016/j.ijmultiphaseflow.2006.09.004.
[1] Nishino, Haruo, and Yasaburo Yamazaki. “A New Method of Evaluating Steam Volume Fractions in Boiling
Systems.” Journal of the Atomic Energy Society of Japan / Atomic Energy Society of Japan 5, no. 1 (1963):
39-46. doi:10.3327/jaesj.5.39.
[2] Xu, Yu, and Xiande Fang. “Correlations of Void Fraction for Two- Phase Refrigerant Flow in Pipes.” Applied
Thermal Engineering 64, no. 1-2 (March 2014): 242–51. doi:10.1016/j.applthermaleng.2013.12.032.
[3] Woldesemayat, Melkamu A., and Afshin J. Ghajar. “Comparison of Void Fraction Correlations for Different
Flow Patterns in Horizontal and Upward Inclined Pipes.” International Journal of Multiphase Flow 33, no. 4
(April 2007): 347-370. doi:10.1016/j.ijmultiphaseflow.2006.09.004.
[1] Guzhov, A. I, Vasiliı̆ Andreevich Mamaev, and G. E Odishariia. A Study of Transportation in Gas-Liquid Sys-
tems. Une Étude Sur Le Transport Des Systèmes Gaz-Liquides. Bruxelles: International Gas Union, 1967.
[2] Xu, Yu, and Xiande Fang. “Correlations of Void Fraction for Two- Phase Refrigerant Flow in Pipes.” Applied
Thermal Engineering 64, no. 1-2 (March 2014): 242–51. doi:10.1016/j.applthermaleng.2013.12.032. 921-27.
doi:10.1016/j.icheatmasstransfer.2008.04.001.
[3] Woldesemayat, Melkamu A., and Afshin J. Ghajar. “Comparison of Void Fraction Correlations for Different
Flow Patterns in Horizontal and Upward Inclined Pipes.” International Journal of Multiphase Flow 33, no. 4
(April 2007): 347-370. doi:10.1016/j.ijmultiphaseflow.2006.09.004.
[1] Kawahara, A., M. Sadatomi, K. Okayama, M. Kawaji, and P. M.-Y. Chung. “Effects of Channel Diameter and
Liquid Properties on Void Fraction in Adiabatic Two-Phase Flow Through Microchannels.” Heat Transfer En-
gineering 26, no. 3 (February 16, 2005): 13-19. doi:10.1080/01457630590907158.
[2] Xu, Yu, and Xiande Fang. “Correlations of Void Fraction for Two- Phase Refrigerant Flow in Pipes.” Applied
Thermal Engineering 64, no. 1-2 (March 2014): 242–51. doi:10.1016/j.applthermaleng.2013.12.032.
[3] Dalkilic, A. S., S. Laohalertdecha, and S. Wongwises. “Effect of Void Fraction Models on the Two-Phase Friction
Factor of R134a during Condensation in Vertical Downward Flow in a Smooth Tube.” International Communica-
tions in Heat and Mass Transfer 35, no. 8 (October 2008): 921-27. doi:10.1016/j.icheatmasstransfer.2008.04.001.
[1] Baroczy, C. Correlation of liquid fraction in two-phase flow with applications to liquid metals, Chem. Eng. Prog.
Symp. Ser. 61 (1965) 179-191.

658 Bibliography
Fluids Documentation, Release 1.0.21

[2] Xu, Yu, and Xiande Fang. “Correlations of Void Fraction for Two- Phase Refrigerant Flow in Pipes.” Applied
Thermal Engineering 64, no. 1-2 (March 2014): 242–51. doi:10.1016/j.applthermaleng.2013.12.032.
[3] Dalkilic, A. S., S. Laohalertdecha, and S. Wongwises. “Effect of Void Fraction Models on the Two-Phase Friction
Factor of R134a during Condensation in Vertical Downward Flow in a Smooth Tube.” International Communica-
tions in Heat and Mass Transfer 35, no. 8 (October 2008): 921-27. doi:10.1016/j.icheatmasstransfer.2008.04.001.
[4] Woldesemayat, Melkamu A., and Afshin J. Ghajar. “Comparison of Void Fraction Correlations for Different
Flow Patterns in Horizontal and Upward Inclined Pipes.” International Journal of Multiphase Flow 33, no. 4
(April 2007): 347-370. doi:10.1016/j.ijmultiphaseflow.2006.09.004.
[1] Tandon, T. N., H. K. Varma, and C. P. Gupta. “A Void Fraction Model for Annular Two-Phase Flow.” In-
ternational Journal of Heat and Mass Transfer 28, no. 1 (January 1, 1985): 191-198. doi:10.1016/0017-
9310(85)90021-3.
[2] Xu, Yu, and Xiande Fang. “Correlations of Void Fraction for Two- Phase Refrigerant Flow in Pipes.” Applied
Thermal Engineering 64, no. 1-2 (March 2014): 242–51. doi:10.1016/j.applthermaleng.2013.12.032.
[3] Dalkilic, A. S., S. Laohalertdecha, and S. Wongwises. “Effect of Void Fraction Models on the Two-Phase Friction
Factor of R134a during Condensation in Vertical Downward Flow in a Smooth Tube.” International Communica-
tions in Heat and Mass Transfer 35, no. 8 (October 2008): 921-27. doi:10.1016/j.icheatmasstransfer.2008.04.001.
[4] Woldesemayat, Melkamu A., and Afshin J. Ghajar. “Comparison of Void Fraction Correlations for Different
Flow Patterns in Horizontal and Upward Inclined Pipes.” International Journal of Multiphase Flow 33, no. 4
(April 2007): 347-370. doi:10.1016/j.ijmultiphaseflow.2006.09.004.
[1] Tandon, T. N., H. K. Varma, and C. P. Gupta. “A Void Fraction Model for Annular Two-Phase Flow.” In-
ternational Journal of Heat and Mass Transfer 28, no. 1 (January 1, 1985): 191-198. doi:10.1016/0017-
9310(85)90021-3.
[2] Xu, Yu, and Xiande Fang. “Correlations of Void Fraction for Two- Phase Refrigerant Flow in Pipes.” Applied
Thermal Engineering 64, no. 1-2 (March 2014): 242–51. doi:10.1016/j.applthermaleng.2013.12.032.
[3] Dalkilic, A. S., S. Laohalertdecha, and S. Wongwises. “Effect of Void Fraction Models on the Two-Phase Friction
Factor of R134a during Condensation in Vertical Downward Flow in a Smooth Tube.” International Communica-
tions in Heat and Mass Transfer 35, no. 8 (October 2008): 921-27. doi:10.1016/j.icheatmasstransfer.2008.04.001.
[1] Domanski, Piotr, and David A. Didion. “Computer Modeling of the Vapor Compression Cycle with Constant
Flow Area Expansion Device.” Report. UNT Digital Library, May 1983.
[2] Xu, Yu, and Xiande Fang. “Correlations of Void Fraction for Two- Phase Refrigerant Flow in Pipes.” Applied
Thermal Engineering 64, no. 1-2 (March 2014): 242–51. doi:10.1016/j.applthermaleng.2013.12.032.
[3] Dalkilic, A. S., S. Laohalertdecha, and S. Wongwises. “Effect of Void Fraction Models on the Two-Phase Friction
Factor of R134a during Condensation in Vertical Downward Flow in a Smooth Tube.” International Communica-
tions in Heat and Mass Transfer 35, no. 8 (October 2008): 921-27. doi:10.1016/j.icheatmasstransfer.2008.04.001.
[1] Graham, D. M. “Experimental Investigation of Void Fraction During Refrigerant Condensation.” ACRC Tech-
nical Report 135. Air Conditioning and Refrigeration Center. College of Engineering. University of Illinois at
Urbana-Champaign., December 1997.
[2] Xu, Yu, and Xiande Fang. “Correlations of Void Fraction for Two- Phase Refrigerant Flow in Pipes.” Applied
Thermal Engineering 64, no. 1-2 (March 2014): 242–51. doi:10.1016/j.applthermaleng.2013.12.032.
[3] Dalkilic, A. S., S. Laohalertdecha, and S. Wongwises. “Effect of Void Fraction Models on the Two-Phase Friction
Factor of R134a during Condensation in Vertical Downward Flow in a Smooth Tube.” International Communica-
tions in Heat and Mass Transfer 35, no. 8 (October 2008): 921-27. doi:10.1016/j.icheatmasstransfer.2008.04.001.
[1] Yashar, D. A., M. J. Wilson, H. R. Kopke, D. M. Graham, J. C. Chato, and T. A. Newell. “An Investigation of
Refrigerant Void Fraction in Horizontal, Microfin Tubes.” HVAC&R Research 7, no. 1 (January 1, 2001): 67-82.
doi:10.1080/10789669.2001.10391430.

Bibliography 659
Fluids Documentation, Release 1.0.21

[2] Xu, Yu, and Xiande Fang. “Correlations of Void Fraction for Two- Phase Refrigerant Flow in Pipes.” Applied
Thermal Engineering 64, no. 1-2 (March 2014): 242–51. doi:10.1016/j.applthermaleng.2013.12.032.
[3] Dalkilic, A. S., S. Laohalertdecha, and S. Wongwises. “Effect of Void Fraction Models on the Two-Phase Friction
Factor of R134a during Condensation in Vertical Downward Flow in a Smooth Tube.” International Communica-
tions in Heat and Mass Transfer 35, no. 8 (October 2008): 921-27. doi:10.1016/j.icheatmasstransfer.2008.04.001.
[1] Huq, Reazul, and John L. Loth. “Analytical Two-Phase Flow Void Prediction Method.” Journal of Thermophysics
and Heat Transfer 6, no. 1 (January 1, 1992): 139-44. doi:10.2514/3.329.
[2] Xu, Yu, and Xiande Fang. “Correlations of Void Fraction for Two- Phase Refrigerant Flow in Pipes.” Applied
Thermal Engineering 64, no. 1-2 (March 2014): 242–51. doi:10.1016/j.applthermaleng.2013.12.032.
[3] Dalkilic, A. S., S. Laohalertdecha, and S. Wongwises. “Effect of Void Fraction Models on the Two-Phase Friction
Factor of R134a during Condensation in Vertical Downward Flow in a Smooth Tube.” International Communica-
tions in Heat and Mass Transfer 35, no. 8 (October 2008): 921-27. doi:10.1016/j.icheatmasstransfer.2008.04.001.
[4] Woldesemayat, Melkamu A., and Afshin J. Ghajar. “Comparison of Void Fraction Correlations for Different
Flow Patterns in Horizontal and Upward Inclined Pipes.” International Journal of Multiphase Flow 33, no. 4
(April 2007): 347-370. doi:10.1016/j.ijmultiphaseflow.2006.09.004.
[1] Kopke, H. R. “Experimental Investigation of Void Fraction During Refrigerant Condensation in Horizontal
Tubes.” ACRC Technical Report 142. Air Conditioning and Refrigeration Center. College of Engineering. Uni-
versity of Illinois at Urbana-Champaign., August 1998.
[2] Xu, Yu, and Xiande Fang. “Correlations of Void Fraction for Two- Phase Refrigerant Flow in Pipes.” Applied
Thermal Engineering 64, no. 1-2 (March 2014): 242–51. doi:10.1016/j.applthermaleng.2013.12.032.
[1] Gesellschaft, V. D. I., ed. VDI Heat Atlas. 2nd edition. Berlin; New York:: Springer, 2010.
[2] Xu, Yu, and Xiande Fang. “Correlations of Void Fraction for Two- Phase Refrigerant Flow in Pipes.” Applied
Thermal Engineering 64, no. 1-2 (March 2014): 242–51. doi:10.1016/j.applthermaleng.2013.12.032.
[3] Dalkilic, A. S., S. Laohalertdecha, and S. Wongwises. “Effect of Void Fraction Models on the Two-Phase Friction
Factor of R134a during Condensation in Vertical Downward Flow in a Smooth Tube.” International Communica-
tions in Heat and Mass Transfer 35, no. 8 (October 2008): 921-27. doi:10.1016/j.icheatmasstransfer.2008.04.001.
[1] Rouhani, S. Z, and E Axelsson. “Calculation of Void Volume Fraction in the Subcooled and Quality Boiling Re-
gions.” International Journal of Heat and Mass Transfer 13, no. 2 (February 1, 1970): 383-93. doi:10.1016/0017-
9310(70)90114-6.
[2] Xu, Yu, and Xiande Fang. “Correlations of Void Fraction for Two- Phase Refrigerant Flow in Pipes.” Applied
Thermal Engineering 64, no. 1-2 (March 2014): 242–51. doi:10.1016/j.applthermaleng.2013.12.032.
[3] Woldesemayat, Melkamu A., and Afshin J. Ghajar. “Comparison of Void Fraction Correlations for Different
Flow Patterns in Horizontal and Upward Inclined Pipes.” International Journal of Multiphase Flow 33, no. 4
(April 2007): 347-370. doi:10.1016/j.ijmultiphaseflow.2006.09.004.
[1] Rouhani, S. Z, and E Axelsson. “Calculation of Void Volume Fraction in the Subcooled and Quality Boiling Re-
gions.” International Journal of Heat and Mass Transfer 13, no. 2 (February 1, 1970): 383-93. doi:10.1016/0017-
9310(70)90114-6.
[2] Xu, Yu, and Xiande Fang. “Correlations of Void Fraction for Two- Phase Refrigerant Flow in Pipes.” Applied
Thermal Engineering 64, no. 1-2 (March 2014): 242–51. doi:10.1016/j.applthermaleng.2013.12.032.
[3] Woldesemayat, Melkamu A., and Afshin J. Ghajar. “Comparison of Void Fraction Correlations for Different
Flow Patterns in Horizontal and Upward Inclined Pipes.” International Journal of Multiphase Flow 33, no. 4
(April 2007): 347-370. doi:10.1016/j.ijmultiphaseflow.2006.09.004.
[1] D. Nicklin, J. Wilkes, J. Davidson, “Two-phase flow in vertical tubes”, Trans. Inst. Chem. Eng. 40 (1962) 61-68.
[2] Xu, Yu, and Xiande Fang. “Correlations of Void Fraction for Two- Phase Refrigerant Flow in Pipes.” Applied
Thermal Engineering 64, no. 1-2 (March 2014): 242–51. doi:10.1016/j.applthermaleng.2013.12.032.

660 Bibliography
Fluids Documentation, Release 1.0.21

[3] Woldesemayat, Melkamu A., and Afshin J. Ghajar. “Comparison of Void Fraction Correlations for Different
Flow Patterns in Horizontal and Upward Inclined Pipes.” International Journal of Multiphase Flow 33, no. 4
(April 2007): 347-370. doi:10.1016/j.ijmultiphaseflow.2006.09.004.
[1] Gregory, G. A., and D. S. Scott. “Correlation of Liquid Slug Velocity and Frequency in Horizontal Cocurrent
Gas-Liquid Slug Flow.” AIChE Journal 15, no. 6 (November 1, 1969): 933-35. doi:10.1002/aic.690150623.
[2] Xu, Yu, and Xiande Fang. “Correlations of Void Fraction for Two- Phase Refrigerant Flow in Pipes.” Applied
Thermal Engineering 64, no. 1-2 (March 2014): 242–51. doi:10.1016/j.applthermaleng.2013.12.032.
[3] Woldesemayat, Melkamu A., and Afshin J. Ghajar. “Comparison of Void Fraction Correlations for Different
Flow Patterns in Horizontal and Upward Inclined Pipes.” International Journal of Multiphase Flow 33, no. 4
(April 2007): 347-370. doi:10.1016/j.ijmultiphaseflow.2006.09.004.
[1] Gary Errol. Dix. “Vapor Void Fractions for Forced Convection with Subcooled Boiling at Low Flow Rates.”
Thesis. University of California, Berkeley, 1971.
[2] Xu, Yu, and Xiande Fang. “Correlations of Void Fraction for Two- Phase Refrigerant Flow in Pipes.” Applied
Thermal Engineering 64, no. 1-2 (March 2014): 242–51. doi:10.1016/j.applthermaleng.2013.12.032.
[3] Woldesemayat, Melkamu A., and Afshin J. Ghajar. “Comparison of Void Fraction Correlations for Different
Flow Patterns in Horizontal and Upward Inclined Pipes.” International Journal of Multiphase Flow 33, no. 4
(April 2007): 347-370. doi:10.1016/j.ijmultiphaseflow.2006.09.004.
[1] K.H. Sun, R.B. Duffey, C.M. Peng, A thermal-hydraulic analysis of core uncover, in: Proceedings of the 19th
National Heat Transfer Conference, Experimental and Analytical Modeling of LWR Safety Experiments, 1980,
pp. 1-10. Orlando, Florida, USA.
[2] Xu, Yu, and Xiande Fang. “Correlations of Void Fraction for Two- Phase Refrigerant Flow in Pipes.” Applied
Thermal Engineering 64, no. 1-2 (March 2014): 242–51. doi:10.1016/j.applthermaleng.2013.12.032.
[3] Woldesemayat, Melkamu A., and Afshin J. Ghajar. “Comparison of Void Fraction Correlations for Different
Flow Patterns in Horizontal and Upward Inclined Pipes.” International Journal of Multiphase Flow 33, no. 4
(April 2007): 347-370. doi:10.1016/j.ijmultiphaseflow.2006.09.004.
[1] Xu, Yu, and Xiande Fang. “Correlations of Void Fraction for Two- Phase Refrigerant Flow in Pipes.” Applied
Thermal Engineering 64, no. 1-2 (March 2014): 242–51. doi:10.1016/j.applthermaleng.2013.12.032.
[1] Woldesemayat, Melkamu A., and Afshin J. Ghajar. “Comparison of Void Fraction Correlations for Different
Flow Patterns in Horizontal and Upward Inclined Pipes.” International Journal of Multiphase Flow 33, no. 4
(April 2007): 347-370. doi:10.1016/j.ijmultiphaseflow.2006.09.004.
[1] Lockhart, R. W. & Martinelli, R. C. (1949), “Proposed correlation of data for isothermal two-phase, two-
component flow in pipes”, Chemical Engineering Progress 45 (1), 39-48.
[2] Woldesemayat, Melkamu A., and Afshin J. Ghajar. “Comparison of Void Fraction Correlations for Different
Flow Patterns in Horizontal and Upward Inclined Pipes.” International Journal of Multiphase Flow 33, no. 4
(April 2007): 347-370. doi:10.1016/j.ijmultiphaseflow.2006.09.004.
[1] Awad, M. M., and Y. S. Muzychka. “Effective Property Models for Homogeneous Two-Phase Flows.” Experi-
mental Thermal and Fluid Science 33, no. 1 (October 1, 2008): 106-13.
[1] Beattie, D. R. H., and P. B. Whalley. “A Simple Two-Phase Frictional Pressure Drop Calculation Method.”
International Journal of Multiphase Flow 8, no. 1 (February 1, 1982): 83-87. doi:10.1016/0301-9322(82)90009-
X.
[2] Awad, M. M., and Y. S. Muzychka. “Effective Property Models for Homogeneous Two-Phase Flows.” Experi-
mental Thermal and Fluid Science 33, no. 1 (October 1, 2008): 106-13.
[3] Kim, Sung-Min, and Issam Mudawar. “Review of Databases and Predictive Methods for Pressure Drop in Adi-
abatic, Condensing and Boiling Mini/Micro-Channel Flows.” International Journal of Heat and Mass Transfer
77 (October 2014): 74-97. doi:10.1016/j.ijheatmasstransfer.2014.04.035.

Bibliography 661
Fluids Documentation, Release 1.0.21

[1] McAdams, W. H. “Vaporization inside Horizontal Tubes-II Benzene-Oil Mixtures.” Trans. ASME 39 (1949):
39-48.
[2] Awad, M. M., and Y. S. Muzychka. “Effective Property Models for Homogeneous Two-Phase Flows.” Experi-
mental Thermal and Fluid Science 33, no. 1 (October 1, 2008): 106-13.
[3] Kim, Sung-Min, and Issam Mudawar. “Review of Databases and Predictive Methods for Pressure Drop in Adi-
abatic, Condensing and Boiling Mini/Micro-Channel Flows.” International Journal of Heat and Mass Transfer
77 (October 2014): 74-97. doi:10.1016/j.ijheatmasstransfer.2014.04.035.
[1] Cicchitti, A., C. Lombardi, M. Silvestri, G. Soldaini, and R. Zavattarelli. “Two-Phase Cooling Experiments:
Pressure Drop, Heat Transfer and Burnout Measurements.” Centro Informazioni Studi Esperienze, Milan, Jan-
uary 1, 1959.
[2] Awad, M. M., and Y. S. Muzychka. “Effective Property Models for Homogeneous Two-Phase Flows.” Experi-
mental Thermal and Fluid Science 33, no. 1 (October 1, 2008): 106-13.
[3] Kim, Sung-Min, and Issam Mudawar. “Review of Databases and Predictive Methods for Pressure Drop in Adi-
abatic, Condensing and Boiling Mini/Micro-Channel Flows.” International Journal of Heat and Mass Transfer
77 (October 2014): 74-97. doi:10.1016/j.ijheatmasstransfer.2014.04.035.
[1] Lin, S., C. C. K. Kwok, R. -Y. Li, Z. -H. Chen, and Z. -Y. Chen. “Local Frictional Pressure Drop during Vapor-
ization of R-12 through Capillary Tubes.” International Journal of Multiphase Flow 17, no. 1 (January 1, 1991):
95-102. doi:10.1016/0301-9322(91)90072-B.
[2] Awad, M. M., and Y. S. Muzychka. “Effective Property Models for Homogeneous Two-Phase Flows.” Experi-
mental Thermal and Fluid Science 33, no. 1 (October 1, 2008): 106-13.
[1] Fourar, M., and S. Bories. “Experimental Study of Air-Water Two-Phase Flow through a Fracture (Narrow
Channel).” International Journal of Multiphase Flow 21, no. 4 (August 1, 1995): 621-37. doi:10.1016/0301-
9322(95)00005-I.
[2] Awad, M. M., and Y. S. Muzychka. “Effective Property Models for Homogeneous Two-Phase Flows.” Experi-
mental Thermal and Fluid Science 33, no. 1 (October 1, 2008): 106-13.
[3] Aung, NZ, and T. Yuwono. “Evaluation of Mixture Viscosity Models in the Prediction of Two-Phase Flow
Pressure Drops.” ASEAN Journal on Science and Technology for Development 29, no. 2 (2012).
[1] Fourar, M., and S. Bories. “Experimental Study of Air-Water Two-Phase Flow through a Fracture (Narrow
Channel).” International Journal of Multiphase Flow 21, no. 4 (August 1, 1995): 621-37. doi:10.1016/0301-
9322(95)00005-I.
[2] Awad, M. M., and Y. S. Muzychka. “Effective Property Models for Homogeneous Two-Phase Flows.” Experi-
mental Thermal and Fluid Science 33, no. 1 (October 1, 2008): 106-13.
[3] Kim, Sung-Min, and Issam Mudawar. “Review of Databases and Predictive Methods for Pressure Drop in Adi-
abatic, Condensing and Boiling Mini/Micro-Channel Flows.” International Journal of Heat and Mass Transfer
77 (October 2014): 74-97. doi:10.1016/j.ijheatmasstransfer.2014.04.035.
[4] Aung, NZ, and T. Yuwono. “Evaluation of Mixture Viscosity Models in the Prediction of Two-Phase Flow
Pressure Drops.” ASEAN Journal on Science and Technology for Development 29, no. 2 (2012).

662 Bibliography
PYTHON MODULE INDEX

f
fluids.atmosphere, 31
fluids.compressible, 45
fluids.control_valve, 69
fluids.core, 82
fluids.drag, 123
fluids.filters, 140
fluids.fittings, 144
fluids.flow_meter, 200
fluids.friction, 228
fluids.geometry, 279
fluids.jet_pump, 328
fluids.mixing, 335
fluids.open_flow, 342
fluids.packed_bed, 353
fluids.packed_tower, 369
fluids.particle_size_distribution, 378
fluids.piping, 410
fluids.pump, 415
fluids.safety_valve, 427
fluids.saltation, 439
fluids.separator, 435
fluids.two_phase, 445
fluids.two_phase_voidage, 475

663
Fluids Documentation, Release 1.0.21

664 Python Module Index


INDEX

A B
A_cross_sectional() (fluids.geometry.TANK Bankoff() (in module fluids.two_phase), 472
method), 282 Barati() (in module fluids.drag), 128
A_cylinder() (in module fluids.geometry), 325 Barati_high() (in module fluids.drag), 128
A_hollow_cylinder() (in module fluids.geometry), 326 Baroczy() (in module fluids.two_phase_voidage), 487
A_multiple_hole_cylinder() (in module flu- Baroczy_Chisholm() (in module fluids.two_phase), 458
ids.geometry), 327 Barr_1981() (in module fluids.friction), 246
A_partial_circle() (in module fluids.geometry), 323 Beattie_Whalley() (in module flu-
a_torispherical() (in module fluids.geometry), 322 ids.two_phase_voidage), 501
add_thickness() (fluids.geometry.TANK method), 283 Beggs_Brill() (in module fluids.two_phase), 452
agitator_time_homogeneous() (in module flu- Bejan_L() (in module fluids.core), 83
ids.mixing), 337 Bejan_p() (in module fluids.core), 83
AirCooledExchanger (class in fluids.geometry), 292 bend_miter() (in module fluids.fittings), 159
airmass() (in module fluids.atmosphere), 36 bend_miter_Miller() (in module fluids.fittings), 160
all_meters (in module fluids.flow_meter), 228 bend_rounded() (in module fluids.fittings), 155
Almedeij() (in module fluids.drag), 138 bend_rounded_Crane() (in module fluids.fittings), 157
Alshul_1952() (in module fluids.friction), 241 bend_rounded_Miller() (in module fluids.fittings),
API520_A_g() (in module fluids.safety_valve), 427 156
API520_A_steam() (in module fluids.safety_valve), 428 Biot() (in module fluids.core), 84
API520_B() (in module fluids.safety_valve), 433 Blasius() (in module fluids.friction), 239
API520_C() (in module fluids.safety_valve), 430 Boiling() (in module fluids.core), 85
API520_F2() (in module fluids.safety_valve), 430 Bond() (in module fluids.core), 85
API520_Kv() (in module fluids.safety_valve), 431 Brauer() (in module fluids.packed_bed), 359
API520_N() (in module fluids.safety_valve), 432 Brkic_2011_1() (in module fluids.friction), 255
API520_round_size() (in module fluids.safety_valve), Brkic_2011_2() (in module fluids.friction), 255
429 Buzzelli_2008() (in module fluids.friction), 253
API520_SH() (in module fluids.safety_valve), 432
API520_W() (in module fluids.safety_valve), 434 C
API526_A (in module fluids.safety_valve), 434 C2F() (in module fluids.core), 117
API526_A_sq_inch (in module fluids.safety_valve), 434 C2K() (in module fluids.core), 116
API526_letters (in module fluids.safety_valve), 434 C2R() (in module fluids.core), 118
Archimedes() (in module fluids.core), 82 C_Chezy_to_n_Manning() (in module flu-
Armand() (in module fluids.two_phase_voidage), 484 ids.open_flow), 349
AS_CAST_VENTURI_TUBE_C (in module flu- C_eccentric_orifice_ISO_15377_1998() (in mod-
ids.flow_meter), 216 ule fluids.flow_meter), 207
aspect_ratio() (in module fluids.geometry), 324 c_ideal_gas() (in module fluids.core), 121
ASTM_E11_sieves (in module flu- C_ISA_1932_nozzle() (in module fluids.flow_meter),
ids.particle_size_distribution), 404 214
ATMOSPHERE_1976 (class in fluids.atmosphere), 31 C_long_radius_nozzle() (in module flu-
ATMOSPHERE_NRLMSISE00 (class in fluids.atmosphere), ids.flow_meter), 214
34 C_Miller_1996() (in module fluids.flow_meter), 209
Avci_Karagoz_2009() (in module fluids.friction), 254

665
Fluids Documentation, Release 1.0.21

C_quarter_circle_orifice_ISO_15377_1998() (in 166


module fluids.flow_meter), 208 contraction_conical_Crane() (in module flu-
C_Reader_Harris_Gallagher() (in module flu- ids.fittings), 169
ids.flow_meter), 206 contraction_round() (in module fluids.fittings), 164
C_Reader_Harris_Gallagher_wet_venturi_tube() contraction_round_Miller() (in module flu-
(in module fluids.flow_meter), 217 ids.fittings), 166
C_venturi_nozzle() (in module fluids.flow_meter), contraction_sharp() (in module fluids.fittings), 163
215 control_valve_choke_P_g() (in module flu-
C_wedge_meter_ISO_5167_6_2017() (in module flu- ids.control_valve), 76
ids.flow_meter), 222 control_valve_choke_P_l() (in module flu-
C_wedge_meter_Miller() (in module flu- ids.control_valve), 76
ids.flow_meter), 223 control_valve_noise_g_2011() (in module flu-
Capillary() (in module fluids.core), 86 ids.control_valve), 80
Carman() (in module fluids.packed_bed), 357 control_valve_noise_l_2015() (in module flu-
Cavitation() (in module fluids.core), 87 ids.control_valve), 79
cavitation_index() (in module fluids.control_valve), convert_flow_coefficient() (in module flu-
78 ids.control_valve), 77
cdf() (fluids.particle_size_distribution.ParticleSizeDistributionContinuous
Corripio_motor_efficiency() (in module flu-
method), 380 ids.pump), 417
cdf_discrete() (fluids.particle_size_distribution.ParticleSizeDistributionContinuous
Corripio_pump_efficiency() (in module flu-
method), 380 ids.pump), 415
cdf_Gates_Gaudin_Schuhman() (in module flu- CountryPower (class in fluids.pump), 422
ids.particle_size_distribution), 400 COV_motionless_mixer() (in module fluids.mixing),
cdf_lognormal() (in module flu- 336
ids.particle_size_distribution), 398 CSA_motor_efficiency() (in module fluids.pump),
cdf_Rosin_Rammler() (in module flu- 416
ids.particle_size_distribution), 402 current_ideal() (in module fluids.pump), 422
Ceylan() (in module fluids.drag), 138 Cv_char_equal_percentage() (in module flu-
chebyshev (fluids.geometry.TANK attribute), 283 ids.control_valve), 79
Chen_1979() (in module fluids.friction), 245 Cv_char_linear() (in module fluids.control_valve), 79
Chen_Friedel() (in module fluids.two_phase), 465 Cv_char_quick_opening() (in module flu-
Cheng() (in module fluids.drag), 135 ids.control_valve), 79
Chisholm() (in module fluids.two_phase), 455 Cv_to_K() (in module fluids.fittings), 195
Chisholm_Armand() (in module flu- Cv_to_Kv() (in module fluids.fittings), 198
ids.two_phase_voidage), 484
Chisholm_voidage() (in module flu- D
ids.two_phase_voidage), 482 Darby (in module fluids.fittings), 194
Churchill_1973() (in module fluids.friction), 242 Darby3K() (in module fluids.fittings), 193
Churchill_1977() (in module fluids.friction), 244 Dean() (in module fluids.core), 88
Cicchitti() (in module fluids.two_phase_voidage), 503 delta_cdf() (fluids.particle_size_distribution.ParticleSizeDistributionCon
circle_segment_h_from_A() (in module flu- method), 381
ids.geometry), 323 density() (fluids.atmosphere.ATMOSPHERE_1976
circularity() (in module fluids.geometry), 325 static method), 32
Clamond() (in module fluids.friction), 237 density_two_phase() (in module flu-
Clift() (in module fluids.drag), 137 ids.two_phase_voidage), 477
Clift_Gauvin() (in module fluids.drag), 132 di_power() (fluids.particle_size_distribution.ParticleSizeDistribution
Colebrook() (in module fluids.friction), 236 method), 389
CONE_METER_C (in module fluids.flow_meter), 220 diameter() (fluids.geometry.HyperbolicCoolingTower
cone_meter_expansibility_Stewart() (in module method), 297
fluids.flow_meter), 221 diameter_ratio_cone_meter() (in module flu-
Confinement() (in module fluids.core), 87 ids.flow_meter), 220
contraction_beveled() (in module fluids.fittings), diameter_ratio_wedge_meter() (in module flu-
169 ids.flow_meter), 224
contraction_conical() (in module fluids.fittings),

666 Index
Fluids Documentation, Release 1.0.21

differential_pressure_meter_beta() (in module entrance_angled() (in module fluids.fittings), 147


fluids.flow_meter), 204 entrance_beveled() (in module fluids.fittings), 149
differential_pressure_meter_C_epsilon() (in entrance_beveled_orifice() (in module flu-
module fluids.flow_meter), 203 ids.fittings), 151
differential_pressure_meter_dP() (in module flu- entrance_distance() (in module fluids.fittings), 146
ids.flow_meter), 202 entrance_distance_45_Miller() (in module flu-
differential_pressure_meter_solver() (in mod- ids.fittings), 153
ule fluids.flow_meter), 201 entrance_rounded() (in module fluids.fittings), 148
diffuser_conical() (in module fluids.fittings), 171 entrance_sharp() (in module fluids.fittings), 145
diffuser_conical_staged() (in module flu- Erdim_Akgiray_Demir() (in module flu-
ids.fittings), 173 ids.packed_bed), 360
diffuser_curved() (in module fluids.fittings), 175 Ergun() (in module fluids.packed_bed), 354
diffuser_pipe_reducer() (in module fluids.fittings), Euler() (in module fluids.core), 90
176 exit_normal() (in module fluids.fittings), 154
diffuser_sharp() (in module fluids.fittings), 171
F
Dis (fluids.particle_size_distribution.ParticleSizeDistribution
property), 389 F2C() (in module fluids.core), 117
discharge_coefficient_to_K() (in module flu- F2K() (in module fluids.core), 117
ids.flow_meter), 225 F2R() (in module fluids.core), 119
Dix() (in module fluids.two_phase_voidage), 497 f_from_K() (in module fluids.core), 115
dn() (fluids.particle_size_distribution.ParticleSizeDistributionContinuous
Fahien_Schriver() (in module fluids.packed_bed), 361
method), 381 Fang_2011() (in module fluids.friction), 256
Domanski_Didion() (in module flu- Fauske() (in module fluids.two_phase_voidage), 481
ids.two_phase_voidage), 489 FF_critical_pressure_ratio_l() (in module flu-
dP_cone_meter() (in module fluids.flow_meter), 221 ids.control_valve), 72
dP_demister_dry_Setekleiv_Svendsen() (in mod- fit() (fluids.particle_size_distribution.ParticleSizeDistribution
ule fluids.packed_tower), 373 method), 390
dP_demister_dry_Setekleiv_Svendsen_lit() (in Flemmer_Banks() (in module fluids.drag), 133
module fluids.packed_tower), 374 flow_coefficient() (in module fluids.flow_meter),
dP_demister_wet_ElDessouky() (in module flu- 227
ids.packed_tower), 375 flow_meter_discharge() (in module flu-
dP_from_K() (in module fluids.core), 113 ids.flow_meter), 227
dP_orifice() (in module fluids.flow_meter), 205 fluids.atmosphere
dP_packed_bed() (in module fluids.packed_bed), 353 module, 31
dP_packed_bed_methods() (in module flu- fluids.compressible
ids.packed_bed), 354 module, 45
dP_Reader_Harris_Gallagher_wet_venturi_tube() fluids.control_valve
(in module fluids.flow_meter), 219 module, 69
dP_venturi_tube() (in module fluids.flow_meter), 216 fluids.core
dP_wedge_meter() (in module fluids.flow_meter), 224 module, 82
Drag() (in module fluids.core), 89 fluids.drag
drag_sphere() (in module fluids.drag), 123 module, 123
drag_sphere_methods() (in module fluids.drag), 127 fluids.filters
ds_discrete() (fluids.particle_size_distribution.ParticleSizeDistributionContinuous
module, 140
method), 381 fluids.fittings
Duckler() (in module fluids.two_phase_voidage), 505 module, 144
fluids.flow_meter
E module, 200
earthsun_distance() (in module fluids.atmosphere), fluids.friction
41 module, 228
Eck_1973() (in module fluids.friction), 242 fluids.geometry
Eckert() (in module fluids.core), 89 module, 279
electrical_plug_types (in module fluids.pump), 423 fluids.jet_pump
Engelund_Hansen() (in module fluids.drag), 131 module, 328

Index 667
Fluids Documentation, Release 1.0.21

fluids.mixing G
module, 335 gas_liquid_viscosity() (in module flu-
fluids.open_flow ids.two_phase_voidage), 478
module, 342 gas_liquid_viscosity_methods() (in module flu-
fluids.packed_bed ids.two_phase_voidage), 479
module, 353 gauge_from_t() (in module fluids.piping), 411
fluids.packed_tower Geldart_Ling() (in module fluids.saltation), 444
module, 369 Graetz_heat() (in module fluids.core), 94
fluids.particle_size_distribution Graf() (in module fluids.drag), 132
module, 378 Graham() (in module fluids.two_phase_voidage), 490
fluids.piping Grashof() (in module fluids.core), 95
module, 410 gravity() (fluids.atmosphere.ATMOSPHERE_1976
fluids.pump static method), 33
module, 415 gravity() (in module fluids.core), 122
fluids.safety_valve Gregory_Scott() (in module flu-
module, 427 ids.two_phase_voidage), 496
fluids.saltation Gronnerud() (in module fluids.two_phase), 461
module, 439 Guo_Sun() (in module fluids.packed_bed), 366
fluids.separator Guzhov() (in module fluids.two_phase_voidage), 485
module, 435
fluids.two_phase H
module, 445
h_from_V() (fluids.geometry.TANK method), 284
fluids.two_phase_voidage
Haaland() (in module fluids.friction), 248
module, 475
Hagen() (in module fluids.core), 96
Fourar_Bories() (in module flu-
Haider_Levenspiel() (in module fluids.drag), 134
ids.two_phase_voidage), 504
Harms() (in module fluids.two_phase_voidage), 488
Fourier_heat() (in module fluids.core), 91
Harrison_Brunner_Hecker() (in module flu-
Fourier_mass() (in module fluids.core), 92
ids.packed_bed), 364
fractions_discrete() (flu-
head_from_K() (in module fluids.core), 114
ids.particle_size_distribution.ParticleSizeDistributionContinuous
head_from_P() (in module fluids.core), 114
method), 382
helical_laminar_fd_Mori_Nakayama() (in module
friction_factor() (in module fluids.friction), 229
fluids.friction), 258
friction_factor_curved() (in module flu-
helical_laminar_fd_Schmidt() (in module flu-
ids.friction), 231
ids.friction), 258
friction_factor_curved_methods() (in module flu-
helical_laminar_fd_White() (in module flu-
ids.friction), 232
ids.friction), 257
friction_factor_methods() (in module flu-
helical_Re_crit() (in module fluids.friction), 233
ids.friction), 230
helical_transition_Re_Ito() (in module flu-
friction_laminar() (in module fluids.friction), 238
ids.friction), 265
friction_plate_Kumar() (in module fluids.friction),
helical_transition_Re_Kubair_Kuloor() (in mod-
270
ule fluids.friction), 266
friction_plate_Martin_1999() (in module flu-
helical_transition_Re_Kutateladze_Borishanskii()
ids.friction), 268
(in module fluids.friction), 266
friction_plate_Martin_VDI() (in module flu-
helical_transition_Re_Schmidt() (in module flu-
ids.friction), 269
ids.friction), 267
friction_plate_Muley_Manglik() (in module flu-
helical_transition_Re_Seth_Stahel() (in module
ids.friction), 271
fluids.friction), 265
Friedel() (in module fluids.two_phase), 454
helical_transition_Re_Srinivasan() (in module
Fritzsche() (in module fluids.compressible), 59
fluids.friction), 268
from_two_specs() (fluids.geometry.TANK static
helical_turbulent_fd_Czop() (in module flu-
method), 283
ids.friction), 261
Froude() (in module fluids.core), 92
helical_turbulent_fd_Guo() (in module flu-
Froude_densimetric() (in module fluids.core), 93
ids.friction), 262
ft_Crane() (in module fluids.friction), 234

668 Index
Fluids Documentation, Release 1.0.21

helical_turbulent_fd_Ju() (in module flu- ISO_3310_1_R40_3 (in module flu-


ids.friction), 262 ids.particle_size_distribution), 408
helical_turbulent_fd_Mandal_Nigam() (in module ISO_3310_1_sieves (in module flu-
fluids.friction), 264 ids.particle_size_distribution), 405
helical_turbulent_fd_Mori_Nakayama() (in mod- isothermal_gas() (in module fluids.compressible), 50
ule fluids.friction), 260 isothermal_work_compression() (in module flu-
helical_turbulent_fd_Prasad() (in module flu- ids.compressible), 45
ids.friction), 260
helical_turbulent_fd_Schmidt() (in module flu- J
ids.friction), 259 Jain_1976() (in module fluids.friction), 243
helical_turbulent_fd_Srinivasan() (in module Jakob() (in module fluids.core), 97
fluids.friction), 263 Jones_Krier() (in module fluids.packed_bed), 356
HelicalCoil (class in fluids.geometry), 289 Jung_Radermacher() (in module fluids.two_phase), 463
helix() (in module fluids.fittings), 161
HHR_roughness (in module fluids.friction), 274 K
Hicks() (in module fluids.packed_bed), 358
K2C() (in module fluids.core), 116
homogeneous() (in module fluids.two_phase_voidage),
K2F() (in module fluids.core), 118
483
K2R() (in module fluids.core), 119
Hooper (in module fluids.fittings), 192
K_angle_stop_check_valve_Crane() (in module flu-
Hooper2K() (in module fluids.fittings), 192
ids.fittings), 187
Huq_Loth() (in module fluids.two_phase_voidage), 491
K_angle_valve_Crane() (in module fluids.fittings),
Hwang_Kim() (in module fluids.two_phase), 469
182
hwm14() (in module fluids.atmosphere), 44
K_ball_valve_Crane() (in module fluids.fittings), 188
hwm93() (in module fluids.atmosphere), 43
K_branch_converging_Crane() (in module flu-
HyperbolicCoolingTower (class in fluids.geometry),
ids.fittings), 177
295
K_branch_diverging_Crane() (in module flu-
I ids.fittings), 179
K_butterfly_valve_Crane() (in module flu-
Idelchik() (in module fluids.packed_bed), 363 ids.fittings), 190
IGT() (in module fluids.compressible), 62 K_diaphragm_valve_Crane() (in module flu-
industrial_power (in module fluids.pump), 423 ids.fittings), 188
integrate_drag_sphere() (in module fluids.drag), K_foot_valve_Crane() (in module fluids.fittings), 189
125 K_from_f() (in module fluids.core), 111
is_choked_turbulent_g() (in module flu- K_from_L_equiv() (in module fluids.core), 112
ids.control_valve), 73 K_gate_valve_Crane() (in module fluids.fittings), 181
is_choked_turbulent_l() (in module flu- K_globe_stop_check_valve_Crane() (in module flu-
ids.control_valve), 72 ids.fittings), 186
is_critical_flow() (in module fluids.compressible), K_globe_valve_Crane() (in module fluids.fittings),
64 183
isentropic_efficiency() (in module flu- K_lift_check_valve_Crane() (in module flu-
ids.compressible), 48 ids.fittings), 184
isentropic_T_rise_compression() (in module flu- K_motionless_mixer() (in module fluids.mixing), 336
ids.compressible), 48 K_plug_valve_Crane() (in module fluids.fittings), 191
isentropic_work_compression() (in module flu- K_run_converging_Crane() (in module fluids.fittings),
ids.compressible), 46 178
ISO_15377_CONICAL_ORIFICE_C (in module flu- K_run_diverging_Crane() (in module fluids.fittings),
ids.flow_meter), 214 180
ISO_3310_1_R10 (in module flu- K_separator_demister_York() (in module flu-
ids.particle_size_distribution), 409 ids.separator), 437
ISO_3310_1_R20 (in module flu- K_separator_Watkins() (in module fluids.separator),
ids.particle_size_distribution), 407 436
ISO_3310_1_R20_3 (in module flu- K_Sounders_Brown_theoretical() (in module flu-
ids.particle_size_distribution), 408 ids.separator), 438

Index 669
Fluids Documentation, Release 1.0.21

K_swing_check_valve_Crane() (in module flu- Matsumoto_1977() (in module fluids.saltation), 442


ids.fittings), 184 McAdams() (in module fluids.two_phase_voidage), 502
K_tilting_disk_check_valve_Crane() (in module mean_size() (fluids.particle_size_distribution.ParticleSizeDistribution
fluids.fittings), 185 method), 390
K_to_Cv() (in module fluids.fittings), 196 mean_size() (fluids.particle_size_distribution.ParticleSizeDistributionCon
K_to_discharge_coefficient() (in module flu- method), 383
ids.flow_meter), 226 mean_size_ISO() (flu-
K_to_Kv() (in module fluids.fittings), 197 ids.particle_size_distribution.ParticleSizeDistribution
Kawahara() (in module fluids.two_phase_voidage), 486 method), 392
Khan_Richardson() (in module fluids.drag), 129 mean_size_ISO() (flu-
Kim_Mudawar() (in module fluids.two_phase), 457 ids.particle_size_distribution.ParticleSizeDistributionContinuous
Knudsen() (in module fluids.core), 97 method), 384
Kopte_Newell_Chato() (in module flu- Mikhailov_Freire() (in module fluids.drag), 136
ids.two_phase_voidage), 492 Mishima_Hibiki() (in module fluids.two_phase), 471
Kp_helical_ribbon_Rieger() (in module flu- module
ids.mixing), 338 fluids.atmosphere, 31
KTA() (in module fluids.packed_bed), 359 fluids.compressible, 45
Kuo_Nydegger() (in module fluids.packed_bed), 355 fluids.control_valve, 69
Kv_to_Cv() (in module fluids.fittings), 198 fluids.core, 82
Kv_to_K() (in module fluids.fittings), 195 fluids.drag, 123
fluids.filters, 140
L fluids.fittings, 144
L_equiv_from_K() (in module fluids.core), 112 fluids.flow_meter, 200
L_from_K() (in module fluids.core), 113 fluids.friction, 228
LAMINAR_TRANSITION_PIPE (in module fluids.friction), fluids.geometry, 279
257 fluids.jet_pump, 328
Lewis() (in module fluids.core), 98 fluids.mixing, 335
Lin_Kwok() (in module fluids.two_phase_voidage), 503 fluids.open_flow, 342
liquid_gas_voidage() (in module flu- fluids.packed_bed, 353
ids.two_phase_voidage), 476 fluids.packed_tower, 369
liquid_gas_voidage_methods() (in module flu- fluids.particle_size_distribution, 378
ids.two_phase_voidage), 476 fluids.piping, 410
liquid_jet_pump() (in module fluids.jet_pump), 328 fluids.pump, 415
liquid_jet_pump_ancillary() (in module flu- fluids.safety_valve, 427
ids.jet_pump), 330 fluids.saltation, 439
Lockhart_Martinelli() (in module fluids.two_phase), fluids.separator, 435
453 fluids.two_phase, 445
Lockhart_Martinelli_Xtt() (in module flu- fluids.two_phase_voidage, 475
ids.two_phase_voidage), 500 Montillet_Akkari_Comiti() (in module flu-
Lombardi_Pedrocchi() (in module fluids.two_phase), ids.packed_bed), 365
462 Moody() (in module fluids.friction), 238
loss_coefficient_piping() (in module flu- Morrison() (in module fluids.drag), 139
ids.control_valve), 75 Morsi_Alexander() (in module fluids.drag), 130
Morton() (in module fluids.core), 99
M motor_efficiency_underloaded() (in module flu-
Mach() (in module fluids.core), 99 ids.pump), 417
MACHINED_CONVERGENT_VENTURI_TUBE_C (in module motor_round_size() (in module fluids.pump), 421
fluids.flow_meter), 216 Muller() (in module fluids.compressible), 60
Manadilli_1997() (in module fluids.friction), 251 Muller_Steinhagen_Heck() (in module flu-
Mandhane_Gregory_Aziz_regime() (in module flu- ids.two_phase), 460
ids.two_phase), 473
material_roughness() (in module fluids.friction), 272 N
Matsumoto_1974() (in module fluids.saltation), 440 n_closed_conduit (in module fluids.open_flow), 351
Matsumoto_1975() (in module fluids.saltation), 441 n_dicts (in module fluids.open_flow), 351

670 Index
Fluids Documentation, Release 1.0.21

n_excavated_dredged (in module fluids.open_flow), pdf_Gates_Gaudin_Schuhman() (in module flu-


350 ids.particle_size_distribution), 400
n_lined_built (in module fluids.open_flow), 350 pdf_Gates_Gaudin_Schuhman_basis_integral()
n_Manning_to_C_Chezy() (in module flu- (in module fluids.particle_size_distribution),
ids.open_flow), 348 401
n_natural (in module fluids.open_flow), 350 pdf_lognormal() (in module flu-
nearest_material_roughness() (in module flu- ids.particle_size_distribution), 397
ids.friction), 273 pdf_lognormal_basis_integral() (in module flu-
nearest_pipe() (in module fluids.piping), 410 ids.particle_size_distribution), 399
nema_sizes (in module fluids.pump), 421 pdf_Rosin_Rammler() (in module flu-
nema_sizes_hp (in module fluids.pump), 421 ids.particle_size_distribution), 402
Nicklin_Wilkes_Davidson() (in module flu- pdf_Rosin_Rammler_basis_integral() (in module
ids.two_phase_voidage), 495 fluids.particle_size_distribution), 403
Nishino_Yamazaki() (in module flu- Peclet_heat() (in module fluids.core), 101
ids.two_phase_voidage), 485 Peclet_mass() (in module fluids.core), 102
nozzle_expansibility() (in module flu- pitch_angle_solver() (in module fluids.geometry),
ids.flow_meter), 215 320
nu_mu_converter() (in module fluids.core), 122 plate_enlargement_factor() (in module flu-
Nusselt() (in module fluids.core), 100 ids.geometry), 321
plate_exchanger_identifier (flu-
O ids.geometry.PlateExchanger property),
Ohnesorge() (in module fluids.core), 101 292
Oliphant() (in module fluids.compressible), 58 PlateExchanger (class in fluids.geometry), 290
one_phase_dP() (in module fluids.friction), 276 plot() (fluids.geometry.HyperbolicCoolingTower
one_phase_dP_acceleration() (in module flu- method), 297
ids.friction), 277 plot_cdf() (fluids.particle_size_distribution.ParticleSizeDistributionCont
one_phase_dP_dz_acceleration() (in module flu- method), 386
ids.friction), 277 plot_pdf() (fluids.particle_size_distribution.ParticleSizeDistributionCont
one_phase_dP_gravitational() (in module flu- method), 387
ids.friction), 276 polytropic_exponent() (in module flu-
oregon_smooth_data (in module fluids.friction), 272 ids.compressible), 49
orifice_expansibility() (in module flu- Power_number() (in module fluids.core), 103
ids.flow_meter), 212 Prandtl() (in module fluids.core), 104
orifice_expansibility_1989() (in module flu- Prandtl_von_Karman_Nikuradse() (in module flu-
ids.flow_meter), 213 ids.friction), 240
pressure_integral() (flu-
P ids.atmosphere.ATMOSPHERE_1976 static
method), 33
P_critical_flow() (in module fluids.compressible), 64
psd_spacing() (in module flu-
P_from_head() (in module fluids.core), 115
ids.particle_size_distribution), 409
P_isothermal_critical_flow() (in module flu-
PSDCustom (class in fluids.particle_size_distribution),
ids.compressible), 65
396
P_stagnation() (in module fluids.compressible), 67
PSDGatesGaudinSchuhman (class in flu-
P_upstream_isothermal_critical_flow() (in mod-
ids.particle_size_distribution), 395
ule fluids.compressible), 66
PSDInterpolated (class in flu-
Panhandle_A() (in module fluids.compressible), 52
ids.particle_size_distribution), 393
Panhandle_B() (in module fluids.compressible), 53
PSDLognormal (class in flu-
Papaevangelo_2010() (in module fluids.friction), 254
ids.particle_size_distribution), 394
ParticleSizeDistribution (class in flu-
PSDRosinRammler (class in flu-
ids.particle_size_distribution), 388
ids.particle_size_distribution), 396
ParticleSizeDistributionContinuous (class in flu-
ids.particle_size_distribution), 379
Q
pdf() (fluids.particle_size_distribution.ParticleSizeDistributionContinuous
method), 385 Q_weir_rectangular_full_Ackers() (in module flu-
ids.open_flow), 344

Index 671
Fluids Documentation, Release 1.0.21

Q_weir_rectangular_full_Kindsvater_Carter() SA_partial_horiz_conical_head() (in module flu-


(in module fluids.open_flow), 346 ids.geometry), 313
Q_weir_rectangular_full_Rehbock() (in module SA_partial_horiz_ellipsoidal_head() (in module
fluids.open_flow), 346 fluids.geometry), 315
Q_weir_rectangular_full_SIA() (in module flu- SA_partial_horiz_guppy_head() (in module flu-
ids.open_flow), 345 ids.geometry), 315
Q_weir_rectangular_Kindsvater_Carter() (in SA_partial_horiz_spherical_head() (in module
module fluids.open_flow), 343 fluids.geometry), 314
Q_weir_rectangular_SIA() (in module flu- SA_partial_horiz_torispherical_head() (in mod-
ids.open_flow), 343 ule fluids.geometry), 316
Q_weir_V_Shen() (in module fluids.open_flow), 342 SA_partial_sphere() (in module fluids.geometry), 310
SA_partial_vertical_conical_head() (in module
R fluids.geometry), 317
R2C() (in module fluids.core), 119 SA_partial_vertical_ellipsoidal_head() (in
R2F() (in module fluids.core), 120 module fluids.geometry), 318
R2K() (in module fluids.core), 120 SA_partial_vertical_spherical_head() (in mod-
Rao_Kumar_2007() (in module fluids.friction), 252 ule fluids.geometry), 319
Rayleigh() (in module fluids.core), 104 SA_partial_vertical_torispherical_head() (in
RectangularFinExchanger (class in fluids.geometry), module fluids.geometry), 319
297 SA_tank() (in module fluids.geometry), 287
RectangularOffsetStripFinExchanger (class in flu- SA_torispheroidal() (in module fluids.geometry), 312
ids.geometry), 299 Schade() (in module fluids.saltation), 443
relative_roughness() (in module fluids.core), 105 Schmidt() (in module fluids.core), 106
residential_power (in module fluids.pump), 425 separation_demister_ElDessouky() (in module flu-
residential_power_frequencies (in module flu- ids.packed_tower), 376
ids.pump), 423 Serghides_1() (in module fluids.friction), 249
Reynolds() (in module fluids.core), 106 Serghides_2() (in module fluids.friction), 250
Reynolds_factor() (in module fluids.control_valve), set_chebyshev_approximators() (flu-
74 ids.geometry.TANK method), 284
Reynolds_valve() (in module fluids.control_valve), 73 set_misc() (fluids.geometry.TANK method), 285
Rizk() (in module fluids.saltation), 439 set_overall_geometry() (flu-
Robbins() (in module fluids.packed_tower), 369 ids.geometry.RectangularFinExchanger
Romeo_2002() (in module fluids.friction), 251 method), 299
ROUGH_WELDED_CONVERGENT_VENTURI_TUBE_C (in set_table() (fluids.geometry.TANK method), 285
module fluids.flow_meter), 216 Shacham_1980() (in module fluids.friction), 246
roughness_Farshad() (in module fluids.friction), 273 Sherwood() (in module fluids.core), 107
Rouhani_1() (in module fluids.two_phase_voidage), 494 Sieve (class in fluids.particle_size_distribution), 404
Rouhani_2() (in module fluids.two_phase_voidage), 495 size_control_valve_g() (in module flu-
Round_1980() (in module fluids.friction), 245 ids.control_valve), 70
round_edge_grill() (in module fluids.filters), 143 size_control_valve_l() (in module flu-
round_edge_open_mesh() (in module fluids.filters), ids.control_valve), 69
141 size_tee() (in module fluids.mixing), 335
round_edge_screen() (in module fluids.filters), 141 Smith() (in module fluids.two_phase_voidage), 481
Rouse() (in module fluids.drag), 131 solar_irradiation() (in module fluids.atmosphere),
38
S solar_position() (in module fluids.atmosphere), 36
SA_conical_head() (in module fluids.geometry), 311 Song_Xu() (in module fluids.drag), 140
SA_ellipsoidal_head() (in module fluids.geometry), sonic_velocity() (flu-
310 ids.atmosphere.ATMOSPHERE_1976 static
SA_from_h() (fluids.geometry.TANK method), 282 method), 33
SA_from_h() (in module fluids.geometry), 288 Sonnad_Goudar_2006() (in module fluids.friction), 252
SA_guppy_head() (in module fluids.geometry), 311 specific_area_mesh() (in module flu-
SA_partial_cylindrical_body() (in module flu- ids.packed_tower), 377
ids.geometry), 312 specific_diameter() (in module fluids.pump), 419

672 Index
Fluids Documentation, Release 1.0.21

specific_speed() (in module fluids.pump), 419 transmission_factor() (in module fluids.friction),


speed_synchronous() (in module fluids.pump), 420 278
sphericity() (in module fluids.geometry), 324 Tsal_1989() (in module fluids.friction), 250
spiral() (in module fluids.fittings), 162 Turner_Wallis() (in module flu-
Spitzglass_high() (in module fluids.compressible), 55 ids.two_phase_voidage), 483
Spitzglass_low() (in module fluids.compressible), 57 two_phase_dP() (in module fluids.two_phase), 446
square_edge_grill() (in module fluids.filters), 143 two_phase_dP_acceleration() (in module flu-
square_edge_screen() (in module fluids.filters), 142 ids.two_phase), 448
stagnation_energy() (in module fluids.compressible), two_phase_dP_dz_acceleration() (in module flu-
66 ids.two_phase), 450
Stanton() (in module fluids.core), 108 two_phase_dP_dz_gravitational() (in module flu-
Steiner() (in module fluids.two_phase_voidage), 493 ids.two_phase), 451
Stichlmair_dry() (in module fluids.packed_tower), two_phase_dP_gravitational() (in module flu-
370 ids.two_phase), 449
Stichlmair_flood() (in module fluids.packed_tower), two_phase_dP_methods() (in module flu-
372 ids.two_phase), 447
Stichlmair_wet() (in module fluids.packed_tower), two_phase_voidage_experimental() (in module flu-
371 ids.two_phase_voidage), 501
Stokes() (in module fluids.drag), 127
Stokes_number() (in module fluids.core), 108 V
Strouhal() (in module fluids.core), 109 V_Chezy() (in module fluids.open_flow), 348
Sun_Duffey_Peng() (in module flu- V_cylinder() (in module fluids.geometry), 326
ids.two_phase_voidage), 498 V_from_h() (fluids.geometry.TANK method), 282
sunrise_sunset() (in module fluids.atmosphere), 40 V_from_h() (in module fluids.geometry), 286
Suratman() (in module fluids.core), 110 V_hollow_cylinder() (in module fluids.geometry), 327
Swamee_Jain_1976() (in module fluids.friction), 243 V_horiz_conical() (in module fluids.geometry), 300
Swamee_Ojha() (in module fluids.drag), 133 V_horiz_ellipsoidal() (in module fluids.geometry),
300
T V_horiz_guppy() (in module fluids.geometry), 301
T_critical_flow() (in module fluids.compressible), 63 V_horiz_spherical() (in module fluids.geometry), 302
t_from_gauge() (in module fluids.piping), 412 V_horiz_torispherical() (in module flu-
T_stagnation() (in module fluids.compressible), 67 ids.geometry), 303
T_stagnation_ideal() (in module flu- v_lift_valve_Crane() (in module fluids.fittings), 199
ids.compressible), 68 V_Manning() (in module fluids.open_flow), 347
table (fluids.geometry.TANK attribute), 285 V_multiple_hole_cylinder() (in module flu-
Taitel_Dukler_regime() (in module flu- ids.geometry), 327
ids.two_phase), 474 V_partial_sphere() (in module fluids.geometry), 299
Tallmadge() (in module fluids.packed_bed), 362 v_Sounders_Brown() (in module fluids.separator), 435
Tandon_Varma_Gupta() (in module flu- V_tank() (in module fluids.geometry), 285
ids.two_phase_voidage), 487 v_terminal() (in module fluids.drag), 124
TANK (class in fluids.geometry), 279 V_vertical_conical() (in module fluids.geometry),
Terfous() (in module fluids.drag), 136 304
Theissing() (in module fluids.two_phase), 459 V_vertical_conical_concave() (in module flu-
thermal_conductivity() (flu- ids.geometry), 307
ids.atmosphere.ATMOSPHERE_1976 static V_vertical_ellipsoidal() (in module flu-
method), 33 ids.geometry), 304
thermal_diffusivity() (in module fluids.core), 121 V_vertical_ellipsoidal_concave() (in module flu-
Thom() (in module fluids.two_phase_voidage), 479 ids.geometry), 307
time_helical_ribbon_Grenville() (in module flu- V_vertical_spherical() (in module fluids.geometry),
ids.mixing), 339 305
time_v_terminal_Stokes() (in module fluids.drag), V_vertical_spherical_concave() (in module flu-
126 ids.geometry), 308
Tran() (in module fluids.two_phase), 464 V_vertical_torispherical() (in module flu-
ids.geometry), 306

Index 673
Fluids Documentation, Release 1.0.21

V_vertical_torispherical_concave() (in module Z


fluids.geometry), 308 Zhang_Hibiki_Mishima() (in module flu-
vacuum_air_leakage_Coker_Worthington() (in ids.two_phase), 470
module fluids.jet_pump), 333 Zhang_Webb() (in module fluids.two_phase), 466
vacuum_air_leakage_HEI2633() (in module flu- Zigrang_Sylvester_1() (in module fluids.friction),
ids.jet_pump), 332 247
vacuum_air_leakage_Ryans_Croll() (in module flu- Zigrang_Sylvester_2() (in module fluids.friction),
ids.jet_pump), 333 248
vacuum_air_leakage_Seider() (in module flu- Zivi() (in module fluids.two_phase_voidage), 480
ids.jet_pump), 334
velocity_of_approach_factor() (in module flu-
ids.flow_meter), 226
VFD_efficiency() (in module fluids.pump), 418
viscosity() (fluids.atmosphere.ATMOSPHERE_1976
static method), 34
voidage_Benyahia_Oneil() (in module flu-
ids.packed_bed), 367
voidage_Benyahia_Oneil_cylindrical() (in mod-
ule fluids.packed_bed), 368
voidage_Benyahia_Oneil_spherical() (in module
fluids.packed_bed), 367
voidage_experimental() (in module flu-
ids.packed_tower), 377
voltages_1_phase_residential (in module flu-
ids.pump), 423
voltages_3_phase (in module fluids.pump), 423
von_Karman() (in module fluids.friction), 239
vssa (fluids.particle_size_distribution.ParticleSizeDistribution
property), 393
vssa (fluids.particle_size_distribution.ParticleSizeDistributionContinuous
property), 387

W
Wang_Chiang_Lu() (in module fluids.two_phase), 468
Weber() (in module fluids.core), 110
Weber_saltation() (in module fluids.saltation), 444
Weymouth() (in module fluids.compressible), 54
wire_schedules (in module fluids.piping), 413
Woldesemayat_Ghajar() (in module flu-
ids.two_phase_voidage), 499
Wood_1966() (in module fluids.friction), 241

X
Xu_Fang() (in module fluids.two_phase), 467
Xu_Fang_voidage() (in module flu-
ids.two_phase_voidage), 498

Y
Yashar() (in module fluids.two_phase_voidage), 491
Yen() (in module fluids.drag), 134
Yu_France() (in module fluids.two_phase), 468

674 Index

You might also like

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy