.calc-container {
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif;
max-width: 800px;
margin: 20px auto;
padding: 25px;
border: 1px solid #e1e1e1;
border-radius: 8px;
background-color: #f9f9f9;
color: #333;
}
.calc-header {
text-align: center;
margin-bottom: 25px;
}
.calc-grid {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 20px;
}
.input-group {
margin-bottom: 15px;
}
.input-group label {
display: block;
font-weight: 600;
margin-bottom: 5px;
font-size: 14px;
}
.input-group input, .input-group select {
width: 100%;
padding: 10px;
border: 1px solid #ccc;
border-radius: 4px;
box-sizing: border-box;
}
.calc-btn {
grid-column: span 2;
background-color: #0056b3;
color: white;
padding: 12px;
border: none;
border-radius: 4px;
cursor: pointer;
font-size: 16px;
font-weight: bold;
transition: background-color 0.3s;
}
.calc-btn:hover {
background-color: #004494;
}
.results-section {
margin-top: 25px;
padding: 20px;
background-color: #fff;
border-radius: 6px;
border-left: 5px solid #0056b3;
display: none;
}
.result-item {
display: flex;
justify-content: space-between;
margin-bottom: 10px;
border-bottom: 1px solid #eee;
padding-bottom: 5px;
}
.result-value {
font-weight: bold;
color: #0056b3;
}
.article-content {
margin-top: 40px;
line-height: 1.6;
}
.article-content h2 {
color: #222;
border-bottom: 2px solid #0056b3;
padding-bottom: 5px;
}
@media (max-width: 600px) {
.calc-grid {
grid-template-columns: 1fr;
}
.calc-btn {
grid-column: span 1;
}
}
Feedwater Flow Rate (m³/hr)
Dissolved Oxygen (ppm/mg/L)
Scavenger Type (Reaction Ratio)
Sodium Sulfite (8:1)
Hydrazine (1:1)
Carbohydrazide (1.4:1)
DEHA (1.2:1)
Custom Ratio
Stoichiometric Ratio (kg/kg O₂)
Desired Residual Scavenger (ppm)
Product Active Content (%)
Calculate Dosing Requirements
Stoichiometric Demand:
Total Chemical Concentration Required:
Dosing Rate (Pure Product):
Actual Product Injection Rate (as supplied):
Daily Chemical Consumption:
Understanding Oxygen Scavenger Dosing
Oxygen scavenging is a critical chemical process in boiler water treatment designed to remove residual dissolved oxygen from feedwater. Even small amounts of oxygen can lead to severe pitting and localized corrosion, which can rapidly compromise the integrity of boiler tubes and heat exchangers.
The Calculation Formula
The dosing rate is determined by three main factors: the amount of oxygen to be removed, the stoichiometric ratio of the chemical used, and the desired excess (residual) concentration to ensure all oxygen is neutralized.
General Formula:
Total Dose (ppm) = (Dissolved O₂ ppm × Reaction Ratio) + Desired Residual ppm
Injection Rate (g/hr) = (Total Dose ppm × Flow Rate m³/hr) / (Active Content % / 100)
Typical Stoichiometric Ratios
Sodium Sulfite (Na₂SO₃): Theoretically requires 7.88 ppm to remove 1 ppm of oxygen. In practice, a ratio of 8:1 or 10:1 is used.
Hydrazine (N₂H₄): Reacts 1:1 with oxygen by weight. It is often preferred for high-pressure boilers as it doesn't add dissolved solids.
DEHA (Diethylhydroxylamine): Typically requires about 1.2 to 3 ppm per ppm of oxygen depending on temperature and pH.
Example Calculation
If you have a boiler with a feedwater flow of 10 m³/hr, a dissolved oxygen level of 0.05 ppm, and you are using a 100% pure Sodium Sulfite solution with a target residual of 30 ppm:
Stoichiometric Demand: 0.05 ppm O₂ × 8 = 0.4 ppm
Total Concentration: 0.4 ppm + 30 ppm (residual) = 30.4 ppm
Dosing Rate: 30.4 ppm × 10 m³/hr = 304 grams per hour (g/hr)
function updateRatio() {
var type = document.getElementById("scavengerType").value;
var customGroup = document.getElementById("customRatioGroup");
if (type === "custom") {
customGroup.style.display = "block";
} else {
customGroup.style.display = "none";
}
}
function calculateDosing() {
var flow = parseFloat(document.getElementById("flowRate").value);
var o2 = parseFloat(document.getElementById("dissolvedO2").value);
var res = parseFloat(document.getElementById("residual").value);
var active = parseFloat(document.getElementById("productConcentration").value);
var typeValue = document.getElementById("scavengerType").value;
var ratio = 0;
if (typeValue === "custom") {
ratio = parseFloat(document.getElementById("customRatio").value);
} else {
ratio = parseFloat(typeValue);
}
if (isNaN(flow) || isNaN(o2) || isNaN(res) || isNaN(active) || isNaN(ratio)) {
alert("Please enter valid numerical values for all fields.");
return;
}
if (active 1 ppm = 1 g/m3
var pureRate = totalConcNeeded * flow;
// 4. Actual product rate (considering concentration)
var actualRate = pureRate / (active / 100);
// 5. Daily consumption (kg/day)
var dailyKg = (actualRate * 24) / 1000;
// Display results
document.getElementById("stoichDemand").innerText = stoich.toFixed(3) + " ppm";
document.getElementById("totalConc").innerText = totalConcNeeded.toFixed(2) + " ppm";
document.getElementById("pureDoseRate").innerText = pureRate.toFixed(2) + " g/hr";
document.getElementById("actualDoseRate").innerText = actualRate.toFixed(2) + " g/hr (" + (actualRate/1000).toFixed(3) + " kg/hr)";
document.getElementById("dailyConsumption").innerText = dailyKg.toFixed(2) + " kg/day";
document.getElementById("results").style.display = "block";
}