Agitator & Flash Mixer
Dynamically balanced flash mixers and agitators for coagulant dosing, chemical preparation and process mixing, for plants up to 150 MLD.
Engineered mixing for water and wastewater treatment
Adroit’s agitators and flash mixers blend chemicals, solids and liquids into a uniform mix in water treatment, sewage treatment and industrial plants. We supply them for flash mixing of coagulant at the WTP inlet, for alum, lime and polyelectrolyte preparation tanks, and for general process mixing, from small dosing tanks to large mixing chambers.
Each unit is designed around the tank and the duty: impeller type, diameter and speed, shaft size, gearbox and supports. Every agitator we build has an impeller, shaft, bearing housing, underwater guide support and mounting structure, and the rotating assembly is dynamically balanced.

Flash mixing and agitation, and the difference
Application
A flash mixer is the first step of chemical treatment at a water treatment plant. It disperses the coagulant through the incoming water within seconds, so the chemical reacts evenly before the water moves to the flocculator. It needs high-intensity mixing over a short detention time.
An agitator does longer, steadier work: dissolving and keeping chemicals in solution in dosing tanks, keeping lime slurry in suspension, or blending two liquids. The impeller and speed are chosen for that duty, not for high shear.
How our agitators are built to work
Operation
A geared motor on top of the tank drives a vertical shaft carrying one or more impellers. We use pitched blade turbine impellers as standard, because they give both axial and radial flow and mix efficiently. Flat blade, propeller and hydrofoil impellers are supplied where the duty or tender calls for them.
The shaft runs in a heavy-duty bearing housing with SKF or NTN bearings that take both radial and axial loads, which keeps the shaft aligned and reduces maintenance. On long shafts, an underwater guide with a steady bush or a lantern support holds the bottom of the shaft, removing bending and torsional loads and extending the life of the whole assembly.
Where Adroit agitators are used
Application areas
Municipal water treatment plants
Flash mixing of coagulant; alum, lime and polyelectrolyte preparation.
Municipal sewage treatment plants
Chemical dosing and mixing for tertiary treatment and sludge conditioning.
Effluent treatment plants
Neutralisation, chemical dosing and process mixing.
Food processing and paper industries
Process and chemical mixing.
Why choose Adroit's agitators
Features & advantages
Right impeller for the job
Pitched blade turbine as standard; flat blade, propeller and hydrofoil as required. Impeller and shaft in SS 304 or SS 316.
Designed to recognised guidance
Designed to the CPHEEO manual and the EEUA agitator handbook.
Generous safety margins
Minimum service factor of 1.25 on the gearbox and 1.2 on the motor, or higher if the tender requires it.
Quality bearings
Heavy-duty bearing housing with SKF or NTN bearings rated for radial and axial loads.
Supported shafts
Underwater guide or lantern support to eliminate bending and torsional stress on long shafts.
Quick installation
Impeller blades bolted or welded to the hub to suit site conditions; hollow or solid shafts as required.
Agitator and flash mixer specifications
Dimensions & manufacturing
Up to 150 MLD plant flow
Design capacity
Up to 30 HP
Motor power
Pitched blade turbine, flat blade, propeller, hydrofoil
Impeller types
MS / SS 304 / SS 316 / MS with FRP lining
Impeller MOC
Hollow or solid
Shaft
SKF / NTN or equivalent
Bearings
Gearbox 1.25 minimum, motor 1.2 minimum
Service factor
Top-mounted, vertical
Mounting
Frequently asked questions
FAQ
What is a flash mixer used for in water treatment?
It rapidly disperses the coagulant (alum, PAC or ferric) through the raw water so coagulation happens evenly before the water enters the flocculator.
How is a flash mixer different from an agitator?
A flash mixer gives short, high-intensity mixing to disperse chemicals quickly. An agitator gives longer, lower-intensity mixing to dissolve, blend or keep solids in suspension.
How is the mixer power decided?
From the tank volume, the required mixing intensity (velocity gradient, G), the liquid properties and the impeller type. We design to the value given in the tender or process design.
Can you supply agitators for alum and lime tanks?
Yes. Alum, lime and polyelectrolyte preparation tanks are among our most common applications.
What materials are available?
Impellers and shafts in MS, SS 304, SS 316 or MS with FRP lining, chosen according to the chemical being handled.
Brochures, datasheets & media
Downloads
Documents
files
Photos
photos
Videos
videos
Explore more solutions
Related technologies
Cycloxy Batchflow® SBR
SBR system using Cycloxy™ jet aspirators for aeration and mixing, with the Batchflow® floating weir decanter for controlled decanting.
Batchflow® SBR
Sequencing batch reactor (SBR) system with a floating weir decanter built specifically for SBR plants.
Submersible Mixer
Compact underwater mixer that keeps solids in suspension and tank contents uniform, installed and lifted out on a guide rail.
Cycloxyâ„¢ Jet Aspirator
Aeration and mixing from one machine. Draws in atmospheric air through a hollow shaft and breaks it into fine bubbles underwater, with no blower and no diffuser grid.
Need fine screening sized for your inlet works?
Send us your flow rate, channel dimensions and the fine-solids you need to capture — our engineers will recommend the right Stepflow configuration.
Call us
+91 70248-48383Email
[email protected]
Enquire about Agitator & Flash Mixer
Product enquiry
Tell us about your requirement and we’ll respond with specifications, references and pricing.
Request a quotation
Fields marked * are required. We typically respond within one business day.
(() => {
if (window.adroitEnquiryButtonsReady) return;
window.adroitEnquiryButtonsReady = true;
const rootSelector = ".adroit-contact-form";
const buttonSelector = [
"#wsf-1-field-38",
"#wsf-1-field-39",
].join(", ");
const values = {
"wsf-1-field-38": "Product Enquiry",
"wsf-1-field-39": "Service Request",
};
function getFormRoot(element) {
return element.closest(rootSelector);
}
function getHiddenField(form) {
let field = form.querySelector(
'input[data-enquiry-type-field="true"]'
);
if (!field) {
field = document.createElement("input");
field.type = "hidden";
field.name = "inquiry_type";
field.dataset.enquiryTypeField = "true";
form.appendChild(field);
}
return field;
}
function getErrorRow(formRoot) {
let errorRow = formRoot.querySelector(
'[data-enquiry-error-row="true"]'
);
if (errorRow) return errorRow;
const fieldsGrid = formRoot.querySelector(".wsf-fields");
const firstField = formRoot.querySelector(
"#wsf-1-field-wrapper-20"
);
if (!fieldsGrid || !firstField) return null;
errorRow = document.createElement("div");
errorRow.className =
"wsf-extra-small-12 wsf-tile wsf-field-wrapper";
errorRow.dataset.enquiryErrorRow = "true";
errorRow.hidden = true;
const errorMessage = document.createElement("div");
errorMessage.className = "wsf-invalid-feedback";
errorMessage.textContent = "This field is required.";
errorMessage.setAttribute("aria-live", "polite");
errorRow.appendChild(errorMessage);
fieldsGrid.insertBefore(errorRow, firstField);
return errorRow;
}
function showError(formRoot) {
const errorRow = getErrorRow(formRoot);
if (!errorRow) return;
errorRow.hidden = false;
const errorMessage = errorRow.querySelector(
".wsf-invalid-feedback"
);
if (errorMessage) {
errorMessage.style.display = "block";
}
formRoot.querySelectorAll(buttonSelector).forEach((button) => {
button.classList.add("is-invalid");
button.setAttribute("aria-invalid", "true");
});
}
function clearError(formRoot) {
const errorRow = formRoot.querySelector(
'[data-enquiry-error-row="true"]'
);
if (errorRow) {
errorRow.hidden = true;
}
formRoot.querySelectorAll(buttonSelector).forEach((button) => {
button.classList.remove("is-invalid");
button.removeAttribute("aria-invalid");
});
}
function hasSelection(formRoot) {
return Boolean(
formRoot.querySelector(
"#wsf-1-field-38.is-selected, #wsf-1-field-39.is-selected"
)
);
}
function validateEnquiry(formRoot) {
if (hasSelection(formRoot)) {
clearError(formRoot);
return true;
}
showError(formRoot);
return false;
}
function selectButton(button) {
const formRoot = getFormRoot(button);
const form = button.closest("form");
if (!formRoot || !form) return;
formRoot.querySelectorAll(buttonSelector).forEach((item) => {
const isSelected = item === button;
item.classList.toggle("is-selected", isSelected);
item.setAttribute("aria-pressed", String(isSelected));
});
getHiddenField(form).value = values[button.id] || "";
clearError(formRoot);
}
/*
* Window capture runs before WS Form's button click handler.
* This stops WS Form AJAX submission only when enquiry type is missing.
*/
window.addEventListener(
"click",
(event) => {
const enquiryButton = event.target.closest(
`${rootSelector} #wsf-1-field-38, ${rootSelector} #wsf-1-field-39`
);
if (enquiryButton) {
selectButton(enquiryButton);
return;
}
const submitButton = event.target.closest(
`${rootSelector} button[type="submit"], ${rootSelector} input[type="submit"]`
);
if (!submitButton) return;
const formRoot = getFormRoot(submitButton);
if (!formRoot) return;
if (validateEnquiry(formRoot)) return;
event.preventDefault();
event.stopImmediatePropagation();
},
true
);
/*
* Covers pressing Enter in a form field.
*/
window.addEventListener(
"submit",
(event) => {
const form = event.target;
if (!(form instanceof HTMLFormElement)) return;
const formRoot = getFormRoot(form);
if (!formRoot) return;
if (validateEnquiry(formRoot)) return;
event.preventDefault();
event.stopImmediatePropagation();
},
true
);
function initialize() {
document.querySelectorAll(rootSelector).forEach((formRoot) => {
const form = formRoot.querySelector("form");
formRoot.querySelectorAll(buttonSelector).forEach((button) => {
button.classList.remove("is-selected", "is-invalid");
button.removeAttribute("aria-invalid");
button.setAttribute("aria-pressed", "false");
});
clearError(formRoot);
if (form) {
getHiddenField(form).value = "";
}
});
}
if (document.readyState === "loading") {
document.addEventListener("DOMContentLoaded", initialize, {
once: true,
});
} else {
initialize();
}
})();