Accurately calculating the condensate flow rate is the most critical step in correctly sizing steam traps and condensate return lines. If the flow rate is underestimated, condensate will back up into the process equipment, causing water hammer, poor temperature control, and potential equipment damage.
The Physics of Condensate Generation
Condensate is generated when saturated steam gives up its latent heat (enthalpy of evaporation) to the process fluid. The steam phase changes back into the liquid phase (water) without a drop in temperature, provided the pressure remains constant. The mass of condensate produced is directly proportional to the heat load of the application.
Calculation Formula
The fundamental equation for determining condensate flow ($M$) is derived from the heat load ($Q$) and the latent heat of steam ($h_{fg}$):
Formula: M = Q / hfg
M = Condensate Mass Flow Rate (kg/hr)
Q = Total Heat Load (kJ/hr)
hfg = Specific Enthalpy of Evaporation (kJ/kg) at the operating pressure
Step-by-Step Calculation Logic
To use this calculator effectively, understand the variables involved:
Determine Heat Load (Q):
First, calculate how much energy is required to heat your secondary fluid (e.g., water, oil, or air). This is calculated using the specific heat formula:
Q = m × Cp × ΔT Where m is the mass flow of the product, Cp is the specific heat capacity, and ΔT is the temperature rise.
Identify Latent Heat (hfg):
Consult steam tables to find the latent heat value corresponding to your steam pressure. Note that as steam pressure increases, the latent heat decreases. This means higher pressure steam actually requires a slightly higher mass flow to deliver the same amount of heat energy.
Calculate Flow:
Divide the Heat Load (kJ/hr) by the Latent Heat (kJ/kg) to get the Condensate Flow (kg/hr).
Apply Safety Factor:
Steam traps are rarely sized for the exact calculated load. A safety factor is applied to handle startup loads (when cold equipment condenses steam rapidly) and pressure fluctuations. A factor of 1.5 to 2.0 is common for continuous flow heat exchangers.
Common Specific Heat Capacities (Cp)
Substance
Specific Heat (kJ/kg°C)
Water
4.186
Air
1.005
Engine Oil
1.880
Steel
0.490
Why Pressure Matters
It is a common misconception that higher pressure steam contains significantly more energy. While the total enthalpy is higher, the usable latent heat decreases as pressure rises. For example:
At 1 bar g, Latent Heat is approx 2201 kJ/kg.
At 10 bar g, Latent Heat is approx 1999 kJ/kg.
Therefore, if your process requires 1,000,000 kJ of energy, you will generate more condensate (about 10% more) using 10 bar steam compared to 1 bar steam.
// Helper function to update Latent Heat based on dropdown selection
function updateLatentHeat() {
var pressureSelect = document.getElementById('steamPressure');
var latentInput = document.getElementById('latentHeat');
var val = pressureSelect.value;
// Approximate Latent Heat (h_fg) values in kJ/kg for gauge pressures
var steamTable = {
"1": 2201, // ~1 bar g
"3": 2133, // ~3 bar g
"5": 2086, // ~5 bar g
"7": 2048, // ~7 bar g
"10": 1999, // ~10 bar g
"15": 1947 // ~15 bar g
};
if (val !== "custom" && steamTable[val]) {
latentInput.value = steamTable[val];
calculateCondensate(); // Recalculate immediately on change
}
}
function calculateCondensate() {
// 1. Get Input Values
var fluidFlow = parseFloat(document.getElementById('fluidFlowRate').value);
var cp = parseFloat(document.getElementById('specificHeat').value);
var tIn = parseFloat(document.getElementById('tempIn').value);
var tOut = parseFloat(document.getElementById('tempOut').value);
var latentHeat = parseFloat(document.getElementById('latentHeat').value);
var safetyFactor = parseFloat(document.getElementById('safetyFactor').value);
// Result Elements
var resBox = document.getElementById('resultBox');
var resDeltaT = document.getElementById('resDeltaT');
var resHeatLoad = document.getElementById('resHeatLoad');
var resCondensateFlow = document.getElementById('resCondensateFlow');
var resTrapCapacity = document.getElementById('resTrapCapacity');
// 2. Validate Inputs
if (isNaN(fluidFlow) || isNaN(cp) || isNaN(tIn) || isNaN(tOut) || isNaN(latentHeat) || isNaN(safetyFactor)) {
// Do not clear results immediately while typing, but prevent calculation of NaN
return;
}
if (latentHeat <= 0) {
alert("Latent heat must be greater than 0.");
return;
}
// 3. Perform Calculations
// Temperature Difference
var deltaT = tOut – tIn;
if (deltaT < 0) {
// Allow calculation but maybe it's cooling? For steam, usually heating.
// We'll take absolute value for load, assuming heating.
deltaT = Math.abs(deltaT);
}
// Heat Load (Q) = m * Cp * dT
// Unit check: kg/hr * kJ/kg°C * °C = kJ/hr
var heatLoadKJ = fluidFlow * cp * deltaT;
// Convert Heat Load to kW for display (kJ/hr / 3600)
var heatLoadKW = heatLoadKJ / 3600;
// Condensate Flow (M) = Q / h_fg
// Unit check: (kJ/hr) / (kJ/kg) = kg/hr
var condensateFlow = heatLoadKJ / latentHeat;
// Trap Capacity
var trapCapacity = condensateFlow * safetyFactor;
// 4. Update UI
resBox.style.display = "block";
resDeltaT.innerHTML = deltaT.toFixed(1) + " °C";
resHeatLoad.innerHTML = heatLoadKW.toFixed(2) + " kW (" + Math.round(heatLoadKJ).toLocaleString() + " kJ/hr)";
resCondensateFlow.innerHTML = condensateFlow.toFixed(1) + " kg/hr";
resTrapCapacity.innerHTML = Math.ceil(trapCapacity).toLocaleString() + " kg/hr";
}