A weir is a barrier across the width of a river or open channel that alters the flow characteristics of the water. By creating an obstruction, weirs allow engineers and hydrologists to measure the volumetric flow rate (discharge) based on the height of the water (head) above the weir crest.
Types of Weirs Supported
Rectangular Suppressed: The weir extends across the entire width of the channel. The side contractions are suppressed.
Rectangular Contracted: The notch is narrower than the channel width, creating contractions on the sides that reduce flow efficiency.
Cipoletti (Trapezoidal): Features a trapezoidal notch with side slopes of 1:4. This shape compensates for the end contractions inherent in rectangular weirs.
V-Notch (Triangular): Ideal for measuring low flow rates. The angle of the "V" (typically 90° or 60°) determines the discharge capacity.
Key Calculation Parameters
To accurately calculate the flow rate ($Q$), precise measurements of the following are required:
Head ($H$): The height of the water above the weir crest. This must be measured upstream from the weir, at a distance of at least 4 times the head, to avoid the drawdown curve.
Crest Length ($L$): The horizontal width of the notch (applicable for rectangular and Cipoletti weirs).
Formulas Used
This calculator utilizes standard hydraulic formulas (such as the Francis formula) tailored for each geometry:
For Imperial units, the base constant is approximately 3.33 for suppressed rectangular weirs.
For Metric units, the base constant is approximately 1.84 for suppressed rectangular weirs.
V-Notch weirs utilize the head raised to the power of 2.5, while rectangular weirs use the power of 1.5.
Why Accurate Measurement Matters
Flow rate data is critical for irrigation management, wastewater treatment plant operations, dam safety monitoring, and environmental compliance. Even small errors in measuring the head ($H$) can result in significant percentage errors in the calculated discharge due to the exponential nature of the formulas.
function updateWfrLabels() {
var radios = document.getElementsByName('wfr_unit');
var unit = 'imperial';
for (var i = 0; i < radios.length; i++) {
if (radios[i].checked) {
unit = radios[i].value;
break;
}
}
var lenLabel = document.getElementById('label_len_unit');
var headLabel = document.getElementById('label_head_unit');
if (unit === 'imperial') {
lenLabel.innerText = 'ft';
headLabel.innerText = 'ft';
document.getElementById('wfr_length').placeholder = "e.g. 5.0";
document.getElementById('wfr_head').placeholder = "e.g. 1.2";
} else {
lenLabel.innerText = 'm';
headLabel.innerText = 'm';
document.getElementById('wfr_length').placeholder = "e.g. 1.5";
document.getElementById('wfr_head').placeholder = "e.g. 0.35";
}
// Clear results on unit switch to avoid confusion
document.getElementById('wfr_result_container').style.display = 'none';
}
function toggleWfrFields() {
var type = document.getElementById('wfr_type').value;
var lenGroup = document.getElementById('wfr_length_group');
if (type.startsWith('vnotch')) {
lenGroup.style.display = 'none';
} else {
lenGroup.style.display = 'block';
}
}
function calculateWeirFlow() {
// Inputs
var type = document.getElementById('wfr_type').value;
var length = parseFloat(document.getElementById('wfr_length').value);
var head = parseFloat(document.getElementById('wfr_head').value);
// Determine Unit System
var radios = document.getElementsByName('wfr_unit');
var unit = 'imperial';
for (var i = 0; i < radios.length; i++) {
if (radios[i].checked) {
unit = radios[i].value;
break;
}
}
// Validation
if (isNaN(head) || head <= 0) {
alert("Please enter a valid positive number for Head Height.");
return;
}
if (!type.startsWith('vnotch') && (isNaN(length) || length <= 0)) {
alert("Please enter a valid positive number for Weir Crest Length.");
return;
}
var flowRate = 0; // Q
// Calculation Logic based on Unit System
// Imperial: Q in cfs (cubic feet per second), L in ft, H in ft
// Metric: Q in m³/s, L in m, H in m
if (unit === 'imperial') {
switch(type) {
case 'rect_suppressed':
// Francis Formula: Q = 3.33 * L * H^1.5
flowRate = 3.33 * length * Math.pow(head, 1.5);
break;
case 'rect_contracted':
// Francis Formula with 2 end contractions: Q = 3.33 * (L – 0.2H) * H^1.5
// Effective length cannot be negative
var effLength = length – (0.2 * head);
if (effLength < 0) effLength = 0;
flowRate = 3.33 * effLength * Math.pow(head, 1.5);
break;
case 'cipoletti':
// Q = 3.367 * L * H^1.5
flowRate = 3.367 * length * Math.pow(head, 1.5);
break;
case 'vnotch_90':
// Q = 2.50 * H^2.5
flowRate = 2.50 * Math.pow(head, 2.5);
break;
case 'vnotch_60':
// Q = 1.43 * H^2.5
flowRate = 1.43 * Math.pow(head, 2.5);
break;
}
} else {
// Metric
switch(type) {
case 'rect_suppressed':
// Q = 1.84 * L * H^1.5
flowRate = 1.84 * length * Math.pow(head, 1.5);
break;
case 'rect_contracted':
// Q = 1.84 * (L – 0.2H) * H^1.5
var effLengthM = length – (0.2 * head);
if (effLengthM < 0) effLengthM = 0;
flowRate = 1.84 * effLengthM * Math.pow(head, 1.5);
break;
case 'cipoletti':
// Q = 1.86 * L * H^1.5
flowRate = 1.86 * length * Math.pow(head, 1.5);
break;
case 'vnotch_90':
// Q = 1.38 * H^2.5
flowRate = 1.38 * Math.pow(head, 2.5);
break;
case 'vnotch_60':
// Q = 0.79 * H^2.5
flowRate = 0.79 * Math.pow(head, 2.5);
break;
}
}
// Secondary Calculations
// Q is in CFS or CMS (m3/s)
var perMin, perDay, mainUnit, subUnit;
if (unit === 'imperial') {
mainUnit = 'CFS (ft³/s)';
subUnit = ' ft³';
perMin = flowRate * 60;
perDay = flowRate * 86400;
} else {
mainUnit = 'CMS (m³/s)';
subUnit = ' m³';
perMin = flowRate * 60;
perDay = flowRate * 86400;
}
// Display Results
document.getElementById('wfr_result_container').style.display = 'block';
document.getElementById('wfr_main_result').innerHTML = flowRate.toFixed(4) + " " + mainUnit;
document.getElementById('wfr_min_result').innerText = perMin.toFixed(2) + subUnit + "/min";
document.getElementById('wfr_day_result').innerText = perDay.toLocaleString(undefined, {maximumFractionDigits: 0}) + subUnit;
}
// Initialize state
toggleWfrFields();
updateWfrLabels();