RO/NF Troubleshooting & Diagnostic Methodology
Scope: spiral-wound thin-film-composite (TFC) polyamide RO/NF elements (8" standard + 4" variants). Numeric thresholds carry vendor + year of source.
Convention markers:
⚠️ — likely bug or incorrect assumption in calling code; highest priority
💡 — enhancement opportunity (new alert, new state, refined threshold)
§0 — Diagnostic Frame of Reference
0.1 Five orthogonal failure modes
Every observed deviation must be classified into one (or more) of:
- Fouling — reversible / partially reversible accumulation (colloidal, biological, organic, particulate)
- Scaling — supersaturation-driven mineral precipitation, mostly in tail/concentrate stages
- Integrity loss — physical breach of active polyamide layer or seal (O-ring, glue line, telescoping, pinhole)
- Mechanical compaction / chemical hydrolysis — pressure-driven densification (largely irreversible); polyamide hydrolysis outside pH 2–11
- Instrumental / operational error — out-of-cal flow meter, conductivity probe drift, dosing pump miscount, baseline never re-established after element swap
0.2 ASTM D4516 — the three observables
| Variable |
Symbol |
Direction of concern |
Typical noise band |
| Normalized permeate flow |
NPF |
decreasing |
±3 % |
| Normalized salt passage |
NSP |
increasing |
±5 % |
| Normalized ΔP (feed → concentrate) |
ΔPn |
increasing |
±5 % |
0.3 Canonical signature table
Combines DuPont 45-D01650 troubleshooting matrix + Hydranautics TSB 107 logic + WaterTechOnline normalization article:
| NPF |
NSP |
ΔPn |
Stage affected |
Most likely root cause |
| ↓ |
→ / slight ↑ |
↑ |
First stage |
Colloidal / particulate fouling (front end) |
| ↓ |
↑ |
↑↑ |
Tail stage |
Advanced scaling (CaCO₃ / CaSO₄ / BaSO₄) |
| ↓ |
↑ |
↑ |
All stages |
Biofouling (channel plugging by biofilm) |
| ↓ |
→ |
→ / slight ↑ |
All stages |
Compaction or organic NOM adsorption |
| → / slight ↓ |
↑↑ |
→ |
Localised (one vessel) |
O-ring leak / element breach / glue-line crack |
| ↑ |
↑↑ |
→ |
All stages |
Chlorine oxidation (PA degradation, RO → NF drift) |
| → |
→ |
↑ |
First stage |
Mechanical / feed-spacer plugging, no membrane impact |
| ↓↓ |
↑ |
→ |
One vessel |
Telescoping in that vessel |
| inconsistent |
inconsistent |
inconsistent |
— |
Suspect instrumentation first; run mass balance |
0.4 Mass balance sanity check
Before any diagnosis:
|Qf − (Qp + Qc)| / Qf < 0.02 # within 2 %
A 5 % error in recovery shifts scale-potential calculations dramatically.
💡 No mass-balance closure check is the #1 cause of phantom alerts from instrument drift. Add this check before any rule evaluation; halt diagnosis if it fails.
§1 — Fouling Taxonomy
1.1 Colloidal fouling
- Definition — sub-µm inorganic / mixed particles (silt, clays, Fe/Al hydroxides) too small to settle
- Predictor — SDI₁₅ (ASTM D4189-23): < 3 acceptable; 3–5 frequent CIP; > 5 needs MF/UF upstream. Vendors recommend SDI₁₅ < 4
- Signature — NPF↓ first stage, ΔP↑ lead element, NSP stable
- Cleaning — alkaline (pH 11–12, NaOH + EDTA + anionic surfactant) first; acid (HCl/citric, pH 2–3) only if Fe/Al hydroxide confirmed
1.2 Biofouling
- Definition — biofilm (EPS matrix + bacteria) on membrane and feed spacer
- Predictors — AOC (assimilable organic carbon): biofilm-free risk threshold ~1 µg/L; conventional treatment achieves 50–100 µg/L (Pereira et al. 2014, PMC4021920). ATP, BFR, rising SDI without particulate cause
- Signature — NPF↓, ΔP↑ over weeks, slight NSP↑; autopsy shows slime mat on lead-element feed face
- Cleaning — alkaline NaOH (pH 11–12) + EDTA + surfactant, then non-oxidizing biocide soak. Never free chlorine for in-service biocide on PA membranes
- DBNPA dosing (industry consensus, IWA AQUA 2022; Feedwater datasheet):
- Online maintenance: 10–50 mg/L for ≥ 1 h, weekly
- CIP additive: 50–200 mg/L circulated 1–3 h
- Continuous preventive: ~1 mg/L (where allowed)
- Bisulfite upstream consumes DBNPA → increase dose
- Other accepted non-oxidizers: isothiazolinone (CMIT/MIT), glutaraldehyde for storage. See Hydranautics TSB 110
1.3 Organic fouling (NOM)
- Definition — natural organic matter (humics, fulvics), hydrophobic adsorption on PA surface
- Signature — NPF↓, NSP stable or slight ↑, ΔP → (no spacer plugging until late)
- Cleaning — alkaline NaOH pH 11–12 + EDTA chelant + surfactant (DuPont 45-D01504 default rule for unknown / combined fouling)
1.4 Particulate fouling
- Definition — > 1 µm material from failed pretreatment (cartridge bypass, blown media filter)
- Diff vs colloidal — visible deposit on cartridge filter; rapid ΔP rise on lead element only
- Cleaning — flush forward at high crossflow; alkaline CIP if needed
1.5 Combined fouling (most common in practice)
DuPont 45-D01504 rule: alkaline cleaning as the first step for unknown / combined; acid only when CaCO₃ or Fe/Mn hydroxide is confirmed.
Sequence:
- Alkaline (NaOH + EDTA + surfactant), pH 11–12, T ≤ 35 °C above pH 10
- Flush to neutral pH with permeate-quality water
- Acid (HCl, citric, or sulfamic), pH 2–3, T ≤ 35 °C
- Optional biocide soak (DBNPA 50–200 mg/L, 1–3 h)
⚠️ Never mix caustic and acid in the same loop (Hydranautics TSB 107).
§2 — Scaling by Mineral Species
Solubility products at 25 °C cross-checked against Hydranautics TAB-111, DuPont 45-D01552, and standard chemistry tables.
| Species |
Ksp (25 °C) |
Saturation metric |
Antiscalant family |
Cleaning chemistry |
| CaCO₃ (calcite) |
3.4 × 10⁻⁹ |
LSI < 0 (no AS); ≤ +2.5 with AS; S&DSI for TDS > 10 000 ppm |
Phosphonate (HEDP, PBTC, ATMP) |
HCl or citric, pH 2–3, ≤ 35 °C |
| CaSO₄·2H₂O (gypsum) |
4.93 × 10⁻⁵ |
IP/Ksp < 230 % (no AS); < 400 % with AS |
Phosphonate + polyacrylate / sulfonated copolymer |
EDTA-tetra-Na pH ~11, T 30–35 °C; long soak |
| BaSO₄ (barite) |
1.08 × 10⁻¹⁰ |
IP/Ksp < 6 000 % with strong AS |
Phosphonate (DTPMP) + sulfonate polymer |
Practically irreversible — EDTA hot soak partial; usually replace |
| SrSO₄ (celestite) |
3.44 × 10⁻⁷ |
IP/Ksp < 800 % with AS |
Phosphonate + polyacrylate |
EDTA + Na-citrate hot, slow |
| SiO₂ (amorphous) |
— |
Solubility ≈ 100–150 mg/L @ 25 °C neutral pH; up to 250–300 traditional, 400–600 with dispersants |
Polymeric dispersants (PEG/PVA/PAM) |
Alkaline pH > 11 + fluoride (NH₄F or NaF); often autopsy/replace |
| CaF₂ |
3.45 × 10⁻¹¹ |
rare except geothermal/industrial |
Phosphonate |
Strong acid HCl, hot |
| Fe(OH)₃ / Mn(OH)x |
low |
Fe feed < 0.05 mg/L; Mn < 0.02 mg/L |
Phosphonate + dispersant; better prevent via reduced Fe upstream |
Citric acid + ammonia (pH 4), or Na₂S₂O₄ reductive clean |
2.1 Saturation calculations
LSI (low TDS): LSI = pH − pH_s; pH_s depends on Ca²⁺, alkalinity, TDS, T. LSI > 0 ⇒ CaCO₃ supersaturated.
S&DSI (TDS > 10 000 ppm): same logic, ionic-strength corrected.
Sulfate scales / silica: use ion-product / Ksp ratio: S = IP/Ksp. Vendor projection tools (ROSA, IMSdesign, WAVE, ROProMax) compute these per stage.
⚠️ Compute always at the concentrate (last element). LSI at feed is meaningless for scaling prediction.
§3 — Membrane Integrity Loss
3.1 O-ring failure
- Location — interconnector between elements; permeate-tube to vessel end-adapter
- Signature — sudden NSP↑ localized to one vessel, NPF and ΔP unchanged
- Detection — conductivity profiling (Toray "Probing" white-paper); Rhodamine WT dye test
- Repair — replace O-ring; rebuild dry, light glycerin to seat. Do not use petroleum grease (attacks EPDM and PA)
3.2 Breach / pinhole
- Detection methods:
- VDT (Vacuum Decay Test, ASTM D6908) — primary for RO/NF
- PDT (Pressure Decay Test) — for MF/UF
- Bubble test at 3–5 psig with submerged element
- Rhodamine WT dye under pressure: diffuse pattern = chemical attack; localized = mechanical
- Threshold for autopsy — industry rule of thumb: salt rejection drop > 10 % vs baseline, or sharp ΔP rise. Always autopsy at least one representative element before discarding
3.3 Chlorine oxidation of polyamide
Cumulative dose metric: ppm·h of free chlorine exposure.
Literature consensus (Gohil & Suresh 2019, Desalination 457:133; vendor literature):
- Onset of measurable degradation: ~200 ppm·h
- Severe degradation: ~1 000 ppm·h
- SWRO membranes (denser, higher MPD crosslink) generally more tolerant than BWRO
- At very high cumulative exposure (thousands of ppm·h) PA RO can transform toward NF-like behavior (rejection drop, flux rise)
⚠️ Specific values like "2 640 / 6 200 ppm·h" sometimes seen in process literature are not directly confirmed by the primary Gohil paper; use the 200 onset / ~1 000 severe range as the defensible cited band, and note SWRO/BWRO/PA-density dependence.
Vendor rule: all manufacturers (DuPont, Hydranautics, Toray) specify "no detectable free chlorine in feed" (< 0.1 mg/L) for warranty.
Mechanism: N-chlorination of PA amide → Orton rearrangement → ring chlorination → loss of crosslink → flux ↑ and rejection ↓.
💡 Track cumulative chlorine exposure as a running ppm·h counter in a cumulative_exposure table. This is essential for lifecycle decisions (replace vs continue) and is invisible to instantaneous KPI checks.
3.4 Mechanical damage
- Telescoping — axial spacer/membrane migration. Causes: pressure shock (water hammer); excessive ΔP per element (> 15 psi normalized; > 50 psi destructive); missing/failed ATD (Anti-Telescoping Device). Pressurization rate limit: ≤ 10 psi/s (≈ 0.69 bar/s) at start-up
- Glue-line crack — same shock causes; dye test shows linear pattern at glue line
- Abrasion — feed sand/grit; visible signs on lead-element feed end at autopsy
3.5 Autopsy decision matrix
Trigger when any one of:
- Salt rejection drop > 10 % vs baseline persisting after 2 CIPs
- ΔPn rise > 25 % not recovered by CIP
- NPF decline > 25 % not recovered by CIP
- Unexplained instrument disagreement after calibration
- End-of-warranty diagnostic to claim manufacturing defect
§4 — Chemical / Operational Failures
4.1 Free chlorine breakthrough
- Causes — SBS pump failure, GAC bed exhausted, chloramine breakthrough not detected by ORP (chloramines have low ORP signal)
- Monitoring — ORP < 200 mV after dechlorination (some target < 150 mV); redundant DPD colorimetric
- SBS stoichiometry — 1.46 mg NaHSO₃ per mg Cl₂ (theoretical); practical 1.5–2.5× theoretical = 1.8–3.0 mg/mg
- Side effect — chronic SBS overdose with dissolved Cu/Co catalyses oxidant generation under O₂ → unintended PA attack
4.2 pH excursion
PA operating window: pH 2–11 continuous; 1–12 short CIP (most vendor datasheets; DuPont 45-D04358).
Out-of-range hydrolysis → permanent rejection loss.
4.3 Temperature excursion
- Max continuous: 45 °C / 113 °F at pH ≤ 10
- Above pH 10: 35 °C / 95 °F max
- Above 45 °C: accelerated hydrolysis + compaction
4.4 Pressure shock / water hammer
- Slow pressurization (≤ 10 psi/s); install soft-start VFD or air-loaded accumulator; check valve on permeate
- Per-element ΔP cap: normalized ΔP per 6-element vessel ≈ 15 psi typical; > 50 psi induces telescoping
§5 — Diagnostic Decision Logic
Pseudo-code consuming an RODataPoint (current readings) + a Baseline (commissioning-normalized values) + cumulative exposure counters:
@dataclass
class RODataPoint:
Qf: float; Qp: float; Qc: float # m3/h
Cf: float; Cp: float # µS/cm or ppm
Tf: float # °C
P_feed: float; P_perm: float; P_conc: float # bar
timestamp: datetime
stage: int = 1
@dataclass
class Baseline:
NPF0: float; NSP0: float; dPn0: float # normalized at t0
R0: float; Tref: float = 25.0
def diagnose(now: RODataPoint, base: Baseline,
cumulative_Cl_ppmh: float = 0.0,
cumulative_T_above_45_h: float = 0.0) -> list[Diagnosis]:
findings = []
# Step 0 — instrumentation sanity
if abs(now.Qf - (now.Qp + now.Qc)) / now.Qf > 0.02:
findings.append(Diagnosis("instrument", conf=0.9,
note="Mass balance fails > 2 %; calibrate before diagnosing membrane."))
return findings # halt: trust nothing else until fixed
# Step 1 — normalize per ASTM D4516
NPF = normalize_permeate_flow(now, base.Tref)
NSP = normalize_salt_passage(now, base.Tref)
dPn = normalize_dp(now, base.Tref)
dNPF = (NPF - base.NPF0) / base.NPF0
dNSP = (NSP - base.NSP0) / base.NSP0
ddP = (dPn - base.dPn0) / base.dPn0
# Step 2 — cumulative-exposure overrides
if cumulative_Cl_ppmh > 200:
findings.append(Diagnosis("chlorine_oxidation",
conf=min(1.0, cumulative_Cl_ppmh / 1000),
note=f"PA degradation likely; {cumulative_Cl_ppmh:.0f} ppm·h ≥ 200 onset"))
# Step 3 — signature matching (ASTM D4516 triple)
if dNPF < -0.15 and ddP > 0.15 and abs(dNSP) < 0.05:
if first_stage_dominates(now):
findings.append(Diagnosis("colloidal_or_particulate", conf=0.8))
else:
findings.append(Diagnosis("biofouling", conf=0.6))
if dNPF < -0.10 and dNSP > 0.10 and ddP > 0.15 and tail_stage_dominates(now):
findings.append(Diagnosis("scaling_advanced", conf=0.85,
note="Run LSI / S&DSI / SO4·Ba / Sr Ksp on concentrate."))
if abs(dNPF) < 0.05 and dNSP > 0.15 and abs(ddP) < 0.05:
findings.append(Diagnosis("integrity_loss", conf=0.8,
note="Conductivity-profile vessels; expect O-ring or seal."))
if dNPF > 0.05 and dNSP > 0.15 and abs(ddP) < 0.10:
findings.append(Diagnosis("oxidative_degradation", conf=0.85))
if dNPF < -0.10 and abs(dNSP) < 0.05 and abs(ddP) < 0.05:
if uniform_across_stages(now):
findings.append(Diagnosis("compaction_or_NOM_adsorption", conf=0.6))
# Step 4 — timescale modifier
if dNSP > 0.10 and is_sudden(now, base, hours=24):
upgrade_confidence(findings, "integrity_loss", +0.15)
if dNSP > 0.05 and is_gradual(now, base, days=30):
upgrade_confidence(findings, "oxidation_or_fouling", +0.1)
return sorted(findings, key=lambda d: -d.conf)
Branching rules encoded above:
- Mass balance fails → instrumentation first; halt
- Sudden change (< 24 h) of rejection → leak / integrity
- Gradual change (weeks) of rejection → cumulative oxidation or fouling
- First-stage flux loss only → upstream fouling (colloid, NOM, bio)
- Tail-stage loss with rising salt → scaling
- Uniform across stages → compaction or systemic oxidation
§6 — CIP Decision Matrix
6.1 Trigger criteria (industry consensus)
From WaterTechOnline 14171304; Hydranautics TSB 107; DuPont 45-D01696:
- NPF decline ≥ 10–15 % below baseline
- NSP increase ≥ 5–15 % above baseline
- ΔPn increase ≥ 15 % above baseline (some sources 15–25 %; don't wait past 25 % — foulant turns irreversible)
6.2 Chemistry selection
| Foulant identified |
First step |
Recipe |
pH |
T (max) |
Time |
| Inorganic scale (CaCO₃, Fe/Mn) |
Acid |
HCl to pH 2–3 (or 2 wt % citric, 0.2 wt % sulfamic) |
2–3 |
35 °C |
1–4 h |
| Organic / biofilm / colloidal |
Alkaline |
NaOH to pH 11–12 + Na₄-EDTA 1 wt % + Na-DSS surfactant 0.025 wt % |
11–12 |
35 °C |
1–4 h |
| Combined (default) |
Alkaline first, then acid |
as above, with full intermediate flush |
— |
— |
— |
| Biofilm (after alkaline) |
Biocide soak |
DBNPA 50–200 mg/L |
feed pH |
< 35 °C |
1–3 h |
| Silica |
Alkaline + fluoride (NH₄F) |
vendor-specific |
> 11 |
35 °C |
hours |
| Sulfate scale (gypsum) |
Alkaline EDTA |
Na₄-EDTA 2 wt %, NaOH pH 11 |
11 |
30–35 °C |
hours; long soak |
6.3 Per-element CIP flow rate
| Element diameter |
Flow per vessel (gpm) |
(m³/h) |
| 4" |
8–10 |
1.8–2.3 |
| 8" |
35–45 |
8–10 |
| 16" |
140–180 |
32–41 |
ΔP during CIP must stay below ~10 psi per element; exceeding telescopes.
6.4 When CIP does NOT help (autopsy / replace)
- Chlorine oxidation: damage cumulative; no chemistry restores PA
- Mineral scale cemented (typically Ba/Sr sulfate): EDTA partial at best
- Mechanical telescoping or glue-line crack
- Hydrolysis from pH excursion
§7 — Data-Driven Trending
7.1 Baseline establishment (ASTM D4516)
- Record after 24–48 h stable operation post-startup or post-CIP
- Hold feed T, P, recovery, conductivity constant during baseline window
- NPF, NSP, ΔPn become the t0 anchor; persist to DB
- Re-baseline after every element swap
7.2 Signal-to-noise
| KPI |
Typical noise |
Action threshold (% from baseline) |
| NPF |
±3 % |
−10 % review, −15 % CIP |
| NSP |
±5 % |
+10 % review, +15 % CIP, +25 % autopsy candidate |
| ΔPn |
±5 % |
+15 % CIP, +25 % urgent |
7.3 Why snapshots mislead
- Feed-T drift: each +1 °C ≈ +3 % permeate flow → masks fouling
- Recovery drift: 5 % recovery change shifts LSI/S&DSI by tenths
- Dosing-pump cycles (antiscalant ± 10 % short term) affect tail-stage rejection
7.4 Suggested SQLite schema
CREATE TABLE baselines (
id INTEGER PRIMARY KEY,
train_id TEXT, stage INTEGER,
ts_utc TEXT,
NPF0 REAL, NSP0 REAL, dPn0 REAL,
R0 REAL, Tref REAL DEFAULT 25.0
);
CREATE TABLE readings (
id INTEGER PRIMARY KEY,
train_id TEXT, stage INTEGER, ts_utc TEXT,
Qf REAL, Qp REAL, Qc REAL,
Cf REAL, Cp REAL,
Tf REAL, P_feed REAL, P_perm REAL, P_conc REAL,
NPF REAL, NSP REAL, dPn REAL -- pre-computed
);
CREATE TABLE cumulative_exposure (
train_id TEXT PRIMARY KEY,
cl_ppmh REAL DEFAULT 0, -- running ppm·h free chlorine
t_above_45c_h REAL DEFAULT 0, -- hours above 45 °C
pressure_cycles INTEGER DEFAULT 0,
ph_excursions_below_2 INTEGER DEFAULT 0,
ph_excursions_above_11 INTEGER DEFAULT 0,
last_update TEXT
);
CREATE TABLE cip_events (
id INTEGER PRIMARY KEY, train_id TEXT,
ts_start TEXT, ts_end TEXT,
chemistry TEXT, pH REAL, T REAL,
trigger_metric TEXT,
pre_NPF REAL, post_NPF REAL,
pre_NSP REAL, post_NSP REAL,
pre_dPn REAL, post_dPn REAL,
notes TEXT
);
💡 The cumulative_exposure and cip_events tables are essential for any lifecycle advisor that recommends CIP vs replace based on long-horizon history.
§8 — Bilingual Glossary (Troubleshooting Terms)
| EN |
IT |
| scaling |
incrostazione (minerale) |
| fouling |
sporcamento |
| biofouling |
bioincrostazione |
| colloidal fouling |
sporcamento colloidale |
| autopsy (of element) |
autopsia membrana |
| pinhole |
foro puntiforme / micro-foro |
| breach |
lesione / breccia |
| telescoping |
telescopamento |
| anti-telescoping device (ATD) |
dispositivo anti-telescopaggio |
| O-ring |
guarnizione O-ring / anello di tenuta |
| glue line |
linea di incollaggio |
| feed spacer |
spaziatore lato alimentazione |
| permeate carrier |
spaziatore lato permeato |
| integrity (test) |
(test di) integrità |
| breakthrough (chlorine) |
passaggio / breakthrough (cloro) |
| dechlorination |
declorazione |
| compaction |
compattazione |
| hydrolysis |
idrolisi |
| crossflow |
flusso tangenziale |
| recovery (%) |
recupero (%) |
| rejection (%) |
reiezione (%) |
| salt passage |
passaggio salino |
| normalized permeate flow (NPF) |
portata permeato normalizzata |
| normalized differential pressure (ΔPn) |
perdita di carico normalizzata |
| CIP (Cleaning In Place) |
lavaggio in posto / CIP |
| antiscalant |
antincrostante |
| biocide (non-oxidizing) |
biocida (non ossidante) |
| baseline |
linea di riferimento iniziale |
| commissioning |
messa in marcia / commissioning |
| profiling / probing |
profilatura / sondaggio (conduttività) |
Sources
- ASTM D4516-19a Standardizing RO Performance Data
- ASTM D6908 Integrity Testing of Water Filtration Membrane Systems
- ASTM D3923 Detecting Leaks in RO and NF Devices
- ASTM D4189-23 Silt Density Index
- Hydranautics TSB 107.28 (Apr 2025) — foulants & cleaning, TCF
- Hydranautics TSB 108 — chlorination/dechlorination
- Hydranautics TSB 110 — biocides and storage
- Hydranautics TSB 111 — biofouling
- Hydranautics TSB 124 — VDT and integrity
- Hydranautics TAB-111 — chemical pretreatment for RO/NF
- DuPont FilmTec 45-D01504 Tech Manual; 45-D01650 Symptoms of Trouble; 45-D01696 Rev 13 Cleaning Procedures (Feb 2026); 45-D04358 Temperature & pH Best Practices; 45-D01616 Plant Performance Normalization; 45-D01552 CaCO₃ Scale Prevention; 45-D01569 Chlorination/Dechlorination
- Gohil & Suresh 2019, Desalination 457:133 — free chlorine exposure tolerance
- Pereira et al. 2014, PMC4021920 — biofouling review
- AWWA RF — Guidance Manual for Disposal of Chlorinated Water (SBS stoichiometry)
- WaterTechOnline article 14171304 — Membrane Cleaning Fundamentals
- Toray Probing white-paper — vessel conductivity profiling
- Avista / American Water Chemicals autopsy leaflets — Rhodamine WT dye, integrity thresholds
- IWA Publishing 2022 — non-oxidizing biocides in PA RO
1---2name: membrane-troubleshooting3description: RO/NF membrane diagnostic methodology — fouling taxonomy (colloidal, biofouling, organic, particulate), scaling by mineral species (CaCO3/CaSO4/BaSO4/SrSO4/SiO2/CaF2/Fe-Mn), integrity loss (O-ring, breach, chlorine oxidation, telescoping), chemical/operational failures, CIP decision matrix, ASTM D4516 trend-based diagnostics, baseline establishment, and decision-tree pseudo-code. Use when analyzing RO/NF plant data to identify root cause of performance deviation.4---56# RO/NF Troubleshooting & Diagnostic Methodology78Scope: spiral-wound thin-film-composite (TFC) polyamide RO/NF elements (8" standard + 4" variants). Numeric thresholds carry vendor + year of source.910Convention markers:11- `⚠️` — likely bug or incorrect assumption in calling code; highest priority12- `💡` — enhancement opportunity (new alert, new state, refined threshold)1314---1516## §0 — Diagnostic Frame of Reference1718### 0.1 Five orthogonal failure modes1920Every observed deviation must be classified into one (or more) of:21221. **Fouling** — reversible / partially reversible accumulation (colloidal, biological, organic, particulate)232. **Scaling** — supersaturation-driven mineral precipitation, mostly in tail/concentrate stages243. **Integrity loss** — physical breach of active polyamide layer or seal (O-ring, glue line, telescoping, pinhole)254. **Mechanical compaction / chemical hydrolysis** — pressure-driven densification (largely irreversible); polyamide hydrolysis outside pH 2–11265. **Instrumental / operational error** — out-of-cal flow meter, conductivity probe drift, dosing pump miscount, baseline never re-established after element swap2728### 0.2 ASTM D4516 — the three observables2930| Variable | Symbol | Direction of concern | Typical noise band |31|---|---|---|---|32| Normalized permeate flow | NPF | decreasing | ±3 % |33| Normalized salt passage | NSP | increasing | ±5 % |34| Normalized ΔP (feed → concentrate) | ΔPn | increasing | ±5 % |3536### 0.3 Canonical signature table3738Combines DuPont 45-D01650 troubleshooting matrix + Hydranautics TSB 107 logic + WaterTechOnline normalization article:3940| NPF | NSP | ΔPn | Stage affected | Most likely root cause |41|---|---|---|---|---|42| ↓ | → / slight ↑ | ↑ | First stage | Colloidal / particulate fouling (front end) |43| ↓ | ↑ | ↑↑ | Tail stage | Advanced scaling (CaCO₃ / CaSO₄ / BaSO₄) |44| ↓ | ↑ | ↑ | All stages | Biofouling (channel plugging by biofilm) |45| ↓ | → | → / slight ↑ | All stages | Compaction or organic NOM adsorption |46| → / slight ↓ | ↑↑ | → | Localised (one vessel) | O-ring leak / element breach / glue-line crack |47| ↑ | ↑↑ | → | All stages | Chlorine oxidation (PA degradation, RO → NF drift) |48| → | → | ↑ | First stage | Mechanical / feed-spacer plugging, no membrane impact |49| ↓↓ | ↑ | → | One vessel | Telescoping in that vessel |50| inconsistent | inconsistent | inconsistent | — | Suspect instrumentation first; run mass balance |5152### 0.4 Mass balance sanity check5354Before any diagnosis:55```56|Qf − (Qp + Qc)| / Qf < 0.02 # within 2 %57```58A 5 % error in recovery shifts scale-potential calculations dramatically.5960💡 No mass-balance closure check is the **#1 cause of phantom alerts** from instrument drift. Add this check before any rule evaluation; halt diagnosis if it fails.6162---6364## §1 — Fouling Taxonomy6566### 1.1 Colloidal fouling6768- **Definition** — sub-µm inorganic / mixed particles (silt, clays, Fe/Al hydroxides) too small to settle69- **Predictor** — SDI₁₅ (ASTM D4189-23): < 3 acceptable; 3–5 frequent CIP; > 5 needs MF/UF upstream. Vendors recommend SDI₁₅ < 470- **Signature** — NPF↓ first stage, ΔP↑ lead element, NSP stable71- **Cleaning** — alkaline (pH 11–12, NaOH + EDTA + anionic surfactant) first; acid (HCl/citric, pH 2–3) only if Fe/Al hydroxide confirmed7273### 1.2 Biofouling7475- **Definition** — biofilm (EPS matrix + bacteria) on membrane and feed spacer76- **Predictors** — AOC (assimilable organic carbon): biofilm-free risk threshold ~1 µg/L; conventional treatment achieves 50–100 µg/L (Pereira et al. 2014, PMC4021920). ATP, BFR, rising SDI without particulate cause77- **Signature** — NPF↓, ΔP↑ over weeks, slight NSP↑; autopsy shows slime mat on lead-element feed face78- **Cleaning** — alkaline NaOH (pH 11–12) + EDTA + surfactant, then non-oxidizing biocide soak. **Never** free chlorine for in-service biocide on PA membranes79- **DBNPA dosing** (industry consensus, IWA AQUA 2022; Feedwater datasheet):80 - Online maintenance: 10–50 mg/L for ≥ 1 h, weekly81 - CIP additive: 50–200 mg/L circulated 1–3 h82 - Continuous preventive: ~1 mg/L (where allowed)83 - Bisulfite upstream consumes DBNPA → increase dose84- Other accepted non-oxidizers: isothiazolinone (CMIT/MIT), glutaraldehyde for storage. See Hydranautics TSB 1108586### 1.3 Organic fouling (NOM)8788- **Definition** — natural organic matter (humics, fulvics), hydrophobic adsorption on PA surface89- **Signature** — NPF↓, NSP stable or slight ↑, ΔP → (no spacer plugging until late)90- **Cleaning** — alkaline NaOH pH 11–12 + EDTA chelant + surfactant (DuPont 45-D01504 default rule for unknown / combined fouling)9192### 1.4 Particulate fouling9394- **Definition** — > 1 µm material from failed pretreatment (cartridge bypass, blown media filter)95- **Diff vs colloidal** — visible deposit on cartridge filter; rapid ΔP rise on lead element only96- **Cleaning** — flush forward at high crossflow; alkaline CIP if needed9798### 1.5 Combined fouling (most common in practice)99100DuPont 45-D01504 rule: **alkaline cleaning as the first step** for unknown / combined; acid only when CaCO₃ or Fe/Mn hydroxide is confirmed.101102Sequence:1031. Alkaline (NaOH + EDTA + surfactant), pH 11–12, T ≤ 35 °C above pH 101042. Flush to neutral pH with permeate-quality water1053. Acid (HCl, citric, or sulfamic), pH 2–3, T ≤ 35 °C1064. Optional biocide soak (DBNPA 50–200 mg/L, 1–3 h)107108⚠️ Never mix caustic and acid in the same loop (Hydranautics TSB 107).109110---111112## §2 — Scaling by Mineral Species113114Solubility products at 25 °C cross-checked against Hydranautics TAB-111, DuPont 45-D01552, and standard chemistry tables.115116| Species | Ksp (25 °C) | Saturation metric | Antiscalant family | Cleaning chemistry |117|---|---|---|---|---|118| **CaCO₃** (calcite) | 3.4 × 10⁻⁹ | LSI < 0 (no AS); ≤ +2.5 with AS; S&DSI for TDS > 10 000 ppm | Phosphonate (HEDP, PBTC, ATMP) | HCl or citric, pH 2–3, ≤ 35 °C |119| **CaSO₄·2H₂O** (gypsum) | 4.93 × 10⁻⁵ | IP/Ksp < 230 % (no AS); < 400 % with AS | Phosphonate + polyacrylate / sulfonated copolymer | EDTA-tetra-Na pH ~11, T 30–35 °C; long soak |120| **BaSO₄** (barite) | 1.08 × 10⁻¹⁰ | IP/Ksp < 6 000 % with strong AS | Phosphonate (DTPMP) + sulfonate polymer | Practically irreversible — EDTA hot soak partial; usually replace |121| **SrSO₄** (celestite) | 3.44 × 10⁻⁷ | IP/Ksp < 800 % with AS | Phosphonate + polyacrylate | EDTA + Na-citrate hot, slow |122| **SiO₂** (amorphous) | — | Solubility ≈ 100–150 mg/L @ 25 °C neutral pH; up to 250–300 traditional, 400–600 with dispersants | Polymeric dispersants (PEG/PVA/PAM) | Alkaline pH > 11 + fluoride (NH₄F or NaF); often autopsy/replace |123| **CaF₂** | 3.45 × 10⁻¹¹ | rare except geothermal/industrial | Phosphonate | Strong acid HCl, hot |124| **Fe(OH)₃ / Mn(OH)x** | low | Fe feed < 0.05 mg/L; Mn < 0.02 mg/L | Phosphonate + dispersant; better prevent via reduced Fe upstream | Citric acid + ammonia (pH 4), or Na₂S₂O₄ reductive clean |125126### 2.1 Saturation calculations127128**LSI** (low TDS): `LSI = pH − pH_s`; pH_s depends on Ca²⁺, alkalinity, TDS, T. LSI > 0 ⇒ CaCO₃ supersaturated.129130**S&DSI** (TDS > 10 000 ppm): same logic, ionic-strength corrected.131132**Sulfate scales / silica**: use ion-product / Ksp ratio: `S = IP/Ksp`. Vendor projection tools (ROSA, IMSdesign, WAVE, ROProMax) compute these per stage.133134⚠️ Compute always at the **concentrate** (last element). LSI at feed is meaningless for scaling prediction.135136---137138## §3 — Membrane Integrity Loss139140### 3.1 O-ring failure141142- **Location** — interconnector between elements; permeate-tube to vessel end-adapter143- **Signature** — sudden NSP↑ localized to **one vessel**, NPF and ΔP unchanged144- **Detection** — conductivity profiling (Toray "Probing" white-paper); Rhodamine WT dye test145- **Repair** — replace O-ring; rebuild dry, light glycerin to seat. Do **not** use petroleum grease (attacks EPDM and PA)146147### 3.2 Breach / pinhole148149- **Detection methods**:150 - **VDT** (Vacuum Decay Test, ASTM D6908) — primary for RO/NF151 - **PDT** (Pressure Decay Test) — for MF/UF152 - Bubble test at 3–5 psig with submerged element153 - **Rhodamine WT dye** under pressure: diffuse pattern = chemical attack; localized = mechanical154- **Threshold for autopsy** — industry rule of thumb: salt rejection drop > 10 % vs baseline, or sharp ΔP rise. Always autopsy at least one representative element before discarding155156### 3.3 Chlorine oxidation of polyamide157158Cumulative dose metric: **ppm·h of free chlorine exposure**.159160Literature consensus (Gohil & Suresh 2019, Desalination 457:133; vendor literature):161- **Onset of measurable degradation**: ~200 ppm·h162- **Severe degradation**: ~1 000 ppm·h163- SWRO membranes (denser, higher MPD crosslink) generally more tolerant than BWRO164- At very high cumulative exposure (thousands of ppm·h) PA RO can transform toward NF-like behavior (rejection drop, flux rise)165166⚠️ Specific values like "2 640 / 6 200 ppm·h" sometimes seen in process literature are **not directly confirmed** by the primary Gohil paper; use the 200 onset / ~1 000 severe range as the defensible cited band, and note SWRO/BWRO/PA-density dependence.167168Vendor rule: all manufacturers (DuPont, Hydranautics, Toray) specify "no detectable free chlorine in feed" (< 0.1 mg/L) for warranty.169170Mechanism: N-chlorination of PA amide → Orton rearrangement → ring chlorination → loss of crosslink → flux ↑ and rejection ↓.171172💡 Track cumulative chlorine exposure as a running ppm·h counter in a `cumulative_exposure` table. This is essential for lifecycle decisions (replace vs continue) and is invisible to instantaneous KPI checks.173174### 3.4 Mechanical damage175176- **Telescoping** — axial spacer/membrane migration. Causes: pressure shock (water hammer); excessive ΔP per element (> 15 psi normalized; > 50 psi destructive); missing/failed ATD (Anti-Telescoping Device). Pressurization rate limit: **≤ 10 psi/s (≈ 0.69 bar/s)** at start-up177- **Glue-line crack** — same shock causes; dye test shows linear pattern at glue line178- **Abrasion** — feed sand/grit; visible signs on lead-element feed end at autopsy179180### 3.5 Autopsy decision matrix181182Trigger when any one of:183- Salt rejection drop > 10 % vs baseline persisting after 2 CIPs184- ΔPn rise > 25 % not recovered by CIP185- NPF decline > 25 % not recovered by CIP186- Unexplained instrument disagreement after calibration187- End-of-warranty diagnostic to claim manufacturing defect188189---190191## §4 — Chemical / Operational Failures192193### 4.1 Free chlorine breakthrough194195- **Causes** — SBS pump failure, GAC bed exhausted, chloramine breakthrough not detected by ORP (chloramines have low ORP signal)196- **Monitoring** — ORP < 200 mV after dechlorination (some target < 150 mV); redundant DPD colorimetric197- **SBS stoichiometry** — 1.46 mg NaHSO₃ per mg Cl₂ (theoretical); practical 1.5–2.5× theoretical = **1.8–3.0 mg/mg**198- **Side effect** — chronic SBS overdose with dissolved Cu/Co catalyses oxidant generation under O₂ → unintended PA attack199200### 4.2 pH excursion201202PA operating window: **pH 2–11 continuous; 1–12 short CIP** (most vendor datasheets; DuPont 45-D04358).203204Out-of-range hydrolysis → permanent rejection loss.205206### 4.3 Temperature excursion207208- Max continuous: **45 °C / 113 °F** at pH ≤ 10209- Above pH 10: **35 °C / 95 °F** max210- Above 45 °C: accelerated hydrolysis + compaction211212### 4.4 Pressure shock / water hammer213214- Slow pressurization (≤ 10 psi/s); install soft-start VFD or air-loaded accumulator; check valve on permeate215- Per-element ΔP cap: normalized ΔP per 6-element vessel ≈ 15 psi typical; > 50 psi induces telescoping216217---218219## §5 — Diagnostic Decision Logic220221Pseudo-code consuming an `RODataPoint` (current readings) + a `Baseline` (commissioning-normalized values) + cumulative exposure counters:222223```python224@dataclass225class RODataPoint:226 Qf: float; Qp: float; Qc: float # m3/h227 Cf: float; Cp: float # µS/cm or ppm228 Tf: float # °C229 P_feed: float; P_perm: float; P_conc: float # bar230 timestamp: datetime231 stage: int = 1232233@dataclass234class Baseline:235 NPF0: float; NSP0: float; dPn0: float # normalized at t0236 R0: float; Tref: float = 25.0237238def diagnose(now: RODataPoint, base: Baseline,239 cumulative_Cl_ppmh: float = 0.0,240 cumulative_T_above_45_h: float = 0.0) -> list[Diagnosis]:241 findings = []242243 # Step 0 — instrumentation sanity244 if abs(now.Qf - (now.Qp + now.Qc)) / now.Qf > 0.02:245 findings.append(Diagnosis("instrument", conf=0.9,246 note="Mass balance fails > 2 %; calibrate before diagnosing membrane."))247 return findings # halt: trust nothing else until fixed248249 # Step 1 — normalize per ASTM D4516250 NPF = normalize_permeate_flow(now, base.Tref)251 NSP = normalize_salt_passage(now, base.Tref)252 dPn = normalize_dp(now, base.Tref)253254 dNPF = (NPF - base.NPF0) / base.NPF0255 dNSP = (NSP - base.NSP0) / base.NSP0256 ddP = (dPn - base.dPn0) / base.dPn0257258 # Step 2 — cumulative-exposure overrides259 if cumulative_Cl_ppmh > 200:260 findings.append(Diagnosis("chlorine_oxidation",261 conf=min(1.0, cumulative_Cl_ppmh / 1000),262 note=f"PA degradation likely; {cumulative_Cl_ppmh:.0f} ppm·h ≥ 200 onset"))263264 # Step 3 — signature matching (ASTM D4516 triple)265 if dNPF < -0.15 and ddP > 0.15 and abs(dNSP) < 0.05:266 if first_stage_dominates(now):267 findings.append(Diagnosis("colloidal_or_particulate", conf=0.8))268 else:269 findings.append(Diagnosis("biofouling", conf=0.6))270271 if dNPF < -0.10 and dNSP > 0.10 and ddP > 0.15 and tail_stage_dominates(now):272 findings.append(Diagnosis("scaling_advanced", conf=0.85,273 note="Run LSI / S&DSI / SO4·Ba / Sr Ksp on concentrate."))274275 if abs(dNPF) < 0.05 and dNSP > 0.15 and abs(ddP) < 0.05:276 findings.append(Diagnosis("integrity_loss", conf=0.8,277 note="Conductivity-profile vessels; expect O-ring or seal."))278279 if dNPF > 0.05 and dNSP > 0.15 and abs(ddP) < 0.10:280 findings.append(Diagnosis("oxidative_degradation", conf=0.85))281282 if dNPF < -0.10 and abs(dNSP) < 0.05 and abs(ddP) < 0.05:283 if uniform_across_stages(now):284 findings.append(Diagnosis("compaction_or_NOM_adsorption", conf=0.6))285286 # Step 4 — timescale modifier287 if dNSP > 0.10 and is_sudden(now, base, hours=24):288 upgrade_confidence(findings, "integrity_loss", +0.15)289 if dNSP > 0.05 and is_gradual(now, base, days=30):290 upgrade_confidence(findings, "oxidation_or_fouling", +0.1)291292 return sorted(findings, key=lambda d: -d.conf)293```294295Branching rules encoded above:296- Mass balance fails → instrumentation first; halt297- Sudden change (< 24 h) of rejection → leak / integrity298- Gradual change (weeks) of rejection → cumulative oxidation or fouling299- First-stage flux loss only → upstream fouling (colloid, NOM, bio)300- Tail-stage loss with rising salt → scaling301- Uniform across stages → compaction or systemic oxidation302303---304305## §6 — CIP Decision Matrix306307### 6.1 Trigger criteria (industry consensus)308309From WaterTechOnline 14171304; Hydranautics TSB 107; DuPont 45-D01696:310- NPF decline ≥ **10–15 %** below baseline311- NSP increase ≥ **5–15 %** above baseline312- ΔPn increase ≥ **15 %** above baseline (some sources 15–25 %; don't wait past 25 % — foulant turns irreversible)313314### 6.2 Chemistry selection315316| Foulant identified | First step | Recipe | pH | T (max) | Time |317|---|---|---|---|---|---|318| Inorganic scale (CaCO₃, Fe/Mn) | Acid | HCl to pH 2–3 (or 2 wt % citric, 0.2 wt % sulfamic) | 2–3 | 35 °C | 1–4 h |319| Organic / biofilm / colloidal | Alkaline | NaOH to pH 11–12 + Na₄-EDTA 1 wt % + Na-DSS surfactant 0.025 wt % | 11–12 | 35 °C | 1–4 h |320| Combined (default) | **Alkaline first, then acid** | as above, with full intermediate flush | — | — | — |321| Biofilm (after alkaline) | Biocide soak | DBNPA 50–200 mg/L | feed pH | < 35 °C | 1–3 h |322| Silica | Alkaline + fluoride (NH₄F) | vendor-specific | > 11 | 35 °C | hours |323| Sulfate scale (gypsum) | Alkaline EDTA | Na₄-EDTA 2 wt %, NaOH pH 11 | 11 | 30–35 °C | hours; long soak |324325### 6.3 Per-element CIP flow rate326327| Element diameter | Flow per vessel (gpm) | (m³/h) |328|---|---|---|329| 4" | 8–10 | 1.8–2.3 |330| 8" | 35–45 | 8–10 |331| 16" | 140–180 | 32–41 |332333ΔP **during** CIP must stay below ~10 psi per element; exceeding telescopes.334335### 6.4 When CIP does NOT help (autopsy / replace)336337- Chlorine oxidation: damage cumulative; no chemistry restores PA338- Mineral scale cemented (typically Ba/Sr sulfate): EDTA partial at best339- Mechanical telescoping or glue-line crack340- Hydrolysis from pH excursion341342---343344## §7 — Data-Driven Trending345346### 7.1 Baseline establishment (ASTM D4516)347348- Record after 24–48 h stable operation post-startup or post-CIP349- Hold feed T, P, recovery, conductivity constant during baseline window350- NPF, NSP, ΔPn become the **t0** anchor; persist to DB351- Re-baseline after every element swap352353### 7.2 Signal-to-noise354355| KPI | Typical noise | Action threshold (% from baseline) |356|---|---|---|357| NPF | ±3 % | −10 % review, −15 % CIP |358| NSP | ±5 % | +10 % review, +15 % CIP, +25 % autopsy candidate |359| ΔPn | ±5 % | +15 % CIP, +25 % urgent |360361### 7.3 Why snapshots mislead362363- Feed-T drift: each +1 °C ≈ +3 % permeate flow → masks fouling364- Recovery drift: 5 % recovery change shifts LSI/S&DSI by tenths365- Dosing-pump cycles (antiscalant ± 10 % short term) affect tail-stage rejection366367### 7.4 Suggested SQLite schema368369```sql370CREATE TABLE baselines (371 id INTEGER PRIMARY KEY,372 train_id TEXT, stage INTEGER,373 ts_utc TEXT,374 NPF0 REAL, NSP0 REAL, dPn0 REAL,375 R0 REAL, Tref REAL DEFAULT 25.0376);377378CREATE TABLE readings (379 id INTEGER PRIMARY KEY,380 train_id TEXT, stage INTEGER, ts_utc TEXT,381 Qf REAL, Qp REAL, Qc REAL,382 Cf REAL, Cp REAL,383 Tf REAL, P_feed REAL, P_perm REAL, P_conc REAL,384 NPF REAL, NSP REAL, dPn REAL -- pre-computed385);386387CREATE TABLE cumulative_exposure (388 train_id TEXT PRIMARY KEY,389 cl_ppmh REAL DEFAULT 0, -- running ppm·h free chlorine390 t_above_45c_h REAL DEFAULT 0, -- hours above 45 °C391 pressure_cycles INTEGER DEFAULT 0,392 ph_excursions_below_2 INTEGER DEFAULT 0,393 ph_excursions_above_11 INTEGER DEFAULT 0,394 last_update TEXT395);396397CREATE TABLE cip_events (398 id INTEGER PRIMARY KEY, train_id TEXT,399 ts_start TEXT, ts_end TEXT,400 chemistry TEXT, pH REAL, T REAL,401 trigger_metric TEXT,402 pre_NPF REAL, post_NPF REAL,403 pre_NSP REAL, post_NSP REAL,404 pre_dPn REAL, post_dPn REAL,405 notes TEXT406);407```408409💡 The `cumulative_exposure` and `cip_events` tables are essential for any **lifecycle advisor** that recommends CIP vs replace based on long-horizon history.410411---412413## §8 — Bilingual Glossary (Troubleshooting Terms)414415| EN | IT |416|---|---|417| scaling | incrostazione (minerale) |418| fouling | sporcamento |419| biofouling | bioincrostazione |420| colloidal fouling | sporcamento colloidale |421| autopsy (of element) | autopsia membrana |422| pinhole | foro puntiforme / micro-foro |423| breach | lesione / breccia |424| telescoping | telescopamento |425| anti-telescoping device (ATD) | dispositivo anti-telescopaggio |426| O-ring | guarnizione O-ring / anello di tenuta |427| glue line | linea di incollaggio |428| feed spacer | spaziatore lato alimentazione |429| permeate carrier | spaziatore lato permeato |430| integrity (test) | (test di) integrità |431| breakthrough (chlorine) | passaggio / breakthrough (cloro) |432| dechlorination | declorazione |433| compaction | compattazione |434| hydrolysis | idrolisi |435| crossflow | flusso tangenziale |436| recovery (%) | recupero (%) |437| rejection (%) | reiezione (%) |438| salt passage | passaggio salino |439| normalized permeate flow (NPF) | portata permeato normalizzata |440| normalized differential pressure (ΔPn) | perdita di carico normalizzata |441| CIP (Cleaning In Place) | lavaggio in posto / CIP |442| antiscalant | antincrostante |443| biocide (non-oxidizing) | biocida (non ossidante) |444| baseline | linea di riferimento iniziale |445| commissioning | messa in marcia / commissioning |446| profiling / probing | profilatura / sondaggio (conduttività) |447448---449450## Sources451452- ASTM **D4516-19a** Standardizing RO Performance Data453- ASTM **D6908** Integrity Testing of Water Filtration Membrane Systems454- ASTM **D3923** Detecting Leaks in RO and NF Devices455- ASTM **D4189-23** Silt Density Index456- Hydranautics **TSB 107.28** (Apr 2025) — foulants & cleaning, TCF457- Hydranautics **TSB 108** — chlorination/dechlorination458- Hydranautics **TSB 110** — biocides and storage459- Hydranautics **TSB 111** — biofouling460- Hydranautics **TSB 124** — VDT and integrity461- Hydranautics **TAB-111** — chemical pretreatment for RO/NF462- DuPont FilmTec **45-D01504** Tech Manual; **45-D01650** Symptoms of Trouble; **45-D01696** Rev 13 Cleaning Procedures (Feb 2026); **45-D04358** Temperature & pH Best Practices; **45-D01616** Plant Performance Normalization; **45-D01552** CaCO₃ Scale Prevention; **45-D01569** Chlorination/Dechlorination463- **Gohil & Suresh 2019**, Desalination 457:133 — free chlorine exposure tolerance464- **Pereira et al. 2014**, PMC4021920 — biofouling review465- AWWA RF — Guidance Manual for Disposal of Chlorinated Water (SBS stoichiometry)466- WaterTechOnline article 14171304 — Membrane Cleaning Fundamentals467- Toray *Probing* white-paper — vessel conductivity profiling468- Avista / American Water Chemicals autopsy leaflets — Rhodamine WT dye, integrity thresholds469- IWA Publishing 2022 — non-oxidizing biocides in PA RO