4  Hydrostatics

Hydrostatics is the branch of fluid mechanics that studies fluids at rest and the forces and pressures they exert on immersed or containing surfaces. Key principles include Pascal’s law (pressure applied to an enclosed fluid is transmitted undiminished in all directions), Archimedes’ principle (buoyant force on a submerged body equals the weight of displaced fluid), and the hydrostatic pressure distribution in a fluid column, expressed as \(p = \rho g h\), where \(p\) is gauge pressure, \(\rho\) is fluid density, \(g\) is gravitational acceleration, and \(h\) is depth below the free surface.

4.1 Pressure Head

In fluid mechanics, pressure head is the height of a fluid column that corresponds to a specific pressure at a given point, assuming the fluid is static. It’s expressed as \(h_p = \frac{p}{\rho g}\), where \(p\) is the pressure above atmospheric, \(\rho\) is the fluid density, and \(g\) is the acceleration due to gravity. The unit is typically meters (or feet) of the fluid column. Pressure head represents the potential energy per unit weight due to pressure and is a component of the total hydraulic head, which is the sum of pressure head and elevation head.

4.2 Load On Immersed Surfaces

The load on an immersed surface is the total hydrostatic force exerted by a fluid on a surface submerged in a static fluid. This force arises from the pressure variation with depth, governed by the hydrostatic pressure equation \(p = \rho g h\), where \(\rho\) is fluid density, \(g\) is gravitational acceleration, and \(h\) is the depth below the free surface.

The pressure acts perpendicular to the surface, resulting in a distributed load. The total force \(F\) is calculated as \(F = \rho g A \bar{h}\), where \(A\) is the surface area and \(\bar{h}\) is the depth of the centroid of the area.

Example 4.1 A vertical rectangular bulkhead is 7 m wide and extends over the full height of the water column. Fresh water stands 6 m deep on one side and is assumed to be at zero level on the other side. Calculate the total hydrostatic load (thrust) on the bulkhead. Density of fresh water = 1000 kg/m³.

# Given
width          = 7.0    # m (horizontal width of bulkhead)
height_water   = 6.0    # m (water depth on one side)
rho_water      = 1000.0 # kg/m³ (fresh water)
g              = 9.81   # m/s²

# Calculations
area           = width * height_water                    # m²
h_centroid     = height_water / 2                        # m (from free surface)
force_N        = rho_water * g * h_centroid * area       # Newtons
force_kN       = force_N / 1000


print("=== Hydrostatic Load on Bulkhead ===")
print(f"Bulkhead width         : {width} m")
print(f"Water depth            : {height_water} m")
print(f"Submerged area         : {area:.1f} m²")
print(f"Depth of centroid      : {h_centroid} m")
print(f"Total water load       : {force_kN:,.0f} kN  ({force_kN/1000:.3f} MN)")

Example 4.2 A 10-meter-long, 4-meter-wide, and 6-meter-high tank is filled with oil (specific gravity = 0.9). The oil rises 5 meters up a vent pipe above the tank’s top. Calculate the load on one end plate and the bottom of the tank.

# Given
tank_length      = 10.0   # m 
tank_width       = 4.0    # m 
tank_height      = 6.0    # m
sounding_pipe    = 5.0    # m (oil rises 5 m above the tank top in the vent/sounding pipe)

specific_gravity = 0.9
rho_oil          = specific_gravity * 1000   # kg/m³ 
g                = 9.81                      # m/s²

# Calculated values
total_head       = tank_height + sounding_pipe   # (from bottom to oil surface)

# End plate dimensions and force
end_height       = tank_height                  # m
end_width        = tank_width                   # m
area_end         = end_height * end_width       # m²

# Depth of centroid of end plate below oil surface = sounding_pipe + (tank_height / 2)
h_centroid_end   = sounding_pipe + (tank_height / 2)   # m

force_end_plate  = rho_oil * g * h_centroid_end * area_end

# Bottom plate force
area_bottom      = tank_length * tank_width     # m²
force_bottom     = rho_oil * g * total_head * area_bottom


print("=== Hydrostatic Loads on Oil Tank ===")
print(f"Tank dimensions       : {tank_length} m × {tank_width} m × {tank_height} m (L×W×H)")
print(f"Oil rise in sounding pipe : {sounding_pipe} m")
print(f"Oil density           : {rho_oil} kg/m³")
print()
print(f"End plate (one wall)  : {end_height} m high × {end_width} m wide = {area_end} m²")
print(f"Horizontal load on one end plate : {force_end_plate:,.0f} N  =  {force_end_plate/1000:.0f} kN")
print()
print(f"Bottom plate          : {tank_length} m × {tank_width} m = {area_bottom} m²")
print(f"Vertical load on bottom          : {force_bottom:,.0f} N  =  {force_bottom/1000:.0f} kN")

