Tank and helical coil sizing (fluids.geometry)¶

class
fluids.geometry.
TANK
(D=None, L=None, horizontal=True, sideA=None, sideB=None, sideA_a=0, sideB_a=0, sideA_f=1.0, sideA_k=0.06, sideB_f=1.0, sideB_k=0.06, sideA_a_ratio=0.25, sideB_a_ratio=0.25, L_over_D=None, V=None)[source]¶ 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’].
 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
Dishradius parameter for side A; fD = dish radius [1/m]
 sideA_k : float, optional
knuckleradius parameter for side A; kD = knuckle radius [1/m]
 sideB_f : float, optional
Dishradius parameter for side B; fD = dish radius [1/m]
 sideB_k : float, optional
knuckleradius parameter for side B; kD = knuckle radius [1/m]
 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 semielliptical 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 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.44209706414415384
Surface area of a tank with a conical head:
>>> 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.94775907657148, 5.118555935958284, 5.497246519930003, 14.331956620683192)
Solving for tank volumes, first horizontal, then vertical:
>>> TANK(D=10., horizontal=True, sideA='conical', sideB='conical', V=500).L 4.699531057009147 >>> TANK(L=4.69953105701, horizontal=True, sideA='conical', sideB='conical', V=500).D 9.999999999999407 >>> TANK(L_over_D=0.469953105701, horizontal=True, sideA='conical', sideB='conical', V=500).L 4.69953105700979
>>> TANK(D=10., horizontal=False, sideA='conical', sideB='conical', V=500).L 4.699531057009147 >>> TANK(L=4.69953105701, horizontal=False, sideA='conical', sideB='conical', V=500).D 9.999999999999407 >>> TANK(L_over_D=0.469953105701, horizontal=False, sideA='conical', sideB='conical', V=500).L 4.699531057009791
Attributes:  table : bool
Whether or not a table of heightsvolumes has been generated
 h_max : float
Height of the tank, [m]
 V_total : float
Total volume of the tank as calculated [m^3]
 heights : ndarray
Array of heights between 0 and h_max, [m]
 volumes : ndarray
Array of volumes calculated from the heights, [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]
 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, []
Methods
V_from_h
(h[, method])Method to calculate the volume of liquid in a fully defined tank given a specified height h. h_from_V
(V[, method])Method to calculate the height of liquid in a fully defined 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 heightvolume and volumeheight 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. solve_tank_for_V
()Method which is called to solve for tank geometry when a certain volume is specified. 
V_from_h
(h, method='full')[source]¶ 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.
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]

chebyshev
= False¶

h_from_V
(V, method='spline')[source]¶ 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)[source]¶ Method to derive and set coefficients for chebyshev polynomial function approximation of the heightvolume and volumeheight relationship.
A single set of chebyshev coefficients is used for the entire height volume and volumeheight 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 machine precision.
Parameters:  deg_forward : int, optional
The degree of the chebyshev polynomial to be created for the V_from_h curve, []
 deg_backwards : int, optional
The degree of the chebyshev polynomial to be created for the h_from_V curve, []

set_misc
()[source]¶ 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)[source]¶ 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]

solve_tank_for_V
()[source]¶ Method which is called to solve for tank geometry when a certain volume is specified. Will be called by the __init__ method if V is set.
Notes
Raises an error if L and either of sideA_a or sideB_a are specified; these can only be set once D is known. Raises an error if more than one of D, L, or L_over_D are specified. Raises an error if the head ratios are not provided.
Calculates initial guesses assuming no heads are present, and then uses fsolve to determine the correct dimentions for the tank.
Tested, but bugs and limitations are expected here.

table
= False¶

class
fluids.geometry.
HelicalCoil
(Dt, Do=None, pitch=None, H=None, N=None, H_total=None, Do_total=None, Di=None)[source]¶ 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, optional
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]
Notes
Do must be larger than Dt.
References
[1] ElGenk, 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): 128. doi:10.1080/01457632.2016.1194693. 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; \(C = \pi D_o\), [m]
 tube_length : float
Length of tube used to make the helical coil; \(L = \sqrt{(\pi D_o\cdot N)^2 + H^2}\), [m]
 surface_area : float
Surface area of the outer surface of the helical coil; \(A_t = \pi D_t L\), [m^2]
 inner_surface_area : float
Surface area of the inner surface of the helical coil; calculated if Di is supplied; \(A_{inside} = \pi D_i L\), [m^2]
 inlet_area : float
Area of the inlet to the helical coil; calculated if Di is supplied; \(A_{inlet} = \frac{\pi}{4} D_i^2\), [m^2]
 inner_volume : float
