Annus Mirabilis · Interactive critical edition in preparation

The osmotic partition

See what the osmotic pressure of suspended particles depends on, and what it does not.

The osmotic partition

The osmotic partition

Static worked example
Model and settings
Model
Experiment settings particle count, volume, temperature, radius, partition area

Out-of-domain settings are never silently clamped: the table names the admissible boundary instead.

Worked example: on the molecular-kinetic model, 1 × 10¹⁵ particles per cubic metre press on the partition with 4.05 × 10⁻⁶ Pa, a force of 4.05 × 10⁻¹⁴ N, as much as a 4.14 × 10⁻¹⁰ m column of water.

suspensionpure solvent
One accepted calculation, in explicit units
Number density n1.000000 × 1015 m⁻³
Volume fraction φ5.235988 × 10−4 (admitted domain: φ ≤ 0.01)
Osmotic pressure Π4.047373 × 10−6 Pa
Force on partition F = ΠA4.047373 × 10−14 N
Equivalent water column h = Π/(ρg)4.135442 × 10−10 m
Three symbols that are easy to confuse
NpHow many suspended particles are in the chamber: the count you set, 1,000 here.
nTheir number density, Np divided by the accessible volume, in particles per cubic metre. The pressure is Π = nkT.
NAAvogadro's number, the molecules in one mole: 6.022 × 1023, exact in the 2019 SI. Einstein writes it N. It enters when the pressure is written with the gas constant, R = NAk, and this laboratory does not use it.

Predict before the numbers

At the same number of particles per volume, does a 1000-times-larger particle push harder, the same, or less on the partition?

Three relations the model could have

The result appears when you choose, say you have one in mind, or skip.

What this model leaves out

• Particle interactions and excluded volume above the dilute domain.

• Non-ideal activity coefficients.

• Imperfect partitions (any real leak of particles across it).

• Gravity and sedimentation.

• Electrostatic effects.

• Adsorption at the partition.

• The kinetics and time needed to reach osmotic equilibrium.

• Molecular collisions with the wall: the drawn glyphs are illustrative, not a collision simulation.

Show which code computes these numbers

Number density, osmotic pressure, the dilute-domain check, partition force, and hydrostatic head are computed by src/physics/reference/diffusion/routeA.ts and src/physics/reference/diffusion/distributions.ts, composed (never recomputed) by src/experiments/bm02/session.ts.

Live terms bind osmoticPressure, numberDensity, and temperature.

A dissolved sugar molecule pushes on a wall that stops it but lets water through, and that push is osmotic pressure. Einstein argued that a particle big enough to see under a microscope pushes in exactly the same way, one particle counting as one molecule, however large it is.

Section 1 begins with van 't Hoff's law for a dilute solution: z gram-molecules in a volume V*, behind a wall that lets the solvent through, press on it with pV* = RTz. For small suspended bodies in place of the dissolved substance, classical thermodynamics expects no force at all, since the free energy seems not to depend on where the wall and the bodies are. The molecular-kinetic theory disagrees: a dissolved molecule differs from a suspended body only in size, so n bodies in V*, far enough apart, should press with p = (RT/N)ν, where ν = n/V*. The instrument evaluates both views. With 1000 spheres of radius 0.5 μm in a million cubic micrometres at 293.15 K, ν = 1015 m−3 and the pressure is 4.05 × 10−6 Pa: a force of 4.05 × 10−14 N on a partition of 104 μm2, or the weight of a water column 0.41 nm high. A 0.01 mol/L sugar solution, with 6 × 109 times as many particles in each cubic metre, gives 24.4 kPa by the same law. The radius does not enter; it only limits how crowded the spheres may be before the law needs correcting, here to 1 percent of the volume.

Modern qualifications

