Submerged Ultrafiltration (SUF)
Membrane modules immersed directly in the tank, drawing water through the membrane under gentle suction for reuse-quality filtrate.
Membrane filtration for reuse and RO pre-treatment
In a submerged ultrafiltration system, the membrane modules sit directly in an open tank and filtered water is drawn through them under a gentle vacuum. Ultrafiltration membranes are a physical barrier to suspended solids, turbidity and most bacteria, so the filtrate quality stays consistent even when the feed varies.
Adroit’s SUF systems are used for polishing treated wastewater for reuse and for preparing water for reverse osmosis.

Where SUF fits
Application
SUF is used after biological treatment when the treated water is to be reused, or ahead of RO, where suspended solids and turbidity must be removed reliably to protect the RO membranes. Because the membranes work in an open tank rather than pressure vessels, the system is simple to lay out and suits both new plants and upgrades.
How submerged ultrafiltration works
Operation
The membrane modules are immersed in the feed tank. A permeate pump creates a low suction on the inside of the membranes, and clean water passes through the membrane wall and is drawn off. Solids stay in the tank.
Air bubbled up past the membranes (air scour) keeps the surfaces clean while they filter. At intervals, the flow is briefly reversed to backwash the membranes, and periodic chemical cleaning restores performance. These cycles are automated.
Where SUF is used
Application areas
Industrial wastewater reuse
Reuse-quality water for process and utility use.
Municipal wastewater polishing
Treated water for non-potable reuse.
RO pre-treatment
Reliable removal of suspended solids and turbidity before RO.
Water recycling
Compact recycling systems for buildings and industries.
Benefits of submerged UF
Features & advantages
Consistent filtrate
Membrane barrier gives stable quality regardless of feed variation.
Low-pressure operation
Gentle suction rather than high-pressure pumping.
Compact
Modules use tank volume efficiently.
Automated cleaning
Air scour, backwash and chemical cleaning cycles run automatically.
Design basis
Dimensions & manufacturing
Membrane modules submerged in open tank
Configuration
Low-pressure suction
Filtration mode
Designed to project
Capacity
Feed quality, flux, temperature, recovery, cleaning regime, filtrate quality required
Design inputs
Frequently asked questions
FAQ
What is submerged ultrafiltration?
It is ultrafiltration in which the membrane modules sit in an open tank and water is drawn through them by suction, instead of being pumped through pressure vessels.
Can SUF be used before RO?
Yes. It is widely used as RO pre-treatment because it removes suspended solids and turbidity consistently.
How is membrane fouling controlled?
With continuous air scour, regular backwashing and periodic chemical cleaning.
What do you need to size an SUF system?
Feed water quality, flow, temperature, the filtrate quality needed and how the water will be reused.
Brochures, datasheets & media
Downloads
Documents
files
Photos
photos
Videos
videos
Explore more solutions
Related technologies
Filter Underdrainage System
The part of a sand filter you never see, and the part that decides whether it filters and backwashes evenly.
GDisk® Pile Cloth Disk Filter
Fully submerged, gravity-fed tertiary filter with polyester pile cloth media and automatic backwash, designed for high-efficiency suspended-solids removal in a compact footprint.
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 Submerged Ultrafiltration (SUF)
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();
}
})();