Volume of the tube as would be filled by a fluid, useful for weight calculations; calculated if Di is supplied; \(V_{inside} = A_i L\), [m^3]
 annulus_area : float
Area of the annulus (wall of the pipe); calculated if Di is supplied; \(A_a = \frac{\pi}{4} (D_t^2  D_i^2)\), [m^2]
 annulus_volume : float
Volume of the annulus (wall of the pipe); calculated if Di is supplied, useful for weight calculations; \(V_a = A_a L\), [m^3]
 total_volume : float
Total volume occupied by the pipe and the fluid inside it; \(V = D_t L\), [m^3]
 helix_angle : float
Angle between the pitch and coil diameter; used in some calculations; \(\alpha = \arctan \left(\frac{p_t}{\pi D_o}\right)\), [radians]
 curvature : float
Coil curvature, useful in some calculations; \(\delta = \frac{D_t}{D_o[1 + 4\pi^2 \tan^2(\alpha)]}\), []

class
fluids.geometry.
PlateExchanger
(amplitude, wavelength, chevron_angle=45, width=None, length=None, thickness=None, d_port=None, plates=None)[source]¶ 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 or tuple(2), 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. Many plate exchangers use two alternating patterns; use a tuple of the two angles for that situation [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] Amalfi, Raffaele L., Farzad VakiliFarahani, and John R. Thome. “Flow Boiling and Frictional Pressure Gradients in Plate Heat Exchangers. Part 1: Review and Experimental Database.” International Journal of Refrigeration 61 (January 2016): 16684. doi:10.1016/j.ijrefrig.2015.07.010. Examples
>>> PlateExchanger(amplitude=5E4, wavelength=3.7E3, 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), [degrees]
 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]
 plate_corrugation_aspect_ratio : float
The aspect ratio of the corrugations \(\gamma = \frac{4a}{\lambda}\), []
 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, \(D_{eq} = 4a\) [m]
 D_hydraulic : float
Hydraulic diameter of the channels, \(D_{hyd} = \frac{4a}{\phi}\) [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), \(A_p = L\cdot W\cdot \phi\) [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, \(W\cdot b\) [m^2]
 channels : int
The number of plates minus one, []
 channels_per_fluid : int
Half the number of total channels, []
plate_exchanger_identifier
: strMethod to create an identifying string in format ‘L’ + wavelength + ‘A’ + amplitude + ‘B’ + chevron anglechevron angle.
Methods
plate_enlargement_factor_analytical
(…)Calculates the enhancement factor of the sinusoidal waves of the plate heat exchanger. 
static
plate_enlargement_factor_analytical
(amplitude, wavelength)[source]¶ 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:
\[ \begin{align}\begin{aligned}\phi = \frac{\text{Effective area}}{\text{Projected area}} = \frac{\int_0^\lambda\sqrt{1 + \left(\frac{\gamma\pi}{2}\right)^2 \cos^2\left(\frac{2\pi}{\lambda}x\right)}dx}{\lambda}\\\gamma = \frac{4a}{\lambda}\end{aligned}\end{align} \]The solution to the integral is:
\[\phi = \frac{2E\left(\frac{4a^2\pi^2}{\lambda^2}\right)}{\pi}\]where E is the complete elliptic integral of the second kind, calculated with SciPy.
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:
\[ \begin{align}\begin{aligned}\phi = \frac{1}{6}\left(1+\sqrt{1+A^2} + 4\sqrt{1+A^2/2}\right)\\A = \frac{2\pi a}{\lambda}\end{aligned}\end{align} \]Most plate heat exchangers approximate a sinusoidal geometry only.
Examples
>>> PlateExchanger.plate_enlargement_factor_analytical(amplitude=5E4, wavelength=3.7E3) 1.1611862034509677

plate_exchanger_identifier
¶ Method to create an identifying string in format ‘L’ + wavelength + ‘A’ + amplitude + ‘B’ + chevron anglechevron angle. Wavelength and amplitude are specified in units of mm and rounded to two decimal places.

class
fluids.geometry.
RectangularFinExchanger
(fin_height, fin_thickness, fin_spacing, length=None, width=None, layers=None, plate_thickness=None, flow='crossflow')[source]¶ Bases:
object
Class representing a platefin 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 holding 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 platefin exchanger (abbreviated L), [m]
 width : float, optional
The total width of the space the fins are in; this is also \(N_{fins}\times s\) (abbreviated W), [m]
 layers : int, optional
The number of layers in the platefin exchanger; note these HX almost always singlepass 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] Yang, Yujie, and Yanzhong Li. “General Prediction of the Thermal Hydraulic Performance for PlateFin Heat Exchanger with Offset Strip Fins.” International Journal of Heat and Mass Transfer 78 (November 1, 2014): 86070. 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 PlateFin Heat ExchangersA Review.” Renewable and Sustainable Energy Reviews 14, no. 1 (January 2010): 47885. doi:10.1016/j.rser.2009.06.033. 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 \(\text{channel height } = \text{fin height}  \text{fin thickness}\), [m]
 channel_width : float
