MEASUR-Tools-Suite v1.0.11
The MEASUR Tools Suite is a collection of industrial efficiency calculations written in C++ and with bindings for compilation to WebAssembly.
Loading...
Searching...
No Matches
Classes | Functions | Variables
receiver_tank Namespace Reference

Compressed air receiver tank sizing and usable capacity calculations. More...

Classes

struct  BridgingInput
 Input parameters for the Bridging Compressor Reaction Delay sizing method. More...
 
struct  CompressorCycleInput
 Input parameters for the Compressor Cycle sizing method. More...
 
struct  CompressorCycleResult
 Result of the Compressor Cycle sizing calculation. More...
 
struct  DedicatedStorageInput
 Input parameters for the Dedicated Storage sizing method. More...
 
struct  GeneralInput
 Input parameters for the General sizing method. More...
 
struct  MeteredStorageInput
 Input parameters for the Metered Storage sizing method. More...
 
struct  MeteredStorageResult
 Result of the Metered Storage sizing calculation. More...
 
struct  SizeResult
 Tank size result shared by the General, Dedicated Storage, and Bridging methods. More...
 
struct  UsableCapacityInput
 Input parameters for the usable air capacity calculation. More...
 
struct  UsableCapacityResult
 Result of the usable air capacity calculation. More...
 

Functions

UsableCapacityResult calculateUsableCapacity (const UsableCapacityInput &input)
 Calculates the usable air capacity of a receiver tank.
 
SizeResult calculateGeneralSize (const GeneralInput &input)
 Calculates receiver tank size using the General method.
 
SizeResult calculateDedicatedStorageSize (const DedicatedStorageInput &input)
 Calculates receiver tank size using the Dedicated Storage method.
 
MeteredStorageResult calculateMeteredStorageSize (const MeteredStorageInput &input)
 Calculates receiver tank size and refill time using the Metered Storage method.
 
SizeResult calculateBridgingSize (const BridgingInput &input)
 Calculates receiver tank size using the Bridging Compressor Reaction Delay method.
 
CompressorCycleResult calculateCompressorCycleSize (const CompressorCycleInput &input)
 Calculates receiver tank size from the compressor duty cycle and pressure band.
 

Variables

constexpr double kGallonsPerCubicFoot = 7.48
 U.S. customary conversion: gallons per cubic foot \([\unit{\gallon\per\cubicFoot}]\).
 
constexpr double kCubicFeetPerGallon = 0.133681
 U.S. customary conversion: cubic feet per gallon \([\unit{\cubicFoot\per\gallon}]\).
 

Detailed Description

This namespace provides four sizing methods and one capacity method:

See also
Receiver Tank Calculator

Function Documentation

◆ calculateBridgingSize()

SizeResult receiver_tank::calculateBridgingSize ( const BridgingInput input)

Sizes a tank that must supply air for the time it takes the pressure signal to travel from the demand event back to the compressor room and for the compressor to respond. The transit time is: \(t_{transit} = d_{pipe} / v_{air}\) (seconds).

\begin{equation}\label{eq:receiver-tank-bridging-size} V_{tank} = \frac{d_{pipe}}{v_{air}} \cdot \frac{Q_{demand}}{60} \cdot \frac{P_{atm}}{\Delta P} \cdot k_{gal} \end{equation}

where:

\(V_{tank}\)Required receiver tank size \([\unit{ \gallon}]\)
\(d_{pipe}\)Distance from demand event to compressor room \([\unit{ \foot}]\)
\(v_{air}\)Speed of air in the distribution piping \([\unit{ \foot\per\second}]\)
\(Q_{demand}\)Air demand at the event location \([\unit{ \cubicFoot\per\minute}]\)
\(60\)Minutes-to-seconds conversion \([\unit{ \second\per\minute}]\)
\(P_{atm}\)Atmospheric pressure \([\unit{ \psi}]\)
\(\Delta P\)Allowable pressure drop \([\unit{ \psi}]\)
\(k_{gal}\)Gallons per cubic foot (7.48) \([\unit{ \gallon\per\cubicFoot}]\)
Note
\(d_{pipe} / v_{air}\) is the signal transit time in seconds. Dividing \(Q_{demand}\) by 60 converts cfm to ft³/s so that the product gives a volume in ft³, which is then converted to gallons.
Parameters
[in]inputBridgingInput
Returns
SizeResult containing the required tank size in gallons.

