For scuba divers, understanding your Surface Air Consumption (SAC) rate is fundamental to dive safety and planning. Your SAC rate measures how much air you would consume at the surface based on your consumption at depth. This allows you to predict how long a tank of air will last on future dives at different depths.
How is SAC Rate Calculated?
The formula for SAC rate is: SAC = (Gas Consumed / Time) / ATA
Gas Consumed: The difference between your starting and ending tank pressure.
Time: The duration of your dive in minutes.
ATA: Atmosphere Absolute (ambient pressure). In saltwater, this is calculated as (Depth in Feet / 33) + 1 or (Depth in Meters / 10) + 1.
Difference Between SAC and RMV
While SAC rate is often expressed in pressure units (PSI/min or Bar/min), it is dependent on the size of the tank you used. Respiratory Minute Volume (RMV) translates that pressure into actual volume (Cubic Feet/min or Liters/min). RMV is the "true" measurement of your lung capacity usage because it remains consistent regardless of whether you are using a small 50 cu ft tank or a large 130 cu ft steel tank.
Practical Example
If you dive to an average depth of 66 feet (3 ATA) for 40 minutes and use 1500 PSI from an 80 cubic foot tank (rated at 3000 PSI):
Pressure consumed per minute: 1500 PSI / 40 min = 37.5 PSI/min.
SAC Rate: 37.5 PSI/min / 3 ATA = 12.5 PSI/min.
RMV: (12.5 PSI / 3000 PSI) * 80 cu ft = 0.33 CuFt/min.
Tips to Improve Your Air Consumption
If your SAC rate is higher than you'd like, focus on these three areas:
Buoyancy Control: Constant adjustments with your BCD use air and require physical effort. Master your trim to stay horizontal.
Relaxation: Move slowly. Water is much denser than air; doubling your speed requires four times the energy.
Proper Weighting: Being overweighted causes you to carry more air in your BCD, creating drag and increasing the effort needed to move.
function updateUnits() {
var system = document.querySelector('input[name="unitSystem"]:checked').value;
var labelStartP = document.getElementById('labelStartP');
var labelEndP = document.getElementById('labelEndP');
var labelDepth = document.getElementById('labelDepth');
var labelTank = document.getElementById('labelTank');
var ratedPressGroup = document.getElementById('ratedPressGroup');
if (system === 'metric') {
labelStartP.innerText = 'Starting Pressure (Bar)';
labelEndP.innerText = 'Ending Pressure (Bar)';
labelDepth.innerText = 'Average Depth (Meters)';
labelTank.innerText = 'Tank Volume (Liters)';
ratedPressGroup.style.display = 'none';
} else {
labelStartP.innerText = 'Starting Pressure (PSI)';
labelEndP.innerText = 'Ending Pressure (PSI)';
labelDepth.innerText = 'Average Depth (Feet)';
labelTank.innerText = 'Tank Size (Cubic Feet)';
ratedPressGroup.style.display = 'flex';
}
}
function calculateSAC() {
var system = document.querySelector('input[name="unitSystem"]:checked').value;
var startP = parseFloat(document.getElementById('startP').value);
var endP = parseFloat(document.getElementById('endP').value);
var depth = parseFloat(document.getElementById('avgDepth').value);
var time = parseFloat(document.getElementById('diveTime').value);
var tankSize = parseFloat(document.getElementById('tankSize').value);
var ratedP = parseFloat(document.getElementById('ratedP').value);
if (isNaN(startP) || isNaN(endP) || isNaN(depth) || isNaN(time) || isNaN(tankSize) || time <= 0) {
alert("Please enter valid numbers for all fields.");
return;
}
var consumed = startP – endP;
if (consumed <= 0) {
alert("End pressure must be lower than start pressure.");
return;
}
var ata, sac, rmv;
if (system === 'imperial') {
ata = (depth / 33) + 1;
// SAC in PSI/min
sac = (consumed / time) / ata;
// RMV in CuFt/min
rmv = (sac / ratedP) * tankSize;
document.getElementById('sacResult').innerText = sac.toFixed(2) + " PSI/min";
document.getElementById('rmvResult').innerText = rmv.toFixed(2) + " CuFt/min";
} else {
ata = (depth / 10) + 1;
// SAC in Bar/min
sac = (consumed / time) / ata;
// RMV in Liters/min (Liters * Bar)
rmv = sac * tankSize;
document.getElementById('sacResult').innerText = sac.toFixed(2) + " Bar/min";
document.getElementById('rmvResult').innerText = rmv.toFixed(2) + " L/min";
}
document.getElementById('ataResult').innerText = ata.toFixed(2) + " ATA";
document.getElementById('results').style.display = 'block';
}