The width of the channel the fluid flows in \(\text{channel width } = \text{fin spacing}  \text{fin thickness}\), [m]
 fin_count : int
The number of fins per unit length of the layer, \(\text{fin count} = \frac{1}{\text{fin spacing}}\), [1/m]
 blockage_ratio : float
The fraction of the layer which is blocked to flow by the fins, \(\text{blockage ratio} = \frac{s\cdot h  s\cdot t  t(ht)}{s\cdot h}\), [m]
 A_channel : float
Flow area of a single channel in a single layer, \(\text{channel area} = (st)(ht)\), [m]
 P_channel : float
Wetted perimeter of a single channel in a single layer, \(\text{channel perimeter} = 2(st) + 2(ht)\), [m]
 Dh : float
Hydraulic diameter of a single channel in a single layer, \(D_{hydraulic} = \frac{4 A_{channel}}{P_{channel}}\), [m]
 layer_thickness : float
The thickness of a single layer  the sum of a fin height and a plate thickness, [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]
 A_specific_HX : float
The specific surface area of the heat exchanger  square meters per meter cubed, [m^3]
Methods
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')[source]¶ Bases:
fluids.geometry.RectangularFinExchanger
Methods
set_overall_geometry

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)[source]¶ 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.
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 concrete section ends), [m]
 D_inlet : float, optional
The inside diameter of the cooling tower inlet at the elevation the concrete 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] 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. 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:  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, depending on the height specified. plot 
diameter
(H)[source]¶ Calculates cooling tower diameter at a specified height, using the formulas for either hyperbola, depending on the height specified.
\[D = D_{throat}\frac{\sqrt{H^2 + b^2}}{b}\]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]

fluids.geometry.
SA_partial_sphere
(D, h)[source]¶ 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.
\[ \begin{align}\begin{aligned}a = \sqrt{h(2r  h)}\\A = \pi(a^2 + h^2)\end{aligned}\end{align} \]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] (1, 2) Weisstein, Eric W. “Spherical Cap.” Text. Accessed December 22, 2015. http://mathworld.wolfram.com/SphericalCap.html. Examples
>>> SA_partial_sphere(1., 0.7) 2.199114857512855

fluids.geometry.
V_partial_sphere
(D, h)[source]¶ 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.
\[ \begin{align}\begin{aligned}a = \sqrt{h(2r  h)}\\V = 1/6 \pi h(3a^2 + h^2)\end{aligned}\end{align} \]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] (1, 2) Weisstein, Eric W. “Spherical Cap.” Text. Accessed December 22, 2015. http://mathworld.wolfram.com/SphericalCap.html. Examples
>>> V_partial_sphere(1., 0.7) 0.4105014400690663