Example 4.3 A rectangular dock gate measures 4 meters wide. If the water level is 5.5 meters high on one side and 3.5 meters high on the other, what horizontal thrust will act on the gate? Assume the water density is 1000 kg/m³.


# Given

width = 4.0          # gate width in meters
h1 = 5.5             # water depth on higher side (m
h2 = 3.5             # water depth on lower side (m)
rho = 1000.0         # density of water (kg/m³)
g = 9.81             # acceleration due to gravity (m/s²)

# Hydrostatic force on higher side
A1 = h1 * width
h_c1 = h1 / 2
F1 = rho * g * h_c1 * A1

# Hydrostatic force on lower side
A2 = h2 * width
h_c2 = h2 / 2
F2 = rho * g * h_c2 * A2

# Net horizontal thrust (from higher to lower side)
F_net = F1 - F2

print("=== Hydrostatic Thrust Calculation ===")
print(f"Force from higher side (5.5 m): {F1:.0f} N")
print(f"Force from lower side  (3.5 m): {F2:.0f} N")
print(f"Net horizontal thrust on gate: {F_net:.0f} N")

Example 4.4 A rectangular dock gate measures 12 meters wide. When the sea is 9 meters deep on one side and 4.5 meters deep on the other, what horizontal thrust will act on the gate? Assume the density of seawater is 1025 kg/m³.


# Given
width = 12.0          # width of gate (m)
h1 = 9.0              # deeper side water depth (m)
h2 = 4.5              # shallower side water depth (m)
rho = 1025.0          # density of seawater (kg/m³)
g = 9.81              # acceleration due to gravity (m/s²)

# Force from deeper side (9 m)
A1 = h1 * width
h_c1 = h1 / 2   # Depth of centroid
F1 = rho * g * h_c1 * A1

# Force from shallower side (4.5 m)
A2 = h2 * width
h_c2 = h2 / 2 # Depth of centroid
F2 = rho * g * h_c2 * A2

# Net horizontal thrust
F_net = F1 - F2

print("=== Dock Gate Hydrostatic Thrust Calculation ===")
print(f"Force from 9.0 m side : {F1:,.0f} N  ({F1/1e6:.3f} MN)")
print(f"Force from 4.5 m side : {F2:,.0f} N  ({F2/1e6:.3f} MN)")
print(f"Resultant horizontal thrust: {F_net:,.0f} N  ({F_net/1000:.1f} kN or {F_net/1e6:.3f} MN)")

Example 4.5 A vertical rectangular bulkhead, 2 meters wide, divides two liquids in a tank. On one side, oil with a density of 850 kg/m³ stands 4 meters deep. On the other side, fresh water with a density of 1000 kg/m³ is 6 meters deep. The bottom of the bulkhead rests on the tank bottom, and both liquids are open to the atmosphere at the top, resulting in zero gauge pressure at the free surfaces. Calculate the magnitude and direction of the net hydrostatic thrust on the bulkhead.

# Given
width      = 2.0       # m (width of bulkhead)
h_oil      = 4.0       # m (oil depth)
h_water    = 6.0       # m (water depth)
rho_oil    = 850.0     # kg/m³
rho_water  = 1000.0    # kg/m³
g          = 9.81      # m/s²

print("Bulkhead Separating Oil and Water")
print(f"Bulkhead width          : {width} m")
print(f"Oil side    : {h_oil} m deep,   ρ = {rho_oil} kg/m³")
print(f"Water side  : {h_water} m deep,   ρ = {rho_water} kg/m³")
print()

# Force from oil side (left side assumed)
A_oil      = width * h_oil
h_c_oil    = h_oil / 2
F_oil      = rho_oil * g * h_c_oil * A_oil

# Force from water side (right side)
A_water    = width * h_water
h_c_water  = h_water / 2
F_water    = rho_water * g * h_c_water * A_water

# Net thrust
F_net_N    = F_water - F_oil                # positive, towards oil side
F_net_kN   = F_net_N / 1000