Einstein wrote z for the number of gram-molecules, V* for the partial volume, ν for the number of bodies per unit volume and N for the number of real molecules in a gram-molecule. Van 't Hoff had set out the law of dilute solutions, and its likeness to the gas law, in 1887. The claim that visible particles obey it is Einstein's, made against what classical thermodynamics would expect, and Section 2 derives it from statistical mechanics. Perrin used the same equivalence from 1908, setting it against gravity in the settling of gamboge grains to count molecules.

Show the code

The site’s own reference code for this law, in TypeScript. It computes the numbers above when the page runs it, and it is what the page uses wherever a FrankenSim result is not available.

osmoticPressure · src/physics/reference/diffusion/distributions.ts · this site’s source, as built · sha256:a981b895ccd74c72c660fd64bc27c0406701b50b7828b2e62565bdf6f9f3468c

This function computes the listed outputs when it runs.

In words

The ideal osmotic pressure of a suspension: the number of particles in a cubic metre, times the Boltzmann constant, times the temperature. A negative density or a nonpositive temperature is refused before the multiplication, and the constant comes from the declared set rather than a literal.

Implementation

export function osmoticPressure({ n, T }: { n: number; T: number }, set: ConstantSet): Evaluation {
  if (!Number.isFinite(n) || n < 0 || !Number.isFinite(T) || T <= 0)
    return outside(
      "osmoticPressure",
      "osmoticPressure",
      "n >= 0 and T > 0",
      "Use a nonnegative number density and a positive temperature.",
      "input",
      set,
    );
  return number(
    "osmoticPressure",
    "osmoticPressure",
    n * thermalConstant(set).value * T,
    set,
    undefined,
    n > 0,
  );
}

The site’s own reference code for this law, in TypeScript. It computes the numbers above when the page runs it, and it is what the page uses wherever a FrankenSim result is not available.

volumeFraction · src/physics/reference/diffusion/routeA.ts · this site’s source, as built · sha256:ae2fc4df5d298eb04523984a56ab3654a70a0e788503682ade2e87c839113fb2

This function computes the listed outputs when it runs.

In words

What fraction of the liquid the particles themselves occupy: the count times the volume of one sphere of this radius, divided by the volume of the vessel. The count must be a whole number, which is why it is checked with isSafeInteger rather than for being finite.

Implementation

export function volumeFraction(Np: number, a: number, V: number): RouteAEvaluation {
  if (!Number.isSafeInteger(Np) || Np < 0 || ![a, V].every((v) => Number.isFinite(v) && v > 0)) {
    return outside(
      "volumeFraction",
      "volumeFraction",
      "Np a nonnegative integer, a > 0, V > 0",
      "Use a whole particle count and positive radius and volume.",
    );
  }
  return number("volumeFraction", "volumeFraction", (Np * (4 / 3) * Math.PI * a * a * a) / V);
}

The site’s own reference code for this law, in TypeScript. It computes the numbers above when the page runs it, and it is what the page uses wherever a FrankenSim result is not available.

diluteDomainCheck · src/physics/reference/diffusion/routeA.ts · this site’s source, as built · sha256:7168af3321032692f9d3f7dfa32ec59745529da1b4ceecbb016e3ed2173cd0bc

This function computes the listed outputs when it runs.

In words

It compares the volume fraction with a bound and returns whether it is admitted, together with the two boundaries in the reader's own units: the largest particle count this vessel admits and the smallest vessel this count admits. At a million spheres of half a micron in a cubic millimetre the fraction is 0.000524, and against a bound of 0.01 the ceiling is 19,098,593 particles.

Implementation

