Setup
Getting started
New to this tool? Turn on Worked example beside the page title. It loads treated surface water dosed at 1.5 mg/L, a field FAC reading for the Wall Effect tab and a set of decay test data for Calibration. Turning it off brings back whatever you had entered. Clear all at the foot of this tab empties the water quality and dose fields. Display options, MAV benchmarks and the FAC target are in Settings; the model basis is in About this model. This tool provides guidance only.
This is where you describe the water sample, the dose, and the holding conditions you want to model. Everything updates automatically as you type — no button press needed.
Workflow:
- Pick a water character preset that best matches your source (you can fine-tune later in Calibration).
- Enter the water quality parameters you have. DOC is the most important; UV254 is used as a fallback if DOC is unknown.
- Enter the chlorine dose, contact pH and temperature.
- Set the simulation duration (how long to model the bulk reaction).
- Move to Results for the time-series, KPIs and compliance summary.
One thing to remember: this is a bulk-water simulation. It does not include chlorine consumed at the pipe wall. If you want to estimate the wall contribution for your network, the Wall Effect tab will back-calculate it from a field FAC reading.
DOC drives the decay-rate constants. If DOC is not measured, the model back-estimates it from filtered UV254 using the preset SUVA.
Inorganic demand is subtracted instantly from the dose at breakpoint stoichiometry: 7.6 mg Cl₂/mg NH₃-N · 0.64 mg Cl₂/mg Fe · 1.29 mg Cl₂/mg Mn. Bromide does not consume chlorine but shifts THM speciation toward brominated species.
Results
Guide: using this tab
This is what your inputs predict over time. The KPI tiles at the top give you the headline numbers; the chart and table give you the full time-resolved view.
The numbers shown are bulk-water values — they describe how chlorine and DBPs evolve in a closed sample of water. In a real network, the FAC at a tap will be lower than the bulk prediction here because of pipe-wall demand. The MAV compliance flags assume the predicted bulk DBP levels are reached at the sampling point, which is conservative (real DBP at a tap is usually slightly higher than bulk, due to additional contact time).
Time-to-threshold is the hour at which bulk FAC drops to the network minimum set in Settings. Use the Wall Effect tab to estimate how much sooner this happens in your distribution system.
Amber and red tiles are prompts to look, not instructions to act.
Speciation
Guide: using this tab
This tab breaks the total THM and HAA values down into the individual species at a chosen time point and compares them to the MAVs.
For THMs, bromide drives the shift from chloroform toward the brominated species (BDCM, DBCM, bromoform). Even small bromide concentrations (>0.05 mg/L) can produce significant BDCM, which has the most stringent MAV (60 µg/L). For HAAs, the di- and tri-chlorinated species dominate in low-bromide waters; brominated HAAs become significant at higher bromide.
Pick a contact time below — the bars and table refresh automatically.
Sum-of-ratios is the sum of each species concentration divided by its MAV. A value below 1.0 means combined compliance is satisfied; above 1.0 indicates the combined group exceeds the regulatory threshold. Amber and red are prompts to look, not instructions to act.
Wall Effect
Guide: using this tab
The core model predicts bulk decay only. In a real distribution system, chlorine is also consumed at the pipe wall — by biofilm, corrosion products, tuberculation, and reactions with pipe materials. Total in-pipe decay is usually well-described by combining the bulk reaction with a first-order wall reaction:
Cpipe(t) = Cbulk(t) · exp(−kwall · t)
The wall coefficient kwall depends on pipe material, age, condition, and flow velocity. The reference table below gives literature ranges. You can either:
- Estimate from a field observation — give the tool an observed FAC at a known residence time in your network and it will back-calculate the implied kwall. This is the most useful method, because it matches the model to your real system.
- Enter a wall coefficient directly from the reference table or your own data.
The "in-pipe" curve below shows what the bulk model would predict if the wall effect were applied to your scenario.
Enter what you observe at a sampling point in your network. The tool compares to the bulk model and infers kwall.
Apply a literature or measured kwall to your scenario.
| Pipe material / condition | Typical kwall range (h⁻¹) | Notes |
|---|---|---|
| PVC, HDPE (smooth plastics, clean) | 0.0005 – 0.002 | Inert, minimal demand |
| PE-lined ductile iron (new / good condition) | 0.002 – 0.010 | Lining intact |
| Cement-lined cast iron (intact lining) | 0.005 – 0.015 | Mortar lining provides protection |
| Bitumen-lined ductile iron | 0.005 – 0.025 | Lining degrades with age |
| Unlined cast iron (mature biofilm) | 0.020 – 0.080 | Significant demand |
| Tuberculated cast iron / poor condition | 0.05 – 0.20 | Highly variable; site-specific |
| Galvanised steel (service lines) | 0.01 – 0.05 | Corrosion products consume Cl₂ |
Sources: Vasconcelos et al. (1997), Hallam et al. (2002), and field observations summarised in Brown et al. (2011). Values are order-of-magnitude indicators — measure or back-calculate for your network where possible.
Calibration
Guide: using this tab
The defaults that ship with the tool will be roughly right for most NZ surface waters, but every catchment is different. This tab lets you:
- Learn how to run a chlorine decay test and a DBP formation potential (DBPFP) series for your water.
- Fit your data — paste time/FAC measurements and the tool will fit the capacity-limited decay parameters (fast and slow demand capacities and their rate constants) automatically.
- Adjust coefficients manually in the table below, with help-text explaining what each one does.
The expandable sections below walk through the test protocols and the math, so it's a fairly self-contained workflow. Once you've fitted your data, hit "Apply to current preset" and the rest of the tool will use your calibrated coefficients.
How to run a chlorine decay test
A chlorine decay test characterises how chlorine reacts with the constituents in your water. It can be done in any well-equipped operations lab.
What you need:
- A clean sample of your water, at the temperature and pH it experiences in service
- A stock sodium hypochlorite solution of known strength
- A DPD colorimeter or amperometric titrator for FAC measurement
- Headspace-free glass bottles in a temperature-controlled bath or incubator
- A clock and a notepad
Protocol:
- Collect your sample. Filter it through 0.45 µm if you want to characterise dissolved-only reactions. Use it within a few hours.
- Adjust pH to the value you want to model (target pH ±0.1). Bring the sample to the test temperature.
- Dose with a chlorine concentration similar to what you use operationally. For DBP formation potential, dose at 5 × DOC so chlorine isn't limiting.
- Mix briefly, then dispense into 10–12 amber bottles, filling each completely (no headspace). Cap and incubate at the test temperature.
- Sample one bottle at each timepoint: 0.25, 0.5, 1, 2, 4, 8, 24, 48, 96, 168 h. Measure FAC immediately.
- If you want DBPs as well, fix the chlorine residual at each timepoint with a quench reagent (e.g. sodium thiosulphate or sodium sulphite) and send to a lab for THM/HAA analysis.
Tips:
- The fast phase happens in the first 1–4 hours — don't skip the early timepoints.
- If chlorine drops below 0.2 mg/L before the end of the test, your dose was too low — repeat with a higher dose.
- Run a blank (sample with no chlorine) to check for background interferences.
How to run a DBP formation potential (DBPFP) series
A DBPFP test tells you how much THM and HAA your water will form per unit of chlorine consumed. It is the basis for the kTHM and kHAA coefficients in the model.
Standard conditions (ICR / Standard Methods 5710):
- Temperature: 20 °C (or your site temperature if you want a site-specific fit)
- pH: buffered to 7.0 ± 0.2 (phosphate buffer)
- Chlorine dose: enough to give a residual of 3–5 mg/L at the test endpoint (typically 4–6 × DOC)
- Contact time: 7 days (168 h) for "ultimate" formation
- Headspace-free, dark, sealed
Outputs:
- FAC measured at start and endpoint (and ideally a kinetic curve in between)
- Individual THM and HAA species measured at the endpoint
Calculating yields:
- kTHM = total THMs (µg/L) ÷ chlorine consumed (mg/L)
- kHAA = total HAAs (µg/L) ÷ chlorine consumed (mg/L)
For most NZ humic / fulvic waters these come out around 22–30 µg THM and 25–40 µg HAA per mg Cl₂ consumed. If you fit values well outside that range, double-check the test conditions.
Paste time-FAC pairs from your decay test (one pair per line, comma or tab separated). Include the dose at t=0 if you have it. The fitter uses the capacity-limited model to find the fast and slow demand capacities and their rate constants.
Format: time_in_hours, FAC_mg_per_L per line. Header row is optional and will be skipped.
Free chlorine decays by reacting with a fast pool and a slow pool of organic sites, each with a finite demand capacity. The dose fills the fast pool first, then the slow pool; any genuine excess persists. Capacities scale with water character (fast pool with filtered UV254, slow pool with DOC), so reducing the dose correctly reduces — or eliminates — the surviving residual. Rate constants are linear functions of filtered UV254.
| Fast pool demand capacity (mg Cl₂/L per unit fUV254) | |
| Slow pool demand capacity (mg Cl₂/L per mg/L DOC) | |
| kR — fast rate intercept (h⁻¹) | |
| kR — slope vs fUV254 | |
| kS — slow rate intercept (h⁻¹) | |
| kS — slope vs fUV254 | |
| Background persistence kBg (h⁻¹, excess chlorine) | |
| Assumed SUVA (fUV254/DOC) for missing-input fallback | |
| Activation energy Ea for decay (kJ/mol) | |
| pH sensitivity for decay (× per pH unit, around 7.5) | |
| Character multiplier on demand capacities |
DBP formation is bounded by two limits and takes the smaller at each time: the ultimate formation potential (set by DOC and NOM character, scaled by reaction-time progress) and what the chlorine actually consumed can support. At normal doses the ultimate-FP limit binds; when the dose is low the chlorine limit binds, so formation is correctly suppressed without leaving a false residual. Per-DOC yields rise with SUVA and are floored to stay physical for low-aromaticity waters.
| TTHM yield — intercept (µg per mg DOC) | |
| TTHM yield — slope vs SUVA | |
| TTHM yield — floor (µg per mg DOC) | |
| HAA yield — intercept (µg per mg DOC) | |
| HAA yield — slope vs SUVA | |
| HAA yield — floor (µg per mg DOC) | |
| TTHM yield per mg Cl₂ consumed (chlorine-limited path) | |
| HAA yield per mg Cl₂ consumed (chlorine-limited path) | |
| TTHM time-progress constant τ (h) | |
| HAA time-progress constant τ (h) | |
| Site-specific yield multiplier (default 1.0) | |
| Activation energy Ea for formation (kJ/mol) | |
| pH sensitivity for THM formation (× per pH unit, around 7.5) | |
| pH sensitivity for HAA formation (× per pH unit, around 7.5) | |
| Bromide enhancement of total THM (per mg/L Br⁻) | |
| Bromide incorporation factor (η, dimensionless) |
The decay and DBP relationships are calibrated on moderate-to-aromatic waters (SUVA roughly 1.9 – 3.7). In waters with very low SUVA — high DOC but low aromaticity — filtered UV254 over-states reactivity, so the model would otherwise decay too fast and over-predict HAA. This correction bends the rate constants and yields down. It is identically inactive (severity = 0) at or above the SUVA threshold, so it never changes moderate or aromatic predictions; it only engages for low-SUVA inputs. Severity = max(0, (threshold − SUVA) / threshold).
| SUVA threshold (correction inactive at or above this) | |
| Fast-pool capacity reduction per unit severity | |
| Fast-rate increase per unit severity | |
| Slow-rate increase per unit severity | |
| TTHM yield reduction per unit severity | |
| HAA per-DOC yield slope below threshold |
| Chloroform fraction | |
| BDCM fraction | |
| DBCM fraction | |
| Bromoform fraction |
| MCAA fraction | |
| DCAA fraction | |
| TCAA fraction | |
| MBAA fraction | |
| DBAA fraction | |
| BCAA fraction | |
| BDCAA fraction |
Report & Save
Guide: using this tab
This is the only place where data leaves the tool. Three options:
- PDF report — formatted document with the tabs you select, ready to attach to an email or store with a project record. Uses your browser's print-to-PDF.
- CSV download — the time-resolved data and key results, ready to open in a spreadsheet for further analysis.
- JSON save — a single file containing every input, every coefficient and all results. Re-load it later to pick up exactly where you left off.
The PDF and CSV always reflect the current model state; if you change an input after generating one, just regenerate.
Choose which tabs to include. The browser print dialogue will open — pick "Save as PDF" as the destination.
Tip: in the print dialogue, set "Margins" to default and "Headers and footers" off for a clean output.
Includes time-resolved FAC, TTHM, HAA values plus the species breakdown at each timestep.
File name: cld_results_YYYYMMDD.csv
Saves all inputs, coefficients, settings, and the time-series results to a single file.
File name: cld_scenario_YYYYMMDD_HHmm.json
Restore a previously saved scenario.
All current values will be replaced.