fluids.geometry.
V_horiz_conical
(D, L, a, h, headonly=False)[source]¶ Calculates volume of a tank with conical ends, according to [1].
\[ \begin{align}\begin{aligned}\begin{split}V_f = A_fL + \frac{2aR^2}{3}K, \;\;0 \le h < R\\\end{split}\\\begin{split}V_f = A_fL + \frac{2aR^2}{3}\pi/2,\;\; h = R\\\end{split}\\V_f = A_fL + \frac{2aR^2}{3}(\piK), \;\; R< h \le 2R\\K = \cos^{1} M + M^3\cosh^{1} \frac{1}{M}  2M\sqrt{1  M^2}\\M = \left\frac{Rh}{R}\right\\Af = R^2\cos^{1}\frac{Rh}{R}  (Rh)\sqrt{2Rh  h^2}\end{aligned}\end{align} \]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] (1, 2, 3) Jones, D. “Calculating Tank Volume.” Text. Accessed December 22, 2015. http://www.webcalc.com.br/blog/Tank_Volume.PDF 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)[source]¶ Calculates volume of a tank with ellipsoidal ends, according to [1].
\[ \begin{align}\begin{aligned}V_f = A_fL + \pi a h^2\left(1  \frac{h}{3R}\right)\\Af = R^2\cos^{1}\frac{Rh}{R}  (Rh)\sqrt{2Rh  h^2}\end{aligned}\end{align} \]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] (1, 2, 3) Jones, D. “Calculating Tank Volume.” Text. Accessed December 22, 2015. http://www.webcalc.com.br/blog/Tank_Volume.PDF 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)[source]¶ Calculates volume of a tank with guppy heads, according to [1].
\[ \begin{align}\begin{aligned}V_f = A_fL + \frac{2aR^2}{3}\cos^{1}\left(1  \frac{h}{R}\right) +\frac{2a}{9R}\sqrt{2Rh  h^2}(2h3R)(h+R)\\Af = R^2\cos^{1}\frac{Rh}{R}  (Rh)\sqrt{2Rh  h^2}\end{aligned}\end{align} \]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]
References
[1] (1, 2, 3) Jones, D. “Calculating Tank Volume.” Text. Accessed December 22, 2015. http://www.webcalc.com.br/blog/Tank_Volume.PDF 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)[source]¶ Calculates volume of a tank with spherical heads, according to [1].
\[ \begin{align}\begin{aligned}V_f = A_fL + \frac{\pi a}{6}(3R^2 + a^2),\;\; h = R, a\le R\\V_f = A_fL + \frac{\pi a}{3}(3R^2 + a^2),\;\; h = D, a\le R\\V_f = A_fL + \pi a h^2\left(1  \frac{h}{3R}\right),\;\; h = 0, \text{ or } a = 0, R, R\\V_f = A_fL + \frac{a}{a}\left\{\frac{2r^3}{3}\left[\cos^{1} \frac{R^2  rw}{R(wr)} + \cos^{1}\frac{R^2 + rw}{R(w+r)}  \frac{z}{r}\left(2 + \left(\frac{R}{r}\right)^2\right) \cos^{1}\frac{w}{R}\right]  2\left(wr^2  \frac{w^3}{3}\right) \tan^{1}\frac{y}{z} + \frac{4wyz}{3}\right\} ,\;\; h \ne R, D; a \ne 0, R, R, a \ge 0.01D\\V_f = A_fL + \frac{a}{a}\left[2\int_w^R(r^2  x^2)\tan^{1} \sqrt{\frac{R^2x^2}{r^2R^2}}dx  A_f z\right] ,\;\; h \ne R, D; a \ne 0, R, R, a < 0.01D\\Af = R^2\cos^{1}\frac{Rh}{R}  (Rh)\sqrt{2Rh  h^2}\\r = \frac{a^2 + R^2}{2a}\\w = R  h\\y = \sqrt{2Rhh^2}\\z = \sqrt{r^2  R^2}\end{aligned}\end{align} \]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]
References
[1] (1, 2, 3) Jones, D. “Calculating Tank Volume.” Text. Accessed December 22, 2015. http://www.webcalc.com.br/blog/Tank_Volume.PDF 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)[source]¶ Calculates volume of a tank with torispherical heads, according to [1].
\[ \begin{align}\begin{aligned}\begin{split}V_f = A_fL + 2V_1, \;\; 0 \le h \le h_1\\ V_f = A_fL + 2(V_{1,max} + V_2 + V_3), \;\; h_1 < h < h_2\\ V_f = A_fL + 2[2V_{1,max}  V_1(h=Dh) + V_{2,max} + V_{3,max}] , \;\; h_2 \le h \le D\end{split}\\V_1 = \int_0^{\sqrt{2kDh  h^2}} \left[n^2\sin^{1}\frac{\sqrt {n^2w^2}}{n}  w\sqrt{n^2w^2}\right]dx\\V_2 = \int_0^{kD\cos\alpha}\left[n^2\left(\cos^{1}\frac{w}{n}  \cos^{1}\frac{g}{n}\right)  w\sqrt{n^2  w^2} + g\sqrt{n^2  g^2}\right]dx\\V_3 = \int_w^g(r^2  x^2)\tan^{1}\frac{\sqrt{g^2  x^2}}{z}dx  \frac{z}{2}\left(g^2\cos^{1}\frac{w}{g}  w\sqrt{2g(hh_1)  (hh_1)^2}\right)\\V_{1,max} = v_1(h=h_1)\\v_{2,max} = v_2(h=h_2)\\v_{3,max} = \frac{\pi a_1}{6}(3g^2 + a_1^2)\\a_1 = fD(1\cos\alpha)\\\alpha = \sin^{1}\frac{12k}{2(fk)}\\n = R  kD + \sqrt{k^2D^2x^2}\\g = r\sin\alpha\\r = fD\\h_2 = D  h_1\\w = R  h\\z = \sqrt{r^2 g^2}\end{aligned}\end{align} \]Parameters:  D : float
Diameter of the main cylindrical section, [m]
 L : float