export function diluteDomainCheck(
  phi: number,
  phiMax: number,
  input: { Np: number; a: number; V: number; justification: string },
): DiluteDomain | RouteAEvaluation {
  const { Np, a, V, justification } = input;
  if (
    ![phi, phiMax, a, V].every((v) => Number.isFinite(v)) ||
    phi < 0 ||
    phiMax <= 0 ||
    !Number.isSafeInteger(Np) ||
    Np < 0 ||
    a <= 0 ||
    V <= 0 ||
    !justification.trim()
  ) {
    return outside(
      "volumeFraction",
      "diluteDomainCheck",
      "phiMax > 0 with a recorded justification",
      "Declare a positive volume-fraction bound and why it is admitted. There is no hidden default.",
    );
  }
  const particleVolume = (4 / 3) * Math.PI * a * a * a;
  const maxAdmittedCount = Math.floor((phiMax * V) / particleVolume);
  const minAdmittedVolume = (Np * particleVolume) / phiMax;
  return Object.freeze({
    admitted: phi <= phiMax,
    phi,
    phiMax,
    virialCorrectionAtBound: hardSphereVirialCorrection(phiMax),
    maxAdmittedCount,
    minAdmittedVolume,
    justification,
  });
}

The site’s own reference code for this law, in TypeScript. It computes the numbers above when the page runs it, and it is what the page uses wherever a FrankenSim result is not available.

partitionForce · src/physics/reference/diffusion/routeA.ts · this site’s source, as built · sha256:3362b3133d3a45c01111eef63d091ec93c9d0c86cff66a8498b9a6e3ba23839b

This function computes the listed outputs when it runs.

In words

The force the osmotic pressure puts on a partition: the pressure times the area. A zero pressure is allowed and gives a zero force, while a zero area is refused, because a partition with no area is not a partition.

Implementation

export function partitionForce(Pi: number, A: number): RouteAEvaluation {
  if (![Pi, A].every((v) => Number.isFinite(v)) || Pi < 0 || A <= 0) {
    return outside(
      "partitionForce",
      "partitionForce",
      "Pi >= 0 and A > 0",
      "Use a nonnegative pressure and a positive partition area.",
    );
  }
  return number("partitionForce", "partitionForce", Pi * A);
}

The site’s own reference code for this law, in TypeScript. It computes the numbers above when the page runs it, and it is what the page uses wherever a FrankenSim result is not available.

hydrostaticHead · src/physics/reference/diffusion/routeA.ts · this site’s source, as built · sha256:bb1200efdc06568c52194de05618bb14584145af82da8e46c5edeadd90e081f9

This function computes the listed outputs when it runs.

In words

Pressure divided by density times gravity. At 4 Pa in water it is 0.408 millimetres. The gravity is not an input a reader has to supply: it defaults to the declared standard 9.80665 m/s^2, and a caller may pass another.

Implementation

export function hydrostaticHead(Pi: number, rho: number, g = STANDARD_GRAVITY): RouteAEvaluation {
  if (![Pi, rho, g].every((v) => Number.isFinite(v)) || Pi < 0 || rho <= 0 || g <= 0) {
    return outside(
      "hydrostaticHead",
      "hydrostaticHead",
      "Pi >= 0, rho > 0, g > 0",
      "Use a nonnegative pressure, a positive solvent density, and a positive gravity.",
    );
  }
  return wrap(
    {
      ...identity("hydrostaticHead", "hydrostaticHead"),
      status: "value",
      value: Pi / (rho * g),
    },
    {
      modelNote: "Equivalent solvent column height, not a manometer in the apparatus.",
    },
  );
}

The explanation

Full explanation

In the dilute molecular-kinetic model a suspended particle presses on a partition that lets the liquid through as a dissolved molecule does: the pressure is set by the number of particles per volume and the temperature, and not by their size. The classical expectation for suspended bodies, shown beside it as a labelled alternative, gives no pressure at all.

Show every step of the investigation

Change the count, the volume and the temperature, and read the pressure, the force on the partition and the height of the equivalent water column. Then change the radius at the same count per volume and compare the pressure. A volume fraction above 0.01 leaves the dilute model and is refused rather than extrapolated.

An explanatory model, not an observation of nature. This embed starts from the laboratory’s worked defaults, not a saved run. Presentation options change the surrounding guide, never the numerical inputs.