Calculate Surface Air Consumption & RMV for Scuba Diving
Metric (Liters, Bar, Meters)
Imperial (Cu Ft, PSI, Feet)
Surface Air Consumption (Pressure)
–
Bar/min
Respiratory Minute Volume (Volume)
–
Liters/min
Estimated Gas Usage at Surface
–
How to Calculate SAC Rate
The Surface Air Consumption (SAC) rate is a critical metric for scuba divers, used to estimate gas consumption across different depths. By normalizing your air usage to surface pressure (1 ATA), you can predict how long your gas supply will last on future dives, regardless of depth.
This calculator determines two key values:
SAC Rate (Pressure): How much pressure (Bar or PSI) you breathe per minute from a specific tank size, adjusted to the surface.
RMV (Respiratory Minute Volume): The actual volume of gas (Liters or Cubic Feet) you breathe per minute. This is universal and applies to any tank size.
The Formulas Used
The calculation requires converting your depth to Atmospheres Absolute (ATA) and measuring gas usage over time.
1. Determine ATA (Atmospheres Absolute)
Pressure increases with depth. We use the average depth of the dive for this calculation.
Metric:ATA = (Average Depth in Meters / 10) + 1
Imperial:ATA = (Average Depth in Feet / 33) + 1
2. Calculate Gas Usage
Gas Consumed = Start Pressure - End Pressure
3. Calculate SAC Rate (Pressure/min)
This tells you how fast the needle on your SPG moves per minute, if you were at the surface.
SAC = (Gas Consumed / Dive Time) / ATA
4. Calculate RMV (Volume/min)
To apply your consumption rate to different tank sizes, we calculate the volume.
Metric:RMV = SAC (Bar) × Tank Size (Liters)
Imperial: First, determine the Tank Factor: Factor = Rated Capacity / Rated Pressure. Then: RMV = SAC (PSI) × Tank Factor
Why is SAC Rate Important?
Knowing your SAC rate improves dive safety and planning. It allows you to:
Plan Gas Reserves: Calculate exactly how much gas you need for a specific dive profile.
Choose the Right Tank: Determine if an AL80 is sufficient or if you need a steel 100 or 15L tank.
Monitor Stress & Fitness: A sudden increase in SAC rate can indicate stress, high workload, or equipment issues.
Note: A "good" SAC rate varies by individual size and gender. A typical relaxed diver might have an RMV between 12-20 Liters/min (0.4-0.7 Cu Ft/min).
function toggleUnits() {
var unit = document.getElementById('unitSystem').value;
var tankSizeLabel = document.getElementById('labelTankSize');
var startLabel = document.getElementById('labelStartPressure');
var endLabel = document.getElementById('labelEndPressure');
var depthLabel = document.getElementById('labelDepth');
var ratedPressureGroup = document.getElementById('groupRatedPressure');
var tankSizeInput = document.getElementById('tankSize');
if (unit === 'metric') {
tankSizeLabel.innerText = "Tank Size (Liters)";
tankSizeInput.placeholder = "e.g. 12";
startLabel.innerText = "Starting Pressure (Bar)";
endLabel.innerText = "Ending Pressure (Bar)";
depthLabel.innerText = "Average Depth (Meters)";
ratedPressureGroup.style.display = "none";
// Clear inputs to avoid confusion with unit conversion
document.getElementById('tankSize').value = ";
document.getElementById('startPressure').value = ";
document.getElementById('endPressure').value = ";
document.getElementById('avgDepth').value = ";
} else {
tankSizeLabel.innerText = "Tank Rated Capacity (Cu Ft)";
tankSizeInput.placeholder = "e.g. 80";
startLabel.innerText = "Starting Pressure (PSI)";
endLabel.innerText = "Ending Pressure (PSI)";
depthLabel.innerText = "Average Depth (Feet)";
ratedPressureGroup.style.display = "block";
document.getElementById('tankSize').value = ";
document.getElementById('startPressure').value = ";
document.getElementById('endPressure').value = ";
document.getElementById('avgDepth').value = ";
}
// Hide results when toggling
document.getElementById('sacResults').style.display = 'none';
}
function calculateSAC() {
// Get Inputs
var unit = document.getElementById('unitSystem').value;
var tankSize = parseFloat(document.getElementById('tankSize').value);
var startPressure = parseFloat(document.getElementById('startPressure').value);
var endPressure = parseFloat(document.getElementById('endPressure').value);
var avgDepth = parseFloat(document.getElementById('avgDepth').value);
var time = parseFloat(document.getElementById('diveTime').value);
// Validation
if (isNaN(tankSize) || isNaN(startPressure) || isNaN(endPressure) || isNaN(avgDepth) || isNaN(time)) {
alert("Please fill in all fields with valid numbers.");
return;
}
if (time = startPressure) {
alert("Ending pressure must be lower than starting pressure.");
return;
}
var sacPressure = 0;
var rmv = 0;
var ata = 0;
var gasUsed = startPressure – endPressure;
if (unit === 'metric') {
// Metric Calculation
// ATA = (Depth / 10) + 1
ata = (avgDepth / 10) + 1;
// Gas Used Per Minute at Depth
var barPerMinAtDepth = gasUsed / time;
// SAC (Surface Pressure/min)
sacPressure = barPerMinAtDepth / ata;
// RMV (Volume/min) = SAC * Tank Size
rmv = sacPressure * tankSize;
// Update UI
document.getElementById('resultSACPressure').innerText = sacPressure.toFixed(2);
document.getElementById('unitSACPressure').innerText = "Bar/min";
document.getElementById('resultRMV').innerText = rmv.toFixed(1);
document.getElementById('unitRMV').innerText = "Liters/min";
document.getElementById('resultSurfaceUsage').innerText = rmv.toFixed(1) + " Liters/min";
} else {
// Imperial Calculation
var ratedPressure = parseFloat(document.getElementById('ratedPressure').value);
if (isNaN(ratedPressure) || ratedPressure <= 0) {
alert("Please enter a valid Tank Rated Pressure for Imperial calculation.");
return;
}
// ATA = (Depth / 33) + 1
ata = (avgDepth / 33) + 1;
// Tank Factor (Cu Ft per PSI)
var tankFactor = tankSize / ratedPressure;
// Gas Used Per Minute at Depth (PSI)
var psiPerMinAtDepth = gasUsed / time;
// SAC (Surface PSI/min)
sacPressure = psiPerMinAtDepth / ata;
// RMV (Volume/min) = SAC (PSI) * Tank Factor
rmv = sacPressure * tankFactor;
// Update UI
document.getElementById('resultSACPressure').innerText = sacPressure.toFixed(1);
document.getElementById('unitSACPressure').innerText = "PSI/min";
document.getElementById('resultRMV').innerText = rmv.toFixed(2);
document.getElementById('unitRMV').innerText = "Cu Ft/min";
document.getElementById('resultSurfaceUsage').innerText = rmv.toFixed(2) + " Cu Ft/min";
}
document.getElementById('sacResults').style.display = 'block';
}