B Series Compression Calculator

B-Series Engine Compression Calculator

Calculate Static Compression Ratio for B16, B17, B18, and B20 engines.

Standard: 81mm (B16/B18), 84mm (B20)
87.2mm (B18C), 89mm (B18B/B20), 77.4mm (B16)
VTEC Heads: ~41.6cc, P75/PR4: ~45cc
Use (+) for Dome, (-) for Dish/Valve Reliefs
Standard OEM is usually 0.026″
Distance piston is below deck at TDC
Estimated Static Compression Ratio:

Understanding B-Series Compression Ratios

When building a Honda B-series engine—whether it's a B16A, B18C5, or a B20/VTEC "Frankenstein" build—the static compression ratio (SCR) is one of the most critical variables for performance. It determines your engine's thermal efficiency, torque potential, and requirement for high-octane fuel.

Key Components Explained

  • Cylinder Bore & Stroke: These dimensions define the engine's displacement. A standard B18 has an 81mm bore and 87.2mm (VTEC) or 89mm (Non-VTEC) stroke. Oversizing the bore (e.g., 81.5mm or 84mm B20) increases displacement and compression.
  • Combustion Chamber Volume: This is the volume (in cubic centimeters) of the cylinder head's "bowl." PR3 (B16A/B18C5) and P72 (B18C1) heads usually range from 41.6cc to 42.7cc.
  • Piston Dome Volume: High-compression pistons (like the Civic Type R "PCT" pistons) have a "dome" that occupies space in the chamber, effectively reducing clearance volume and raising compression. Dish pistons do the opposite.
  • Deck Height: This is the distance between the top of the piston at Top Dead Center (TDC) and the engine block's deck surface. Most stock B-series blocks aim for "zero deck," but machine work can change this.

B-Series Specification Chart (Quick Reference)

Engine Bore Stroke Chamber Vol
B16A 81.0mm 77.4mm 42.7cc
B18C1 (GSR) 81.0mm 87.2mm 41.6cc
B18B1 (LS) 81.0mm 89.0mm 45.0cc
B20B/Z 84.0mm 89.0mm 45.0cc

The Calculation Formula

The math used by this calculator is: CR = (Vd + Vc) / Vc

Where Vd (Displacement Volume) = Pi × (Bore/2)² × Stroke.
And Vc (Clearance Volume) = Chamber + Gasket Volume + Deck Volume – Piston Dome.

function calculateBSeriesCR() { var bore = parseFloat(document.getElementById('bore').value); var stroke = parseFloat(document.getElementById('stroke').value); var chamber = parseFloat(document.getElementById('chamber').value); var dome = parseFloat(document.getElementById('dome').value); var gasketThickInches = parseFloat(document.getElementById('gasketThick').value); var deck = parseFloat(document.getElementById('deck').value); if (isNaN(bore) || isNaN(stroke) || isNaN(chamber) || isNaN(dome) || isNaN(gasketThickInches) || isNaN(deck)) { alert("Please enter valid numbers for all fields."); return; } // Constants var PI = Math.PI; var mmToInches = 0.0393701; var inchesToMm = 25.4; // 1. Calculate Cylinder Displacement Volume (cc) // Formula: Pi * r^2 * h // (Bore/2)^2 * PI * Stroke / 1000 (to get cc from mm3) var sweptVolume = (PI * Math.pow(bore / 2, 2) * stroke) / 1000; // 2. Calculate Gasket Volume (cc) // Gasket bore is usually slightly larger than cylinder bore. // For simplicity and accuracy in general calculators, we use cylinder bore unless specific gasket bore is provided. // Standard practice is often bore + 0.5mm, but we'll use bore for the standard calculation. var gasketThickMm = gasketThickInches * inchesToMm; var gasketVolume = (PI * Math.pow(bore / 2, 2) * gasketThickMm) / 1000; // 3. Calculate Deck Volume (cc) var deckVolume = (PI * Math.pow(bore / 2, 2) * deck) / 1000; // 4. Calculate Total Clearance Volume (Vc) // Dome is subtracted because a positive dome reduces volume. // A dish piston (entered as negative) will add to the volume. var clearanceVolume = chamber + gasketVolume + deckVolume – dome; // 5. Calculate Static Compression Ratio var compressionRatio = (sweptVolume + clearanceVolume) / clearanceVolume; // Total Displacement (4 cylinders) var totalDisplacement = sweptVolume * 4; // Display Results document.getElementById('cr-result-area').style.display = 'block'; document.getElementById('final-cr').innerText = compressionRatio.toFixed(2) + ":1"; document.getElementById('displacement-info').innerText = "Total Engine Displacement: " + totalDisplacement.toFixed(0) + " cc (" + (totalDisplacement / 1000).toFixed(1) + "L)"; }

Leave a Reply

Your email address will not be published. Required fields are marked *