Tinseth's boil-time factor is the integral of a first-order process running
at a fixed rate. When the rate varies with temperature, the correct
substitution is the time integral of the relative rate:
t_eff = ∫₀^t r(T(τ)) dτ
and then any of the time-based utilisation curves can be evaluated at
t_eff. That substitution lets the whirlpool models work with all three
bitterness formulas without special cases.
We assume the wort cools exponentially towards ambient:
T(τ) = T_ambient + (T₀ − T_ambient) · e^(−k τ), following the mIBU approach
of John-Paul Hosom (A Modified IBU Calculation, 2018). The integral uses
the trapezium rule. k defaults to 0.015 min⁻¹ (see
DEFAULT_WHIRLPOOL_COOLING_RATE_PER_MIN).
The default k is a model assumption. A caller that knows the temperature
at the end of the stand can pass StandModelOptions.endTempC, and k
is solved from the two temperatures. A held stand is the degenerate case of
that solve and goes straight to
fixedTemperatureStandEffectiveBoilMinutes.
Converts a hop stand into effective boil-minutes.
Tinseth's boil-time factor is the integral of a first-order process running at a fixed rate. When the rate varies with temperature, the correct substitution is the time integral of the relative rate:
and then any of the time-based utilisation curves can be evaluated at
t_eff. That substitution lets the whirlpool models work with all three bitterness formulas without special cases.We assume the wort cools exponentially towards ambient:
T(τ) = T_ambient + (T₀ − T_ambient) · e^(−k τ), following the mIBU approach of John-Paul Hosom (A Modified IBU Calculation, 2018). The integral uses the trapezium rule.kdefaults to 0.015 min⁻¹ (seeDEFAULT_WHIRLPOOL_COOLING_RATE_PER_MIN).The default
kis a model assumption. A caller that knows the temperature at the end of the stand can pass StandModelOptions.endTempC, andkis solved from the two temperatures. A held stand is the degenerate case of that solve and goes straight to fixedTemperatureStandEffectiveBoilMinutes.