Length of the main cylindrical section, [m]
 f : float
Dishradius parameter; fD = dish radius [1/m]
 k : float
knuckleradius parameter ; kD = knuckle radius [1/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] (1, 2, 3) Jones, D. “Calculating Tank Volume.” Text. Accessed December 22, 2015. http://www.webcalc.com.br/blog/Tank_Volume.PDF 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.626670842139

fluids.geometry.
V_vertical_conical
(D, a, h)[source]¶ 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.
\[ \begin{align}\begin{aligned}V_f = \frac{\pi}{4}\left(\frac{Dh}{a}\right)^2\left(\frac{h}{3}\right),\; h < a\\V_f = \frac{\pi D^2}{4}\left(h  \frac{2a}{3}\right),\; h\ge a\end{aligned}\end{align} \]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] (1, 2, 3) Jones, D. “Calculating Tank Volume.” Text. Accessed December 22, 2015. http://www.webcalc.com.br/blog/Tank_Volume.PDF Examples
Matching example from [1], with inputs in inches and volume in gallons.
>>> V_vertical_conical(132., 33., 24)/231. 250.67461381371024

fluids.geometry.
V_vertical_ellipsoidal
(D, a, h)[source]¶ 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.
\[ \begin{align}\begin{aligned}V_f = \frac{\pi}{4}\left(\frac{Dh}{a}\right)^2 \left(a  \frac{h}{3}\right),\; h < a\\V_f = \frac{\pi D^2}{4}\left(h  \frac{a}{3}\right),\; h \ge a\end{aligned}\end{align} \]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] (1, 2, 3) Jones, D. “Calculating Tank Volume.” Text. Accessed December 22, 2015. http://www.webcalc.com.br/blog/Tank_Volume.PDF 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)[source]¶ 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.
\[ \begin{align}\begin{aligned}V_f = \frac{\pi h^2}{4}\left(2a + \frac{D^2}{2a}  \frac{4h}{3}\right),\; h < a\\V_f = \frac{\pi}{4}\left(\frac{2a^3}{3}  \frac{aD^2}{2} + hD^2\right),\; h\ge a\end{aligned}\end{align} \]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]
References
[1] (1, 2, 3) Jones, D. “Calculating Tank Volume.” Text. Accessed December 22, 2015. http://www.webcalc.com.br/blog/Tank_Volume.PDF 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)[source]¶ 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.
\[ \begin{align}\begin{aligned}V_f = \frac{\pi h^2}{4}\left(2a_1 + \frac{D_1^2}{2a_1}  \frac{4h}{3}\right),\; 0 \le h \le a_1\\V_f = \frac{\pi}{4}\left(\frac{2a_1^3}{3} + \frac{a_1D_1^2}{2}\right) +\pi u\left[\left(\frac{D}{2}kD\right)^2 +s\right] + \frac{\pi tu^2}{2}  \frac{\pi u^3}{3} + \pi D(12k)\left[ \frac{2ut}{4}\sqrt{s+tuu^2} + \frac{t\sqrt{s}}{4} + \frac{k^2D^2}{2}\left(\cos^{1}\frac{t2u}{2kD}\alpha\right)\right] ,\; a_1 < h \le a_1 + a_2\\V_f = \frac{\pi}{4}\left(\frac{2a_1^3}{3} + \frac{a_1D_1^2}{2}\right) +\frac{\pi t}{2}\left[\left(\frac{D}{2}kD\right)^2 +s\right] +\frac{\pi t^3}{12} + \pi D(12k)\left[\frac{t\sqrt{s}}{4} + \frac{k^2D^2}{2}\sin^{1}(\cos\alpha)\right] + \frac{\pi D^2}{4}[h(a_1+a_2)] ,\; a_1 + a_2 < h\\\alpha = \sin^{1}\frac{12k}{2(fk)}\\a_1 = fD(1\cos\alpha)\\a_2 = kD\cos\alpha\\D_1 = 2fD\sin\alpha\\s = (kD\sin\alpha)^2\\t = 2a_2\\u = h  fD(1\cos\alpha)\end{aligned}\end{align} \]Parameters:  D : float
Diameter of the main cylindrical section, [m]
 f : float
Dishradius parameter; fD = dish radius [1/m]
 k : float
knuckleradius parameter ; kD = knuckle radius [1/m]
 h : float
