The required gas-liquid ratio to lift fluid (scf/STB)
Natural gas produced from the reservoir (scf/STB)
Please enter valid positive numbers. Target GLR must be greater than Formation GLR.
Required Gas Injection Rate ($q_{inj}$)
0 Mscf/d
(0 scf/day)
Understanding Gas Lift Injection Rates
Gas lift is one of the most common forms of artificial lift used in the oil and gas industry. It involves injecting high-pressure gas from the surface into the well stream to reduce the hydrostatic pressure of the fluid column. This reduction in bottom-hole pressure allows the reservoir fluids to flow to the surface at the desired production rate.
Why Calculate Injection Rate?
Determining the correct gas injection rate ($q_{inj}$) is critical for optimizing production and minimizing operating costs. If the injection rate is too low, the fluid column remains too heavy to flow efficiently. If the rate is too high, friction losses increase, reducing efficiency and wasting costly injection gas.
The Calculation Formula
The fundamental equation to calculate the required daily gas injection rate relies on the difference between the Total (Optimum) Gas-Liquid Ratio required to lift the fluid and the Formation Gas-Liquid Ratio naturally present in the reservoir fluid.
qinj = qL × (GLRopt – GLRf)
Where:
qinj = Gas Injection Rate (scf/day)
qL = Target Liquid Production Rate (STB/day)
GLRopt = Target/Optimum Total Gas-Liquid Ratio (scf/STB)
GLRf = Formation Gas-Liquid Ratio (scf/STB)
Example Scenario
Consider a well where the operator wants to produce 1,000 STB/day of liquid. Based on vertical lift performance curves (VLPC), the optimum GLR required to lift this fluid volume from the tubing depth is determined to be 800 scf/STB.
The reservoir naturally produces gas with the oil at a ratio of 200 scf/STB (Formation GLR).
In industry standard reporting (Mscf = 1,000 standard cubic feet), the required injection rate is 600 Mscf/d.
Factors Influencing the Rate
While this calculator provides the theoretical requirement based on mass balance, the actual field injection rate may vary due to:
Injection Pressure: The surface casing pressure available to inject gas.
Valve Performance: The throughput capacity of the gas lift valves.
Temperature: Downhole temperatures affecting gas expansion.
Friction: High injection rates can cause excessive friction in the tubing, creating backpressure.
function calculateGasLift() {
// Get input values using var
var liquidRateInput = document.getElementById("liquidRate");
var targetGLRInput = document.getElementById("targetGLR");
var formationGLRInput = document.getElementById("formationGLR");
var errorMsg = document.getElementById("errorMsg");
var resultBox = document.getElementById("resultBox");
var resultMscf = document.getElementById("resultMscf");
var resultScf = document.getElementById("resultScf");
// Parse values
var qL = parseFloat(liquidRateInput.value);
var glrOpt = parseFloat(targetGLRInput.value);
var glrF = parseFloat(formationGLRInput.value);
// Reset display
errorMsg.style.display = "none";
resultBox.classList.remove("active");
// Validation logic
if (isNaN(qL) || isNaN(glrOpt) || isNaN(glrF)) {
errorMsg.innerText = "Please fill in all fields with valid numbers.";
errorMsg.style.display = "block";
return;
}
if (qL < 0 || glrOpt < 0 || glrF glrOpt) {
errorMsg.innerText = "Formation GLR is higher than Target GLR. Artificial lift may not be required.";
errorMsg.style.display = "block";
// We calculate anyway but warn, or stop. Typically we stop or show 0.
// Let's show 0 injection required.
var qInj = 0;
var qInjMscf = 0;
} else {
// Main Calculation
// Formula: q_inj = q_L * (GLR_opt – GLR_f)
// Result is in scf/day
var qInj = qL * (glrOpt – glrF);
// Convert to Mscf/day (1 Mscf = 1000 scf)
var qInjMscf = qInj / 1000;
}
// formatting numbers
var displayMscf = qInjMscf.toLocaleString("en-US", { minimumFractionDigits: 2, maximumFractionDigits: 2 });
var displayScf = qInj.toLocaleString("en-US", { minimumFractionDigits: 0, maximumFractionDigits: 0 });
// Update DOM
resultMscf.innerText = displayMscf + " Mscf/d";
resultScf.innerText = "(" + displayScf + " scf/day)";
// Show result
resultBox.style.display = "block";
// Small timeout to allow display:block to apply before adding class for animation
setTimeout(function() {
resultBox.classList.add("active");
}, 10);
}