Volume corrections
The waterfall
Section titled “The waterfall”Every volume in a recipe is one line of a single ledger, run in either direction — from a target batch size back to the water you need, or from the water you have forward to what you will end up with:
strike + sparge − grain absorption − mash tun deadspace (+ kettle top-up)= pre-boil − boil-off= post-boil (hot) − 4 % shrinkage= post-boil (20 °C) − kettle deadspace − hop absorption − chiller loss (+ fermenter top-up)= into fermenter − trub loss − dry-hop absorption= packagedThe two directions are exact algebraic inverses of each other, pinned to 10⁻⁹ litres — this part of the engine is arithmetic, not a fit. Litres are conserved: total water minus total loss equals packaged beer.
20 °C is the basis. Every stored volume is a 20 °C volume, which is why the hot post-boil figure and the corrected one are separate lines.
The losses, and their defaults
Section titled “The losses, and their defaults”| Loss | How it is computed | Default |
|---|---|---|
| Grain absorption | grain_kg × rate |
1.0 L/kg |
| Kettle hop absorption | hops_kg × rate |
6 mL/g |
| Dry-hop absorption | hops_kg × rate |
inherits 6 mL/g |
| Boil-off | rate × boil_hours |
3.0 L/h |
| Boil shrinkage | hot × (1 − %/100) |
4 % |
| Mash tun deadspace | flat | — |
| Kettle deadspace | flat | 1.0 L |
| Chiller loss | flat | 0 L |
| Trub loss | flat | 1.0 L |
Millilitres per gram and litres per kilogram are numerically identical, so hop absorption needs no conversion factor. About 1.0 L/kg suits a lauter tun and about 0.8 L/kg a squeezed BIAB bag; about 6 mL/g is right for pellets.
Strike water is mash thickness × grain (3.0 L/kg by default) and the sparge
makes up the rest. No-sparge and full-volume BIAB profiles put everything in the
strike. If the requested thickness would need more water than the batch calls
for, strike is capped at the total and the sparge goes to zero.
A worked 20 L batch — 4.9 kg grain, 90 g kettle hops, 50 g dry hops, 60 minute boil — comes out as 30.34 L of total water (14.70 strike + 15.64 sparge), 25.44 L pre-boil, 22.44 L hot post-boil, 21.54 L at 20 °C, 20 L into the fermenter, 18.70 L packaged.
Nothing is clamped. Volume problems come back as warnings instead: a negative sparge (the mash thickness needs more water than the batch), a non-positive packaged volume (system losses exceed the batch size), a pre-boil volume over the kettle, a mash volume over the tun. The mash volume check uses a grain displacement of 0.6676 L/kg — one pound of crushed malt displaces about 0.08 US gallons — and exists only to answer “will this fit”.
Thermal shrinkage: two models, on purpose
Section titled “Thermal shrinkage: two models, on purpose”Beerwright has two ways to relate a hot volume to a 20 °C volume, and they are separate functions because they answer different questions.
Planning uses a flat percentage off the equipment profile, 4 % by default — the conventional figure, and the one BeerSmith, Brewer’s Friend and Grainfather all ship. It is editable because it also has to absorb whatever else your rig loses between flame-out and the measuring jug, and because the whole waterfall should follow when you change it.
Measurement uses the physics. Mass is conserved as wort cools, so volumes are in inverse ratio to densities:
V_ref = V_t × ρ(t) / ρ(ref)where ρ is Kell’s equation — G. S. Kell, “Density, thermal expansivity, and compressibility of liquid water from 0° to 150 °C”, J. Chem. Eng. Data 20(1), 1975, 97–105:
999.83952 + 16.945176·t − 7.9870401e-3·t² − 46.170461e-6·t³ + 105.56302e-9·t⁴ − 280.54253e-12·t⁵ρ(t) = ─────────────────────────────────────────────────────────── 1 + 16.879850e-3·tFitted over 0–150 °C and reproducing tabulated densities to a few parts per million: 998.204 kg/m³ at 20 °C, 958.364 kg/m³ at 100 °C. Only ratios of it are used, so even that residual largely cancels. It also reproduces water’s density maximum at 3.98 °C rather than 0 °C, which is the cheapest available check that the coefficients were transcribed correctly.
The two models agree. The physical figure at 100 °C is 3.991 % against the planning constant’s 4.000 %, and a test pins that agreement to within 0.01 percentage points.
Why it matters that measurement uses a temperature rather than a percentage: a brewer reading a sight glass at 85 °C is owed the contraction for 85 °C, not for boiling. Reading 26 L off a 98 °C kettle is 25.00 L at 20 °C. Below 20 °C the correction runs the other way and the number goes up, because cold water is the denser one: 20 L read at 4 °C is 20.04 L.
This treats wort as water. At brewing strengths wort is 88–95 % water by mass and the dissolved extract raises the expansion coefficient only slightly, so real wort contracts marginally more than this predicts. The error bound is empirical: homebrewing’s directly observed 4 % is reproduced to 0.009 percentage points, so the wort-versus-water difference is smaller than the one significant figure that observation is quoted to. Taking that as the bound, the approximation is worth at most about 0.5 percentage points of volume — 0.1 L in a 25 L kettle, against a sight glass you can read to perhaps 0.25 L.
Valid from 0 to 100 °C, and not clamped outside it. Kell’s equation still evaluates to 150 °C, but the answer stops being about brewing.
Mash thermodynamics
Section titled “Mash thermodynamics”From the energy balance V(T_w − T₂) = c·G·(T₂ − T_g) + M·(T₂ − T_t):
T_w = T₂ + (c / r) × (T₂ − T_g) + M × (T₂ − T_t) / Vwhere r is litres of water per kilogram of grain, c ≈ 0.4 is the ratio of
grain’s specific heat to water’s (grain ≈ 1.67 kJ/kg·K, water 4.186), and M is
the tun’s thermal mass as equivalent litres of water. This is Palmer’s strike
formula from How to Brew stated in SI — his imperial constant 0.2 is the same
0.4 once quarts-per-pound becomes litres-per-kilogram.
At 3 L/kg, mashing 20 °C grain to 66 °C wants 72.13 °C strike water; at 2 L/kg it wants 75.20 °C. Add a tun worth 3 L of water sitting at 10 °C, with 5 kg of grain at 3 L/kg, and it wants 83.33 °C — the tun term is the largest single correction on a cold-start rig, and it is why the first mash of the day undershoots when it is left out.
Palmer’s infusion equation, in the same terms:
V_infusion = rise × (c·G + W) / (T_infusion − T_target)and a decoction:
V_decoction = (W + c·G) × (T₂ − T₁) / (T_boil − T₁)A thick decoction is conventionally pulled, so the decoction figure is the water-equivalent volume of mash, not of liquid alone. Neither returns a plausible-looking number when the physics does not allow one: an infusion that is not hotter than the target returns infinity rather than a wrong volume.
Dilution, boil-down and blending
Section titled “Dilution, boil-down and blending”All of these conserve extract:
- Dilute or boil down to a target gravity —
V₂ = V₁ × points₁ / points₂. The engine refuses to “dilute” to a higher gravity or boil down to a lower one. - Gravity after adding water —
SG₂ = 1 + points₁ × V₁ / (V₁ + V_water) / 1000. - Sugar to hit a target —
kg = (points_target − points_current) × V / pointsPerKgPerL. This ignores the small volume the sugar itself contributes. - Blending two beers — gravity blends by conserved extract
(
Σ points × V / Σ V); bitterness, colour and alcohol blend linearly by volume, which is exact for ABV and a good approximation for IBU and SRM.