Total Fluid Volume (Oil + Water)
Produced Water Volume Only
Choose whether to dose the entire stream or just the water phase.
Required Chemical Volume:0.00 Gal/day
Metric Equivalent:0.00 L/day
Pump Setting (Approx):0.00 Quarts/day
Treated Volume:0 BPD
Optimizing Chemical Dosage in Oil & Gas Production
Calculating the correct injection rate for corrosion inhibitors is critical for maintaining the integrity of pipelines and vessels in upstream and midstream operations. Under-dosing can lead to catastrophic asset failure due to MIC (Microbiologically Influenced Corrosion) or acid gas attack, while over-dosing results in unnecessary operational expenditure (OPEX) and potential emulsion issues downstream.
How to Calculate Injection Rates
The calculation relies on the relationship between the volume of fluid passing through the system and the desired concentration of the chemical, usually expressed in parts per million (PPM).
The General Formula: Injection Rate (GPD) = Treated Volume (BPD) × 42 × (PPM / 1,000,000)
Where:
BPD: Barrels Per Day of the fluid being treated.
42: The conversion factor from barrels to US gallons.
PPM: Parts Per Million of inhibitor required.
Water Cut Considerations
One of the most important variables in this calculation is the Water Cut. Corrosion typically occurs in the water phase of the production fluid. Consequently, many chemical programs utilize water-soluble inhibitors.
Water-Soluble Inhibitors: Should generally be calculated based on the Produced Water Volume only.
Oil-Soluble / Dispersible Inhibitors: May need to be calculated based on Total Fluid Volume to ensure the chemical is adequately distributed to reach the water phase.
Our calculator allows you to toggle between "Total Fluid Volume" and "Produced Water Volume Only" to accommodate different chemical types and treatment strategies.
Monitoring and Verification
Calculating the theoretical rate is step one. In the field, operators must verify the actual injection rate using a calibration cylinder (drawdown test) on the chemical pump. Factors such as pump efficiency, backpressure, and fluid viscosity can cause the actual delivered volume to differ from the pump setting.
function calculateInjectionRate() {
// 1. Get Input Values
var flowRateInput = document.getElementById('flowRate').value;
var waterCutInput = document.getElementById('waterCut').value;
var targetPPMInput = document.getElementById('targetPPM').value;
// 2. Validate Inputs
if (flowRateInput === "" || waterCutInput === "" || targetPPMInput === "") {
alert("Please fill in all fields (Flow Rate, Water Cut, and Target PPM).");
return;
}
var flowRate = parseFloat(flowRateInput);
var waterCut = parseFloat(waterCutInput);
var targetPPM = parseFloat(targetPPMInput);
var flowUnit = document.getElementById('flowUnit').value;
var basis = document.getElementById('calcBasis').value;
// 3. Logic: Normalize Flow to Barrels Per Day (BPD)
var flowBPD = 0;
if (flowUnit === "M3") {
// 1 m3 approx 6.2898 barrels
flowBPD = flowRate * 6.28981;
} else {
flowBPD = flowRate;
}
// 4. Logic: Determine Treated Volume based on Water Cut
var treatedBPD = 0;
// Sanity check on water cut
if (waterCut > 100) waterCut = 100;
if (waterCut < 0) waterCut = 0;
if (basis === "water") {
// Calculate volume of water only
treatedBPD = flowBPD * (waterCut / 100);
} else {
// Calculate total volume
treatedBPD = flowBPD;
}
// 5. Calculate Injection Rate (Gallons Per Day)
// Formula: Volume (BPD) * 42 (gal/bbl) * (ppm / 1,000,000)
var gallonsPerDay = treatedBPD * 42 * (targetPPM / 1000000);
// 6. Conversions for Output
var litersPerDay = gallonsPerDay * 3.78541;
var quartsPerDay = gallonsPerDay * 4;
// 7. Display Results
document.getElementById('resGPD').innerHTML = gallonsPerDay.toFixed(2) + " Gal/day";
document.getElementById('resLPD').innerHTML = litersPerDay.toFixed(2) + " L/day";
document.getElementById('resQPD').innerHTML = quartsPerDay.toFixed(2) + " Quarts/day";
document.getElementById('resTreated').innerHTML = treatedBPD.toFixed(1) + " BPD (" + basis + ")";
// Show result box
document.getElementById('results').style.display = "block";
}