ISO 9001 · 14001 · 45001

An Advanced Water Treatment Equipment Company

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

Brochures, datasheets & media

Downloads

Documents

files

No documents are available for this product.

Photos

photos

No media available for this product.

Videos

videos

No videos are available for this product.

Explore more solutions

Related technologies

Cycloxy Batchflow® SBR

Mixing & Aeration

SBR system using Cycloxy™ jet aspirators for aeration and mixing, with the Batchflow® floating weir decanter for controlled decanting.

View product

Batchflow® SBR

Mixing & Aeration

Sequencing batch reactor (SBR) system with a floating weir decanter built specifically for SBR plants.

View product

Submersible Mixer

Mixing & Aeration

Compact underwater mixer that keeps solids in suspension and tank contents uniform, installed and lifted out on a guide rail.

View product

Cycloxyâ„¢ Jet Aspirator

Mixing & Aeration

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.

View product

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.

    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();
  }
})();