◆ calculateCompressorCycleSize()

CompressorCycleResult receiver_tank::calculateCompressorCycleSize ( const CompressorCycleInput input)

Sizes a receiver tank so that the compressor can run at its natural load/unload cycle without short-cycling. The effective net capacity is the fraction of the compressor's rated output actually consumed during a cycle, and the required storage volume is the amount of air that must be stored during the unloaded interval to keep system pressure within the operating band.

\begin{equation}\label{eq:receiver-tank-compressor-cycle-size} V_{required} = \frac{Q_{comp} \cdot t_{load} \cdot t_{unload} \cdot P_{atm}} {60 \cdot (t_{load} + t_{unload}) \cdot (P_{unload} - P_{load})} \cdot k_{gal} \end{equation}

where:

\(V_{required}\)Required receiver tank size \([\unit{ \gallon}]\)
\(Q_{comp}\)Rated compressor capacity at full load \([\unit{ \cubicFoot\per\minute}]\)
\(t_{load}\)Compressor loaded time per cycle \([\unit{ \minute}]\)
\(t_{unload}\)Compressor unloaded time per cycle \([\unit{ \minute}]\)
\(P_{atm}\)Atmospheric pressure \([\unit{ \psi}]\)
\(P_{unload}\)Compressor unload pressure \([\unit{ \psi}]\)
\(P_{load}\)Compressor full-load pressure \([\unit{ \psi}]\)
\(60\)Seconds per minute conversion \([\unit{ \second\per\minute}]\)
\(k_{gal}\)Gallons per cubic foot (7.48) \([\unit{ \gallon\per\cubicFoot}]\)
Note
The numerator factor \(Q_{comp} \cdot t_{load} / (t_{load} + t_{unload})\) is the effective net capacity — the average flow the compressor delivers over a full cycle. Multiplying by \(t_{unload}\) converts that rate to the volume (ft³) that must be buffered during the unloaded phase.
Parameters
[in]inputCompressorCycleInput
Returns
CompressorCycleResult containing the required tank size in gallons together with the intermediate results: effective capacity (cfm), pressure change (psi), and area storage volume (ft³).

◆ calculateDedicatedStorageSize()

SizeResult receiver_tank::calculateDedicatedStorageSize ( const DedicatedStorageInput input)

Sizes a tank that must deliver a sustained air flow for a defined duration, drawing down from an initial to a final operating pressure:

\begin{equation}\label{eq:receiver-tank-dedicated-storage-size} V_{tank} = \frac{k_{gal} \cdot t_{demand} \cdot Q_{flow} \cdot P_{atm}}{P_1 - P_2} \end{equation}

where:

\(V_{tank}\)Required receiver tank size \([\unit{ \gallon}]\)
\(k_{gal}\)Gallons per cubic foot (7.48) \([\unit{ \gallon\per\cubicFoot}]\)
\(t_{demand}\)Duration of the air demand event \([\unit{ \minute}]\)
\(Q_{flow}\)Required air flow rate \([\unit{ \cubicFoot\per\minute}]\)
\(P_{atm}\)Atmospheric pressure \([\unit{ \psi}]\)
\(P_1\)Initial tank pressure \([\unit{ \psi}]\)
\(P_2\)Final tank pressure \([\unit{ \psi}]\)
Note
Use this method when a receiver must independently supply a process for a measured time period from stored compressed air.
Parameters
[in]inputDedicatedStorageInput
Returns
SizeResult containing the required tank size in gallons.

◆ calculateGeneralSize()

SizeResult receiver_tank::calculateGeneralSize ( const GeneralInput input)

Sizes a receiver tank to deliver a known air demand while limiting the pressure drop to the specified allowable value:

\begin{equation}\label{eq:receiver-tank-general-size} V_{tank} = Q_{demand} \cdot \frac{P_{atm}}{\Delta P} \cdot k_{gal} \end{equation}

where:

\(V_{tank}\)Required receiver tank size \([\unit{ \gallon}]\)
\(Q_{demand}\)Air demand drawn from the tank \([\unit{ \cubicFoot}]\)
\(P_{atm}\)Atmospheric pressure \([\unit{ \psi}]\)
\(\Delta P\)Allowable pressure drop \([\unit{ \psi}]\)
\(k_{gal}\)Gallons per cubic foot (7.48) \([\unit{ \gallon\per\cubicFoot}]\)
Note
Use this method when the required tank size must be calculated from a known air demand and a pressure drop budget.
Parameters
[in]inputGeneralInput
Returns
SizeResult containing the required tank size in gallons.