print(f"Force from oil side     : {F_oil:8.0f} N  =  {F_oil/1000:6.1f} kN")
print(f"Force from water side   : {F_water:8.0f} N  =  {F_water/1000:6.1f} kN")
print()
print(f"NET THRUST              : {F_net_N:8.0f} N  =  {F_net_kN:6.1f} kN")
print(f"Direction               :   Towards the oil side")

Example 4.6 Seawater has flooded an oil tanker’s oil tank to a depth of 4 meters, and a 10-meter layer of oil sits atop the seawater. Calculate the pressure at the bottom of the tank. Note: The density of oil is 0.85 g/cm³, the density of seawater is 1.02 t/m³, and the atmospheric pressure is 101.3 kPa.

# Given
oil_density_g_per_cm3 = 0.85      # Density of oil in g/cm³
oil_height_m = 10.0               # Height of oil layer in meters
seawater_density_t_per_m3 = 1.02  # Density of seawater in t/m³
seawater_height_m = 4.0           # Height of seawater layer in meters
atmospheric_pressure_kPa = 101.3  # Atmospheric pressure in kPa

# Convert densities to kg/m³
oil_density = oil_density_g_per_cm3 * 1000  # g/cm³ to kg/m³
seawater_density = seawater_density_t_per_m3 * 1000  # t/m³ to kg/m³

# Calculate hydrostatic pressure for each layer in Pa, then convert to kPa
pressure_oil_kPa = (oil_density * g * oil_height_m) / 1000
pressure_seawater_kPa = (seawater_density * g * seawater_height_m) / 1000

# Total gauge pressure in kPa
gauge_pressure_kPa = pressure_oil_kPa + pressure_seawater_kPa

# Absolute pressure in kPa
absolute_pressure_kPa = atmospheric_pressure_kPa + gauge_pressure_kPa

# Output the result
print(f"Pressure due to oil layer: {pressure_oil_kPa:.4f} kPa")
print(f"Pressure due to seawater layer: {pressure_seawater_kPa:.4f} kPa")
print(f"Total gauge pressure: {gauge_pressure_kPa:.4f} kPa")
print(f"Absolute pressure at the bottom: {absolute_pressure_kPa:.4f} kPa")

4.3 Hydraulic Jacks

Hydraulic jacks use Pascal’s law to lift heavy loads with minimal input force. Pascal’s law states that pressure applied to an enclosed fluid is transmitted equally in all directions. In a hydraulic jack, two pistons of different sizes are connected by a confined fluid. Applying an effort force to the smaller piston generates a pressure that is transmitted to the larger piston, producing an output force. Calculations involving hydraulic jacks, such as determining system pressure, required input force, or lifted load, rely on this principle under ideal conditions, neglecting friction and fluid compressibility.

Example 4.7 A force of 150 N is transmitted from a piston of 25 mm² to one of 100 mm². Determine the system pressure and the load carried by the larger piston.

import math

# Given parameters
area_small_mm2 = 25.0      # mm² (small piston)
area_large_mm2 = 100.0     # mm² (large piston)
force_small = 150.0        # N (force applied to small piston)

# Convert areas to base SI units (m²)
area_small = area_small_mm2 * 1e-6  # 1 mm² = 10^{-6} m²
area_large = area_large_mm2 * 1e-6

# System pressure (Pa)
pressure = force_small / area_small

# Load on larger piston (N)
load_large = pressure * area_large

# Output results
print(f"System pressure: {pressure:.2f} Pa (or {pressure / 1e6:.1f} MPa)")
print(f"Load carried by larger piston: {load_large:.1f} N")

Example 4.8 A simple hydraulic jack consists of a small effort plunger with a diameter of 25 mm and a large load piston with a diameter of 70 mm. The jack lifts a load of 5.88 kN. Calculate:

  1. The pressure in the hydraulic fluid (system pressure).

  2. The force exerted on the small plunger (load on the small plunger) required to support the given load, assuming ideal conditions (no losses).

import math

# Given
diameter_small = 0.025  # m (effort plunger)
diameter_large = 0.070  # m (load piston)
load = 5880.0           # N (equivalent to 5.88 kN)

# Calculate radii
radius_small = diameter_small / 2
radius_large = diameter_large / 2

# Cross-sectional areas (m²)
area_small = math.pi * (radius_small ** 2)
area_large = math.pi * (radius_large ** 2)

# System pressure (Pa)
pressure = load / area_large

# Ideal force on small plunger (N)
force_small = pressure * area_small

# Output results
print(f"System pressure: {pressure:.2f} Pa (or {pressure / 1e6:.3f} MPa)")
print(f"Ideal force on small plunger: {force_small:.1f} N")