Analyze specific gravity changes to monitor yeast activity and ABV progression.
Starting specific gravity reading
Current specific gravity reading
Days
Hours
Avg. Rate of Fermentation
0pts/day
Total Gravity Drop0 points
Current Alcohol (ABV)0.0%
Apparent Attenuation0%
Fermentation Status–
How to Calculate Rate of Fermentation
Calculating the rate of fermentation is a critical skill for brewers, winemakers, and biotechnologists. It quantifies the speed at which yeast converts sugars into alcohol and carbon dioxide. Monitoring this rate helps identify stuck fermentations, manage temperature control, and predict when the process will complete.
Why monitor rate? A sudden drop in fermentation rate can indicate a "stuck" fermentation due to temperature shock or nutrient deficiency, while an excessively high rate might lead to off-flavors (fusel alcohols) due to rapid heat generation.
The Fermentation Rate Formula
In the context of brewing and winemaking, the rate is most commonly calculated by measuring the change in Specific Gravity (SG) over a set period of time. Specific Gravity measures the density of the liquid relative to water; as sugar is consumed, density decreases.
The formula for the average rate of fermentation is:
Rate = (Original Gravity – Current Gravity) / Time Elapsed
Step-by-Step Calculation Guide
Measure Initial Density (OG): Take a hydrometer reading before pitching yeast. (Example: 1.060)
Measure Current Density (CG): Take a reading after a specific duration. (Example: 1.020 after 4 days)
Calculate the Drop: Subtract current gravity from original gravity. Note that brewers often speak in "gravity points" (e.g., 1.060 is 60 points).
Drop = 1.060 – 1.020 = 0.040 (or 40 points)
Divide by Time: Divide the drop by the number of days or hours passed.
Rate = 40 points / 4 days = 10 points per day
Interpreting the Results
Fast Rate (>15 points/day): Common during the "stormy" phase (first 24-72 hours). Ensure temperature is controlled to prevent overheating.
Moderate Rate (4-14 points/day): A healthy, steady fermentation speed for most ales and wines.
Slow Rate (<3 points/day): Typical towards the end of fermentation or for lagers. If this occurs early, check yeast health and temperature.
Zero Rate: Fermentation is complete or stuck. Verify with a second reading 24 hours later.
Factors Affecting Fermentation Speed
Several variables influence how quickly fermentation proceeds:
Yeast Pitch Rate: Under-pitching (too few cells) causes a slow start (lag phase), while over-pitching can lead to very rapid fermentation.
Temperature: For every 10°C (18°F) increase in temperature, enzymatic activity roughly doubles, significantly increasing the rate.
Nutrient Availability: Yeast requires nitrogen (YAN) and minerals. A lack of nutrients causes the rate to taper off prematurely.
Calculating ABV and Attenuation
While calculating the rate, you can also determine the alcohol content and efficiency of sugar conversion:
ABV Formula:(OG - FG) * 131.25. This estimates the percentage of alcohol by volume.
Apparent Attenuation:(Points Dropped / Total Original Points) * 100. Most yeast strains attenuate between 70% and 80%.
function calculateFermentationRate() {
// Get inputs
var og = document.getElementById('ogInput').value;
var cg = document.getElementById('cgInput').value;
var time = document.getElementById('timeElapsed').value;
var unit = document.getElementById('timeUnit').value;
var errorDiv = document.getElementById('errorDisplay');
var resultsDiv = document.getElementById('resultsArea');
// Reset display
errorDiv.style.display = 'none';
resultsDiv.style.display = 'none';
// Validation
if (og === "" || cg === "" || time === "") {
errorDiv.textContent = "Please fill in all fields.";
errorDiv.style.display = 'block';
return;
}
var ogVal = parseFloat(og);
var cgVal = parseFloat(cg);
var timeVal = parseFloat(time);
if (isNaN(ogVal) || isNaN(cgVal) || isNaN(timeVal)) {
errorDiv.textContent = "Please enter valid numbers.";
errorDiv.style.display = 'block';
return;
}
if (timeVal ogVal) {
errorDiv.textContent = "Current Gravity cannot be higher than Original Gravity for standard fermentation.";
errorDiv.style.display = 'block';
return;
}
// Calculations
// Convert to "points" (e.g., 1.050 -> 50 points, 1.010 -> 10 points)
// We look at the decimal part multiplied by 1000
var ogPoints = (ogVal – 1) * 1000;
var cgPoints = (cgVal – 1) * 1000;
var pointsDrop = ogPoints – cgPoints;
// Rate Calculation
var rate = pointsDrop / timeVal;
// ABV Calculation: (OG – FG) * 131.25
var abv = (ogVal – cgVal) * 131.25;
// Attenuation Calculation: (Drop / Original Points) * 100
var attenuation = 0;
if (ogPoints > 0) {
attenuation = (pointsDrop / ogPoints) * 100;
}
// Determine Status based on Points per Day logic (normalizing hours if needed)
var dailyRate = rate;
if (unit === 'hours') {
dailyRate = rate * 24;
}
var status = "";
if (dailyRate <= 0.5) {
status = "Complete / Stuck";
} else if (dailyRate < 4) {
status = "Slow / Finishing";
} else if (dailyRate < 15) {
status = "Moderate / Active";
} else {
status = "Vigorous / Stormy";
}
// Update UI
document.getElementById('rateResult').textContent = rate.toFixed(2);
document.getElementById('rateUnit').textContent = unit === 'days' ? 'points/day' : 'points/hr';
document.getElementById('gravityDropResult').textContent = pointsDrop.toFixed(1) + " points";
document.getElementById('abvResult').textContent = abv.toFixed(2) + "%";
document.getElementById('attenuationResult').textContent = attenuation.toFixed(1) + "%";
var statusEl = document.getElementById('statusResult');
statusEl.textContent = status;
// Color code status
if (status.includes("Stuck")) statusEl.style.color = "#e53e3e";
else if (status.includes("Vigorous")) statusEl.style.color = "#dd6b20";
else statusEl.style.color = "#38a169";
resultsDiv.style.display = 'block';
}