Chapter 32
Pascal and Archimedes Pressure Balance
Fluid and Mechanical Media
Author: Mark Anthony Higgins
© Mark Anthony Higgins 11 October 2025
Revised Date: 23 February 2026
flow "Pascal and Archimedes — Pressure Balance" v1.0
# ---------- PURPOSE ----------
# Unifies Pascal’s law (pressure transmission) and Archimedes’ principle (buoyancy)
# as one pressure-field balance. Adds a boundary coherence index (IB) to account for
# losses (leaks, compliance, trapped gas, surface roughness) and optional compressibility.
# ---------- PARAMETERS ----------
params:
units: "SI"
rho_fluid: positive # fluid density [kg/m^3]
g: positive = 9.80665
IB: 0.0..1.0 # coherence of pressure transmission (1 = ideal)
compressible: false # if true, allow small density changes with p
beta: positive? # bulk compressibility [1/Pa], when compressible = true
gamma_cap: real? # optional surface tension / capillary head [Pa] adjustment
p_atm: real = 101325 # ambient reference pressure [Pa]
# ---------- STATE ----------
state Fluid:
p0: real # reference pressure at free surface [Pa]
z0: real = 0 # reference elevation [m]
state PascalCell:
A_in: positive # input piston area [m^2]
A_out: positive # output piston area [m^2]
F_in: real # applied input force [N]
F_out: real # delivered output force [N]
p_in: real
p_out: real
loss_pascal: real # effective pressure loss [Pa]
state Hydrostatic:
z: real[] # depths/elevations [m] (+upwards)
p: real[] # pressures at positions z [Pa]
state Body: # object (solid) for buoyancy analysis
V: positive # displaced volume when fully submerged [m^3]
V_disp: real # actual displaced volume [m^3]
rho_obj: positive # object density [kg/m^3]
depth: real # immersion depth reference [m]
F_b: real # buoyant force [N]
F_w: real # weight [N]
F_net: real # net vertical force [N]
IB_b: 0.0..1.0 = 1.0 # buoyancy coherence (surface roughness/entrained bubbles)
# ---------- INVARIANTS ----------
invariants:
# --- Hydrostatic pressure field (with optional capillary term) ---
# p(z) = p0 + rho g (z0 - z) + gamma_cap
for k in range(len(Hydrostatic.z)):
if not params.compressible:
Hydrostatic.p[k] = Fluid.p0 + params.rho_fluid * params.g * (Fluid.z0 - Hydrostatic.z[k]) + (params.gamma_cap or 0)
else:
# small-strain barotropic correction: rho ≈ rho0 * (1 + beta*(p - p0))
# Use linearised form for clarity (engine may iterate if desired)
dp = params.rho_fluid * params.g * (Fluid.z0 - Hydrostatic.z[k])
Hydrostatic.p[k] = Fluid.p0 + dp + (params.gamma_cap or 0)
# --- Pascal’s law with coherence (transmission of pressure) ---
# Ideal: p_in = p_out = F/A. With loss: p_out = IB * p_in.
PascalCell.p_in = PascalCell.F_in / PascalCell.A_in
PascalCell.loss_pascal = (1 - params.IB) * PascalCell.p_in
PascalCell.p_out = PascalCell.p_in - PascalCell.loss_pascal
PascalCell.F_out = PascalCell.p_out * PascalCell.A_out
# --- Archimedes buoyancy (with coherence) ---
# F_b = IB_b * rho_fluid * g * V_disp
Body.F_b = Body.IB_b * params.rho_fluid * params.g * Body.V_disp
Body.F_w = Body.rho_obj * params.g * Body.V
Body.F_net = Body.F_b - Body.F_w
# --- Float / sink conditions (qualitative guards) ---
float_condition:
# At static equilibrium for a floating body: F_b = F_w with 0 <= V_disp <= V
if 0 <= Body.V_disp <= Body.V:
assert abs(Body.F_b - Body.F_w) <= 1e-6 or Body.F_net == 0
# ---------- TRANSFORMS ----------
transforms:
# Compute required input force for a target output force (hydraulic press)
pascal_reverse:
PascalCell.F_in = (PascalCell.F_out / PascalCell.A_out) * PascalCell.A_in / max(params.IB, 1e-12)
# Determine displaced volume for a floating body (solve V_disp from F_b = F_w)
set_float_equilibrium:
Body.V_disp = clamp(Body.F_w / (Body.IB_b * params.rho_fluid * params.g), 0, Body.V)
# Pressure at depth utility
pressure_at_depth:
p_depth = Fluid.p0 + params.rho_fluid * params.g * (Fluid.z0 - z_query) + (params.gamma_cap or 0)
# ---------- MONITORS ----------
monitors:
coherence_bounds:
assert 0 <= params.IB <= 1
assert 0 <= Body.IB_b <= 1
hydraulic_gain_check:
# Ideal gain ~ A_out / A_in scaled by IB
gain = PascalCell.F_out / max(PascalCell.F_in, 1e-12)
gain_ideal = params.IB * (PascalCell.A_out / PascalCell.A_in)
assert abs(gain - gain_ideal) <= 1e-9
buoyancy_limits:
assert 0 <= Body.V_disp <= Body.V
# ---------- SCENES ----------
scenes:
# 1) Hydraulic press with coherence loss
hydraulic_press_demo:
given params:
rho_fluid: 850 # e.g., oil
IB: 0.97
given PascalCell:
A_in: 0.0005 # 5e-4 m^2 (small plunger)
A_out: 0.02 # 2e-2 m^2 (large piston)
F_in: 200 # N
expect:
p_in = F_in / A_in
p_out = IB * p_in
F_out = p_out * A_out
note: "Output force close to ideal gain (A_out/A_in) but reduced by IB."
# 2) Hydrostatic pressure difference
hydrostatic_column:
given params:
rho_fluid: 1000
g: 9.81
given Fluid:
p0: 101325
z0: 0
given Hydrostatic:
z: [0, -2, -5] # 0 m, 2 m below, 5 m below
expect:
p[1] - p[0] ≈ rho_fluid * g * 2
p[2] - p[0] ≈ rho_fluid * g * 5
# 3) Floating block (find immersion fraction)
floating_block:
given params:
rho_fluid: 1000
given Body:
V: 0.02 # m^3
rho_obj: 600 # kg/m^3 (wood)
IB_b: 0.99
transforms:
set_float_equilibrium: {}
expect:
immersion_fraction = V_disp / V ≈ rho_obj / (IB_b * rho_fluid) # ~ 0.606
F_net ≈ 0
# 4) Sinking object (fully submerged)
sinking_solid:
given params:
rho_fluid: 1000
given Body:
V: 0.01
rho_obj: 3000
V_disp: 0.01
IB_b: 1.0
expect:
F_b = rho_fluid * g * V
F_w = rho_obj * g * V
F_net = F_b - F_w < 0 # sinks
# ---------- NOTES ----------
notes:
- Pascal (ideal): pressure is transmitted undiminished → \( p = F/A \) uniform in a connected static fluid.
- With coherence factor \( I_B \), effective transmitted pressure is \( p_{\text{out}} = I_B\, p_{\text{in}} \).
- Archimedes: buoyant force equals the weight of displaced fluid:
\( F_b = \rho_{\text{fluid}} g V_{\text{disp}} \).
Coherence \( I_{B_b} \) moderates real-world effects (entrained gas, wetting, surface roughness).
- Hydrostatics: \( p(z) = p_0 + \rho g (z_0 - z) \) (plus optional capillary correction).
- Floating condition: \( F_b = F_w \Rightarrow V_{\text{disp}}/V = \rho_{\text{obj}} / (\rho_{\text{fluid}} I_{B_b}) \) (clamped to \([0,1]\)).
- Hydraulic gain: ideal \( F_{\text{out}}/F_{\text{in}} = A_{\text{out}}/A_{\text{in}} \); coherence reduces it by \( I_B \).
Pascal’s and Archimedes’ principles are two expressions of the same law of pressure coherence.
One governs how pressure transmits within a continuous fluid; the other describes how that pressure acts upon an immersed boundary.
Together, they form the static counterpart of Bernoulli and continuity — mapping not motion, but tension balance within a resting field.
In an enclosed, static fluid, pressure acts equally in all directions and transmits uniformly through the medium.
$$ p = \frac{F}{A} = \text{constant (for a coherent fluid).} $$
If a force is applied to a piston of area , the resulting pressure is transmitted to an output piston of area :
$$ p_{\mathrm{in}} = p_{\mathrm{out}} = \frac{F_{\mathrm{in}}}{A_{\mathrm{in}}}. $$
Thus the output force becomes:
$$ F_{\mathrm{out}} = \frac{A_{\mathrm{out}}}{A_{\mathrm{in}}}\, F_{\mathrm{in}}. $$
This geometric amplification is the foundation of hydraulic systems — force multiplied through pressure uniformity.
In practice, however, no system is perfectly coherent.
We introduce a coherence index to represent loss due to compliance, leaks, trapped gas, or imperfect sealing:
pout=IBpin,Fout=IBAinAoutFin.
$$ p(z) = p_0 + \rho g (z_0 - z). $$
Here is the surface pressure at height , is the fluid density, and is gravitational acceleration.
This simple relation defines the pressure field within the fluid — a vertical coherence gradient where potential energy translates directly into pressure tension.
When small capillary or surface effects are relevant, a correction term may be added:
$$ p(z) = p_0 + \rho g (z_0 - z) + \gamma_{\mathrm{cap}}. $$
representing curvature or surface tension acting at the fluid boundary.
When a body is placed in a fluid, the surrounding pressure field creates an upward resultant known as buoyant force:
$$ F_b = \rho_{\mathrm{fluid}}\, g\, V_{\mathrm{disp}}. $$
It equals the weight of the displaced fluid.
In reality, this upward curvature coupling is not always perfect — surfaces trap bubbles, wetting may be partial, or micro-roughness can break phase contact.
A buoyancy coherence index accounts for this:
$$ F_b = I_{B_b}\, \rho_{\mathrm{fluid}}\, g\, V_{\mathrm{disp}}. $$
The balance between buoyancy and weight determines the system’s behaviour:
$$ F_{\mathrm{net}} = F_b - F_w = g\, \big(\rho_{\mathrm{fluid}} I_{B_b} V_{\mathrm{disp}} - \rho_{\mathrm{obj}} V\big). $$
In HST terms, floating occurs when the boundary curvature of the solid and the fluid are phase-matched — the surface mediates equal pressure flux in both directions.
Both Pascal and Archimedes describe static field coherence:
Together they satisfy:
\( \nabla p = \rho \mathbf{g}, \quad \text{and } p = \text{uniform at constant depth.} \)
They express equilibrium not as stillness, but as complete coherence — every part of the field perfectly aware of every other part through static tension.
Pascal’s and Archimedes’ laws are two expressions of the same geometric truth:
pressure is coherent curvature within a static field.
Together they reveal that a static fluid is not an absence of motion, but a perfectly resolved balance of forces —
a standing wave of coherence between boundary, weight, and depth.
When , the field is whole; when , the geometry leaks memory.
The calm surface of a liquid hides a perfect equilibrium of invisible curvatures —
a static mirror of the same coherence that drives motion, light, and form.