Height, as measured up to where the fluid ends, [m]
Returns:  V : float
Volume [m^3]
References
[1] (1, 2, 3) Jones, D. “Calculating Tank Volume.” Text. Accessed December 22, 2015. http://www.webcalc.com.br/blog/Tank_Volume.PDF 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.0688283793511

fluids.geometry.
V_vertical_conical_concave
(D, a, h)[source]¶ 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.
\[ \begin{align}\begin{aligned}V = \frac{\pi D^2}{12} \left(3h + a  \frac{(a+h)^3}{a^2}\right) ,\;\; 0 \le h < a\\V = \frac{\pi D^2}{12} (3h + a ),\;\; h \ge a\end{aligned}\end{align} \]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] (1, 2, 3) Jones, D. “Compute Fluid Volumes in Vertical Tanks.” Chemical Processing. December 18, 2003. http://www.chemicalprocessing.com/articles/2003/193/ 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)[source]¶ 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.
\[ \begin{align}\begin{aligned}V = \frac{\pi D^2}{12} \left(3h + 2a  \frac{(a+h)^2(2ah)}{a^2}\right) ,\;\; 0 \le h < a\\V = \frac{\pi D^2}{12} (3h + 2a ),\;\; h \ge a\end{aligned}\end{align} \]Parameters:  D : float
Diameter of the main cylindrical section, [m]
 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] (1, 2, 3) Jones, D. “Compute Fluid Volumes in Vertical Tanks.” Chemical Processing. December 18, 2003. http://www.chemicalprocessing.com/articles/2003/193/ 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)[source]¶ 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.
\[ \begin{align}\begin{aligned}V = \frac{\pi}{12}\left[3D^2h + \frac{a}{2}(3D^2 + 4a^2) + (a+h)^3 \left(4  \frac{3D^2 + 12a^2}{2a(a+h)}\right)\right],\;\; 0 \le h < a\\V = \frac{\pi}{12}\left[3D^2h + \frac{a}{2}(3D^2 + 4a^2) \right] ,\;\; h \ge a\end{aligned}\end{align} \]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] (1, 2, 3) Jones, D. “Compute Fluid Volumes in Vertical Tanks.” Chemical Processing. December 18, 2003. http://www.chemicalprocessing.com/articles/2003/193/ 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)[source]¶ 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.
\[ \begin{align}\begin{aligned}V = \frac{\pi D^2 h}{4}  v_1(h=a_1+a_2) + v_1(h=a_1 + a_2 h),\; 0 \le h < a_2\\V = \frac{\pi D^2 h}{4}  v_1(h=a_1+a_2) + v_2(h=a_1 + a_2 h),\; a_2 \le h < a_1 + a_2\\V = \frac{\pi D^2 h}{4}  v_1(h=a_1+a_2) + 0,\; h \ge a_1 + a_2\\v_1 = \frac{\pi}{4}\left(\frac{2a_1^3}{3} + \frac{a_1D_1^2}{2}\right) +\pi u\left[\left(\frac{D}{2}kD\right)^2 +s\right] + \frac{\pi tu^2}{2}  \frac{\pi u^3}{3} + \pi D(12k)\left[ \frac{2ut}{4}\sqrt{s+tuu^2} + \frac{t\sqrt{s}}{4} + \frac{k^2D^2}{2}\left(\cos^{1}\frac{t2u}{2kD}\alpha\right)\right]\\v_2 = \frac{\pi h^2}{4}\left(2a_1 + \frac{D_1^2}{2a_1}  \frac{4h}{3}\right)\\\alpha = \sin^{1}\frac{12k}{2(fk)}\\a_1 = fD(1\cos\alpha)\\a_2 = kD\cos\alpha\\D_1 = 2fD\sin\alpha\\s = (kD\sin\alpha)^2\\t = 2a_2\\u = h  fD(1\cos\alpha)\end{aligned}\end{align} \]Parameters:  D : float
Diameter of the main cylindrical section, [m]
 f : float
Dishradius parameter; fD = dish radius [1/m]
 k : float
knuckleradius parameter ; kD = knuckle radius [1/m]
 h : float
Height, as measured up to where the fluid ends, [m]
Returns:  V : float
Volume [m^3]
References
[1] (1, 2, 3) Jones, D. “Compute Fluid Volumes in Vertical Tanks.” Chemical Processing. December 18, 2003. http://www.chemicalprocessing.com/articles/2003/193/ 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