◆ calculateMeteredStorageSize()

MeteredStorageResult receiver_tank::calculateMeteredStorageSize ( const MeteredStorageInput input)

The demand event draws air at \(Q_{flow}\) while the metering valve supplies air at the controlled rate \(Q_{metered}\). Only the net demand \((Q_{flow} - Q_{metered})\) depletes the stored volume.

Tank Size:

\begin{equation}\label{eq:receiver-tank-metered-storage-size} V_{tank} = \frac{k_{gal} \cdot t_{demand} \cdot (Q_{flow} - Q_{metered}) \cdot P_{atm}}{P_1 - P_2} \end{equation}

Refill Time:

\begin{equation}\label{eq:receiver-tank-metered-storage-refill} T_{refill} = \frac{60 \cdot V_{cf} \cdot (P_1 - P_2)}{Q_{metered} \cdot P_{atm}} \end{equation}

where \(V_{cf} = V_{tank} \cdot k_{cf}\) is the tank volume in cubic feet, and:

\(V_{tank}\)Required receiver tank size \([\unit{ \gallon}]\)
\(V_{cf}\)Tank volume in cubic feet \([\unit{ \cubicFoot}]\)
\(k_{gal}\)Gallons per cubic foot (7.48) \([\unit{ \gallon\per\cubicFoot}]\)
\(k_{cf}\)Cubic feet per gallon (0.133681) \([\unit{ \cubicFoot\per\gallon}]\)
\(t_{demand}\)Duration of the air demand event \([\unit{ \minute}]\)
\(Q_{flow}\)Required air flow rate \([\unit{ \cubicFoot\per\minute}]\)
\(Q_{metered}\)Metering valve flow rate \([\unit{ \cubicFoot\per\minute}]\)
\(P_{atm}\)Atmospheric pressure \([\unit{ \psi}]\)
\(P_1\)Initial tank pressure \([\unit{ \psi}]\)
\(P_2\)Final tank pressure \([\unit{ \psi}]\)
\(T_{refill}\)Tank refill time \([\unit{ \second}]\)
\(60\)Seconds per minute conversion \([\unit{ \second\per\minute}]\)
Note
The factor of 60 in the refill formula converts the computed duration (in minutes, since \(Q_{metered}\) is in cfm) to seconds.
Parameters
[in]inputMeteredStorageInput
Returns
MeteredStorageResult containing tank size in gallons and refill time in seconds.

◆ calculateUsableCapacity()

UsableCapacityResult receiver_tank::calculateUsableCapacity ( const UsableCapacityInput input)

Converts the tank volume to cubic feet and scales by the available pressure differential relative to atmospheric pressure:

\begin{equation}\label{eq:receiver-tank-usable-capacity} V_{usable} = \frac{V_{tank}}{k_{gal}} \cdot \frac{P_{in} - P_{out}}{P_{atm}} \end{equation}

where:

\(V_{usable}\)Usable air storage capacity \([\unit{ \scf}]\)
\(V_{tank}\)Tank volume \([\unit{ \gallon}]\)
\(k_{gal}\)Gallons per cubic foot (7.48) \([\unit{ \gallon\per\cubicFoot}]\)
\(P_{in}\)Charging (inlet) pressure \([\unit{ \psi}]\)
\(P_{out}\)Cut-out (outlet) pressure \([\unit{ \psi}]\)
\(P_{atm}\)Atmospheric pressure (14.7 psia) \([\unit{ \psi}]\)
Note
The 7.48 gal/ft³ factor is the standard US customary volumetric conversion. \(P_{atm}\) is 14.7 psia at sea level (see physics::us::kAtmosphericPressurePsi).
Parameters
[in]inputUsableCapacityInput
Returns
UsableCapacityResult containing the usable capacity in scf.

Variable Documentation

◆ kCubicFeetPerGallon

constexpr double receiver_tank::kCubicFeetPerGallon = 0.133681
inlineconstexpr

Definition at line 43 of file receiver_tank.h.

◆ kGallonsPerCubicFoot

constexpr double receiver_tank::kGallonsPerCubicFoot = 7.48
inlineconstexpr

Definition at line 40 of file receiver_tank.h.