This is one of those random things that came up, through work, where I was surprised to find a relative void of info on the internet: sizing a gooseneck for an aboveground storage tank.

Venting for aboveground storage tanks is dealt with in standards such as API 2000, which gives the venting as an equivalent flowrate of air at standard state. Most off the shelf venting you would want is sized in terms of pressure drop and SCF/hr through it. For example for an emergency vent from Morrison brothers:

But if you want a goose neck vent, it is up to you to figure out the size you need for the required venting. Which really isn't super challenging, so let's step through it.

### The gooseneck

This particular gooseneck is a vertical length of pipe, two 90 degree bends, and a mesh screen exit. The gooseneck is a constant diameter throughout.

Some basic dimensions are needed, if only as an initial guess:

- The diameter of the pipe,
*D* - The length of the vertical length of pipe,
*L* - The pipe roughness,
*ε* - The bend radius of the first elbow,
*r*_{1} - The bend radius of the second elbow,
*r*_{2}

### Normal conditions or Actual conditions?

I'm assuming the flowrate comes from API 2000, and is a flowrate of air at normal conditions. In API 2000 the reference state is different if the calculations are done in SI versus USC, oddly, and furthermore the definition of STP is slightly different than the IUPAC definition of STP, the reference pressure is 1atm instead of 1bar. So keep that in the back of your head.

In terms of real numbers, "Normal" means:

- Molar mass,
*M*= 0.02896 kg/mol - Temperature,
*T*= 273.15 K - Pressure,
*P*= 101.325 kPa - Heat capacity ratio,
*k*= 1.4 - Density,
*ρ*= 1.293 kg/m^{3} - Viscosity,
*μ*= 1.7238×10^{-5}Pa*s

But what about the flow through the gooseneck? The actual fluid in the tank is something different, and at a different pressure and temperature. However API 2000 tries to find a common ground for vents and the tanks that need the venting through correlating everything to air at normal conditions. To stay consistent with that logic, I advocate presuming the flow is air at normal conditions (well, API "Normal" which is abnormal)

### Flowrates, mass flux, Reynolds number

If the vent has a constant cross sectional area the mass velocity, *G*, is constant throughout, which is convenient since the Reynold's number is then largely only dependent on temperature.

The mass velocity is given by: $$ G = \frac{4 \dot{m} }{\pi D^2} $$

And the Reynolds number: $$ Re = \frac{G D}{\mu} $$

The only parameter in the Reynolds number that changes is the viscosity, *μ*, which is mostly dependent upon temperature and not pressure. Perry's has a correlation of the viscosity of air as a function of absolute temperature:

$$ \mu = { { 1.425 \times 10^{-6} T^{0.5039} } \over { 1 + \frac{108.3}{T} }} $$

Where *μ* is in Pa*s and *T* is in K.

### Interlude on compressibility

Compressible flow can be modeled in a variety of ways, most commonly to assume isothermal or adiabatic fanno flow.

Isothermal is fairly straight forward. As already mentioned the Reynold's number depends only on temperature, which is constant, so the Reynold's number is constant throughout. This means the frictional head loss is constant throughout, and it is a simple matter of calculating the pressure drop.

Adiabatic flow can be annoying since the temperature varies throughout the pipe, and thus the Reynold's number varies, sometimes quite significantly, through the pipe. This leads to an iterative series of calculations, starting by assuming a constant friction factor, calculating the pressure and temperature changes, adjusting the friction factor and iterating until everything converges.

### Frictional head loss

Books like Crane's TP-410 or Perry's are great places to start in search of K factors for fittings and correlations for Darcy or Fanning friction factors of the straight sections. I use Crane's, and so everything is in terms of Darcy friction factors, which are 4× the fanning friction factor.

The K factors are given by the following:

Gooseneck Vent Component | K |

Entrance to gooseneck | $$ 0.5 $$ |

Length of vertical pipe | $$ f \frac{L}{D} $$ |

First 90 bend | $$ C f_{T} $$ |

Second 90 bend | $$ C f_{T} $$ |

Mesh Screen | $$ f_{T} $$ |

Exit to atmosphere | $$ 1.0 $$ |

Each bend has a constant, *C*, that depends upon the bend radius, the values of the constant are tabulated in Crane TP-410 (pg. A-30). The straight pipe friction factor, *f*, can be calculated using the Serghide equation:

$$ f = \left[ A - { { \left( B-A \right)^2 } \over { C - 2B + A } } \right]^{-2} $$