fluids.geometry.
a_torispherical
(D, f, k)[source]¶ Calculates depth of a torispherical head according to [1].
\[ \begin{align}\begin{aligned}a = a_1 + a_2\\\alpha = \sin^{1}\frac{12k}{2(fk)}\\a_1 = fD(1\cos\alpha)\\a_2 = kD\cos\alpha\end{aligned}\end{align} \]Parameters:  D : float
Diameter of the main cylindrical section, [m]
 f : float
Dishradius parameter; fD = dish radius [1/m]
 k : float
knuckleradius parameter ; kD = knuckle radius [1/m]
Returns:  a : float
Depth of head [m]
References
[1] (1, 2, 3) Jones, D. “Calculating Tank Volume.” Text. Accessed December 22, 2015. http://www.webcalc.com.br/blog/Tank_Volume.PDF Examples
Example from [1].
>>> a_torispherical(D=96., f=0.9, k=0.2) 25.684268924767125

fluids.geometry.
SA_ellipsoidal_head
(D, a)[source]¶ Calculates the surface area of an ellipsoidal head according to [1]. Formula below is for the full shape, the result of which is halved. The formula also does not support D being larger than a; this is ensured by simply swapping the variables if necessary, as geometrically the result is the same. In the equations
\[ \begin{align}\begin{aligned}SA = 2\pi a^2 + \frac{\pi c^2}{e_1}\ln\left(\frac{1+e_1}{1e_1}\right)\\e_1 = \sqrt{1  \frac{c^2}{a^2}}\end{aligned}\end{align} \]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]
References
[1] (1, 2) Weisstein, Eric W. “Spheroid.” Text. Accessed March 14, 2016. http://mathworld.wolfram.com/Spheroid.html. Examples
Spherical case
>>> SA_ellipsoidal_head(2, 1) 6.283185307179586

fluids.geometry.
SA_conical_head
(D, a)[source]¶ Calculates the surface area of a conical head according to [1].
\[SA = \frac{\pi D}{2} \sqrt{a^2 + \left(\frac{D}{2}\right)^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] (1, 2) Weisstein, Eric W. “Cone.” Text. Accessed March 14, 2016. http://mathworld.wolfram.com/Cone.html. Examples
>>> SA_conical_head(2, 1) 4.442882938158366

fluids.geometry.
SA_guppy_head
(D, a)[source]¶ 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.
\[SA = \frac{\pi D}{4}\sqrt{D^2 + a^2} + \frac{\pi D}{2}a\]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] (1, 2) Weisstein, Eric W. “Cone.” Text. Accessed March 14, 2016. http://mathworld.wolfram.com/Cone.html. Examples
>>> SA_guppy_head(2, 1) 6.654000019110157

fluids.geometry.
SA_torispheroidal
(D, fd, fk)[source]¶ Calculates surface area of a torispherical head according to [1]. Somewhat involved. Equations are adapted to be used for a full head.
\[ \begin{align}\begin{aligned}SA = S_1 + S_2\\S_1 = 2\pi D^2 f_d \alpha\\S_2 = 2\pi D^2 f_k\left(\alpha  \alpha_1 + (0.5  f_k)\left(\sin^{1} \left(\frac{\alpha\alpha_2}{f_k}\right)  \sin^{1}\left(\frac{ \alpha_1\alpha_2}{f_k}\right)\right)\right)\\\alpha_1 = f_d\left(1  \sqrt{1  \left(\frac{0.5  f_k}{f_df_k} \right)^2}\right)\\\alpha_2 = f_d  \sqrt{f_d^2  2f_d f_k + f_k  0.25}\\\alpha = \frac{a}{D_i}\end{aligned}\end{align} \]Parameters:  D : float
Diameter of the main cylindrical section, [m]
 fd : float
Dishradius parameter = f; fD = dish radius [1/m]
 fk : float
knuckleradius parameter = k; kD = knuckle radius [1/m]
Returns:  SA : float
Surface area [m^2]
References
[1] (1, 2, 3) Honeywell. “Calculate Surface Areas and Crosssectional Areas in Vessels with Dished Heads”. https://www.honeywellprocess.com/library/marketing/whitepapers/WPVesselsWithDishedHeadsUniSimDesign.pdf Whitepaper. 2014. Examples
Example from [1].
>>> SA_torispheroidal(D=2.54, fd=1.039370079, fk=0.062362205) 6.00394283477063

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)[source]¶ 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
Dishradius parameter for side A; fD = dish radius [1/m]
 sideA_k : float, optional
knuckleradius parameter for side A; kD = knuckle radius [1/m]
 sideB_f : float, optional