$$ A = -2 \log \left[ \frac{\varepsilon / D}{3.7} + \frac{12}{Re} \right] $$ $$ B = -2 \log \left[ \frac{\varepsilon / D}{3.7} + \frac{2.51A}{Re} \right] $$ $$ C = -2 \log \left[ \frac{\varepsilon / D}{3.7} + \frac{2.51B}{Re} \right] $$

The turbulent friction factor, *f _{T}*, is given by the following:
$$ f_{T} = 0.25 \left[ \log \frac{\varepsilon / D}{3.7} \right]^{-2} $$

### Isothermal Compressible Flow

Suppose the air outside the tank is at normal conditions, and the temperature is constant throughout. I chose this assumption because it fits with my mental model of what we are doing, basically we are trying to math our way to a number that in practice would be obtained by taking a tank at ambient conditions, pressurizing it up until we got the pressure drop we wanted, then measuring the flow through vent. In this case we are just mathing our way backwards from a given flow at the exit (into ambient and "normal" conditions) back to what was going on inside the tank.

A quick note: Everything from here on out is in le *Systeme Internationale*, so pressures are in *Pa* not *kPa*. As a matter of style I think people should always run their calcs in SI because it really eliminates unit conversion factors and a lot of the book keeping around units.

Pressure Pa | Temperature K | |

Entrance | $ p_{i} $ | $ 273.15 $ |

Exit | $ 101325 $ | $ 273.15 $ |

The pressure inside is given by: $$ p_{i}^{2} = G^{2} \frac{RT}{M} \left[ \sum \limits_{j} K_{j} + 2\ln \frac{p_{i}}{p_{o}} \right] + p_{o}^{2} $$

The only unknown is *p _{i}*, which can be solved for numerically with a computer or by hand by fixed point iteration (if you are a masochist).

### Adiabatic (Fanno) Flow

Adiabatic flow, or Fanno flow, adds some wrinkles. The temperature is no longer constant, which means the Reynold's number is no longer constant. The two unknowns are the pressure and temperature *inside* the tank. The two are related to each other in a complex way since the temperature determines the Reynolds number which (through the total velocity head) determines the temperature and pressure. The easiest way to deal with this is two loops, the inner loop finds the temperature and pressure and the outer loop the Reynold's number.

Pressure Pa | Temperature K | |

Entrance | $ p_{i} $ | $ T_{i} $ |

Exit | $ 101325 $ | $ 273.15 $ |

As a first step, calculate the mass velocity, *G*, Reynolds number, total velocity head $ \sum \limits_{j} K_{j} $, and Mach number at exit conditions.

$$ Ma_{o} = \frac{v}{c} = \frac{G}{p_{o}} \sqrt{ \frac{RT_{o}}{kM} } $$

And the Fanno parameter at the exit:

$$ \left( \frac{fL^{*}}{D} \right)_{o} = \frac{1 - Ma_{o}^{2}}{kMa_{o}^{2}} + \frac{k+1}{2k} \ln \left( \frac{ \left( k+1 \right) Ma_{o}^{2} }{ 2+\left( k+1 \right) Ma_{o}^{2} } \right) $$

The Fanno parameter at the entrance is given by:

$$ \left( \frac{fL^{*}}{D} \right)_{i} = \left( \frac{fL^{*}}{D} \right)_{o} + \sum \limits_{j} K_{j} $$

Where the total velocity head, $ \sum \limits_{j} K_{j} $, has been calculated at the exit conditions.

Now comes the main part of the inner loop: calculating the Mach number at the entrance. Using whatever numerical method you like, Newton's method works pretty well, find the Mach number for the entrance. This is the root of:

$$ \left( \frac{fL^{*}}{D} \right)_{i} - \frac{1 - Ma_{i}^{2}}{kMa_{i}^{2}} - \frac{k+1}{2k} \ln \left( \frac{ \left( k+1 \right) Ma_{i}^{2} }{ 2+\left( k+1 \right) Ma_{i}^{2} } \right) = 0 $$

Now calculate the temperature at the entrance:

$$ T_{i} = T_{o} \frac{2 + \left( k-1 \right) Ma_{o}^{2}}{2 + \left( k-1 \right) Ma_{i}^{2}} $$

The pressure at the entrance can be found by recalling that *G* is constant throughout, and using the ideal gas law:

$$ p_{i} = \frac{G}{Ma_{i}} \sqrt{ \frac{RT_{i}}{kM} } $$

Now, since the Reynolds number is temperature dependent, you need to calculate a new Reynolds number based on the average of the inner and outer temperatures and repeat (This is the outer loop repeating).