Dishradius parameter for side B; fD = dish radius [1/m]
 sideB_k : float, optional
knuckleradius parameter for side B; kD = knuckle radius [1/m]
Returns:  V : float
Volume up to h [m^3]
References
[1] (1, 2) Jones, D. “Compute Fluid Volumes in Vertical Tanks.” Chemical Processing. December 18, 2003. http://www.chemicalprocessing.com/articles/2003/193/ 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, full_output=False)[source]¶ 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
Dishradius parameter for side A; fD = dish radius [1/m]
 sideA_k : float, optional
knuckleradius parameter for side A; kD = knuckle radius [1/m]
 sideB_f : float, optional
Dishradius parameter for side B; fD = dish radius [1/m]
 sideB_k : float, optional
knuckleradius parameter for side B; kD = knuckle radius [1/m]
Returns:  SA : float
Surface area of the tank [m^2]
 areas : tuple, only returned if full_output == True
(sideA_SA, sideB_SA, lateral_SA)
Other Parameters:  full_output : bool, optional
Returns a tuple of (sideA_SA, sideB_SA, lateral_SA) if True
Examples
Cylinder, Spheroid, Long Cones, and spheres. All checked.
>>> SA_tank(D=2, L=2) 18.84955592153876 >>> SA_tank(D=1., L=0, sideA='ellipsoidal', sideA_a=2, sideB='ellipsoidal', ... sideB_a=2) 28.480278854014387 >>> SA_tank(D=1., L=5, sideA='conical', sideA_a=2, sideB='conical', ... sideB_a=2) 22.18452243965656 >>> SA_tank(D=1., L=5, sideA='spherical', sideA_a=0.5, sideB='spherical', ... sideB_a=0.5) 18.84955592153876

fluids.geometry.
sphericity
(A, V)[source]¶ 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.
\[\Psi = \frac{\text{A of sphere with } V_p } {{A}_p} = \frac{\pi^{\frac{1}{3}}(6V_p)^{\frac{2}{3}}}{A_p}\]Parameters:  A : float
Surface area of particle, [m^2]
 V : float
Volume of particle, [m^3]
Returns:  Psi : float
Sphericity []
Notes
All nonspherical particles have spericities less than 1 but greater than 0. Many common geometrical shapes have their results calculated exactly in [2].
References
[1] Rhodes, Martin J., ed. Introduction to Particle Technology. 2E. Chichester, England ; Hoboken, NJ: Wiley, 2008. [2] (1, 2) “Sphericity.” Wikipedia, March 8, 2017. https://en.wikipedia.org/w/index.php?title=Sphericity&oldid=769183043 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

fluids.geometry.
aspect_ratio
(Dmin, Dmax)[source]¶ Returns the aspect ratio of a shape with minimum and maximum dimension, Dmin and Dmax.
\[A_R = \frac{D_{min}}{D_{max}}\]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)[source]¶ Returns the circularity of a shape with area A and perimeter P.
\[f_{circ} = \frac {4 \pi A} {P^2}\]Defined to be 1 for a circle. Used to characterize particles. Any noncircular 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)[source]¶ Returns the surface area of a cylinder.
\[A = \pi D L + 2\cdot \frac{\pi D^2}{4}\]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)[source]¶ Returns the volume of a cylinder.
\[V = \frac{\pi D^2}{4}L\]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.853981633974484e06

fluids.geometry.
A_hollow_cylinder
(Di, Do, L)[source]¶ Returns the surface area of a hollow cylinder.
\[A = \pi D_o L + \pi D_i L + 2\cdot \frac{\pi D_o^2}{4}  2\cdot \frac{\pi D_i^2}{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]
Examples
>>> A_hollow_cylinder(0.005, 0.01, 0.1) 0.004830198704894308

fluids.geometry.
V_hollow_cylinder
(Di, Do, L)[source]¶ Returns the volume of a hollow cylinder.
\[V = \frac{\pi D_o^2}{4}L  L\frac{\pi D_i^2}{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.890486225480862e06

fluids.geometry.
A_multiple_hole_cylinder
(Do, L, holes)[source]¶ 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.
\[A = \pi D_o L + 2\cdot \frac{\pi D_o^2}{4} + \sum_{i}^n \left( \pi D_i L  2\cdot \frac{\pi D_i^2}{4}\right)\]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)[source]¶ 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.
\[V = \frac{\pi D_o^2}{4}L  L\frac{\pi D_i^2}{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:  V : float
Volume [m^3]
Examples
>>> V_multiple_hole_cylinder(0.01, 0.1, [(0.005, 1)]) 5.890486225480862e06