What the calculation was checked against

Every design equation, constant and quoted range in KinetiRO Sim was read against Wastewater Engineering: Treatment and Resource Recovery, Metcalf & Eddy, 5th edition, and against IWA Scientific and Technical Report No. 9 for the activated sludge model.

Twelve equations and twelve tables reproduce the references exactly, along with the stoichiometric constants and the whole reagent list.

Twelve things were wrong. Three of them moved real answers. Three were values a user could type that the calculation then ignored — which is worse than a wrong answer, because the interface implies the input matters. The rest were citations that pointed at the wrong table while the values were right, five times over, which is the reason a plausible-looking reference is not evidence of anything either.

A second pass, made by running the shipped example train and chasing every check it raised, found more. All of it is below.

Reason for publication

Because a verification that finds nothing is not evidence of anything. It is evidence that nobody looked hard.

A version of this page listing only the equations that were correct would be accurate, shorter, and of no value to an engineer deciding whether to rely on a figure the software has produced. What that reader requires is not evidence of care but the record of what occurs when care fails.

So the failures are on the page, with what changed. So is the list of work we know is worth doing and have not done.

Method of verification

The reference text was extracted and searched directly. Every equation and every table was read in place rather than recalled. That distinction is not pedantry: the citations were wrong five times while the values were right, and only reading the page catches that.

The fixes are covered by regression suites that run the application under a headless browser. One suite checks, among other things, that the dissolved-oxygen saturation at 20 °C matches 9.092 × (1 + 0.40 × D_f / 10.33), that blower power matches Eq. 5-77a to 0.01 kW, that total nitrogen equals TKN plus nitrate with nitrogen gas excluded, and that the calculation core and the stream decoration agree on total nitrogen to 0.05 mg/L. Another solves the shipped example train and asserts that it raises no errors and no warnings — so the next change to a check or a correlation has to keep that example clean, or say why not.

First pass — findings and corrections

A — Dissolved-oxygen saturation did not match the reference table

The tool used the pre-1990 APHA cubic, which reads low everywhere and worst at the top of the range: −0.8% at 20 °C, −1.1% at 25 °C, −1.6% at 30 °C and −5.6% at 40 °C. Replaced with the Benson–Krause relation the reference appendix is tabulated from, which reproduces it to ±0.001 mg/L across 0–40 °C. It feeds both the saturation at 20 °C and the temperature ratio in the oxygen transfer equation, so it moved the aeration answer directly.

B — The mid-depth correction in the oxygen transfer equation was outside the book's range

It used a factor of 0.5 where the equation defines 0.25 to 0.45, typically 0.40, and a standard pressure of 10.33 m of water. Now 0.40 and 10.33 m.

C — The blower ignored its own inputs

It took a discharge pressure and an efficiency, used neither, and reported only air flow — while the correct equation was already implemented a hundred lines away for a different block. It now computes shaft power, pressure ratio, air mass flow and specific power, and it compares its duty against the process air the reactors downstream actually call for.

D — Total nitrogen was wrong in both directions

It counted the dissolved nitrogen gas that denitrification releases, which is not a permit constituent, and it omitted the organic nitrogen bound in the COD fractions, which on a nitrifying effluent is the larger of the two terms.

E — The influent's TKN was read and thrown away

The field existed, a user could type in it, and nothing downstream used the value.

F — Sludge age was never computed

A block's reference sheet discussed it, a design check warned that it was too short, and nothing calculated it. It is now derived over the converged flowsheet, counting only solids that actually cross a system boundary — solids going round the return loop have not left.

G — Five citations pointed at the wrong table while the values were right

Bar rack spacing, velocity and inclination were cited to Table 5-2, which is coarse screenings quantities; they are Table 5-4. Primary TSS removal was cited to Table 5-18, which is vortex grit chambers. Primary side water depth was cited to Table 5-19 rather than 5-20. Aeration hydraulic retention time was cited to Table 8-17, which is the sequencing batch reactor design procedure, rather than 8-19. Equalization mixing was cited to a chapter rather than a section.

All five corrected — and the bar rack rows now distinguish manually cleaned racks from mechanically cleaned ones, which the correct table gives as separate columns and the wrong one did not.

H — Filter media depths were misquoted

Anthracite was given as 12–24 in against the book's 360–900 mm, and sand as 6–16 in against 180–360 mm — inconsistent with the application's own bed designs, which were right. Corrected, with the typical value alongside.

I — A municipal strength range was quoted that does not appear in the table cited

"Medium-strength municipal COD 430–800 mg/L" is nowhere in that table, which gives 339, 508 and 1016 mg/L for low, medium and high strength. The guide now lists the book's three columns for COD, BOD₅, TSS, total nitrogen and total phosphorus.

J — A promised export did not exist

The project menu advertised a sealed .eaqua file, a PDF drawing or plain JSON, and offered the first two. JSON export is now there — the same format the import already read back.

Second pass — the example train

The shipped example is a 1,000 m³/d food-and-beverage reuse scheme. Running it raised ten design checks. Five were faults in the example itself and were designed out of it. Two were faults in the model. One was a check calibrated against the wrong thing. The example now solves with no errors and no warnings; two reported figures remain, which is what reported figures are for.

K — The measured TKN did not reach the model

The most consequential item on this page. Model defaults are calibrated on municipal sewage. Point them at a strong, nitrogen-poor industrial feed and they invent nitrogen the water does not contain. On the worked example the default composition factors delivered 114.6 mg/L of TKN against the 60 mg/L that had been entered — a 91% overstatement — and the sludge stream carried 512 mg/L. The measured TKN now sets the total and the composition factors distribute it. That example's residuals stream now reads 240 mg/L.

A design check was added at the same time: when the scaling has had to move a long way from the municipal default, the tool says so, because at that point the nitrogen analysis and the COD fractionation are describing different water and one of them is wrong.

L — Element pressure drop was a flat allowance

Every membrane element was charged the same 0.35 bar regardless of the flow through it, which takes driving pressure out of exactly the elements that have least of it. On the example train the tail was reading 1.6 LMH against 29.7 at the lead. With the flow-dependent correlation in place the same array reads 2.9 LMH at the tail, and the train pressure drop falls from a modelled 4.2 bar to 2.0.

M — Two design checks were calibrated against the wrong thing

A screenings-volume range measured on municipal sewage fired on every industrial design; it is now scaled to the feed's own solids. A flux-spread check fired on essentially every standard membrane layout, because flux always tapers — that is what a taper is for. It now fires when the tail falls below a quarter of the array average, which is the useful criterion: whether the rear of the train has ceased to contribute.

N — Five faults in the example itself

Worth publishing because they are the kind of thing the checks exist to catch, and they were caught in our own shipped example.

  • The screen's half-blinded headloss was 622 mm, from 6 mm openings behind 10 mm bars at 37% open; it is now 189 mm.
  • The anaerobic reactor's energy balance was −218 kW, from 7 °C of lift on a 28 °C feed; it is now +83 kW, held at 30 °C.
  • The blower was specified at 500 Nm³/h against 670 demanded, and now delivers 750.
  • Its discharge pressure of 60 kPa reached 2.5 m against diffusers at 4.5 m, and is now 85 kPa reaching 5.1 m.
  • The RO array was 5 × 6 elements with a tail concentrate flow of 3.11 m³/h per vessel against a 3.2 m³/h floor; it is now 5 × 5, at 3.85 m³/h, with the lead element at 25.3 LMH against its 30 LMH rating.

O — The issue count included things that were not problems

The badge counted every note, so a finished design showed "10". It now counts errors and warnings; reported figures are listed under "For information" beneath the all-clear.

Third pass — derivation from the bibliography

Four references now sit beside the project: Metcalf & Eddy 5th edition, the Hydranautics HYDRAcap MAX technical and pilot manuals for the ultrafiltration unit, and Saeed & Alhawaj (2024), Water Practice & Technology 19(7):2681, for the reverse-osmosis array. Every item below cites one of them.

P — The settling curve is derived from SVI, and the results move

Vmax and k are no longer entered by hand. They are derived from Metcalf & Eddy Eq. (8-86), p. 896, the Daigger (1995) correlation, placed in the form of Eq. (8-85). Term by term this gives Vmax = e1.871 = 6.495 m/h, fixed, and k = 1000(0.165 + 0.00159·SVI).

The reference states the reason for preferring it: the correlation exists so that a flux analysis can be performed using SVI data in place of an extensive settling-test procedure. SVI is measured at working plants; Vmax is not.

This changes results, and that is not a defect

The derived pair does not reproduce the values Metcalf & Eddy quotes under Eq. (8-85) — typically 7 m/h and 600 L/mg at SVI 150. At SVI 150 the derivation gives 6.495 m/h and 404 L/mg, and the zone settling velocity at 3000 mg/L rises from 1.157 to 1.936 m/h. Wilson & Lee and Daigger are independent correlations drawn from different data, and the reference prints both without reconciling them. The application now uses the correlation that derives from SVI.

The consequence is a different clarifier area. A flowsheet sized before this change, re-run afterwards at the same SVI and the same MLSS, returns a different required area. Nothing in the flowsheet has to be edited for the answer to move.

A correlation fitted across other plants does not overrule a measurement of the plant in question, so a settling-column result may be entered directly and takes precedence. Both values are entered or neither: a Vmax without a k is not a curve, and a measured Vmax paired with a derived k would produce a curve that nobody selected. The route taken is reported.

Q — Underflow velocity was declared and never written

solver.js declared twenty-one clarifier results. The calculation core wrote twenty. Slot 20, underflow velocity Ub, was never assigned.

Results share one buffer across nodes, so the field did not read zero. It read whatever the previous node had left at that offset. A result was displayed from the wrong node. Every clarifier in the application showed another unit's figure under a label that reads as an answer. This was live in the beta, and it was found by adding assertions.

Ub is now written as the underflow flow over the surface area — the bulk transport term of Metcalf & Eddy Eq. (8-88) — and is asserted against those two reported values rather than against itself.

R — TSS may be derived from the COD fractionation

Influent TSS was previously a typed concentration only. It may now be derived instead, as the ASM3 composition sum over the particulate COD, with no biomass or storage term because a raw influent carries neither. Metcalf & Eddy Table 8-11 supplies the composition parameters, with defaults of 0.75 g SS/g COD.

Both routes are computed and whichever governs is reported. That is the purpose rather than a convenience: a characterisation whose measured TSS and COD fractionation disagree substantially indicates that the split is wrong, and that indication is invisible if only the selected route is displayed.

S — Reverse-osmosis array provenance, and one equation deliberately not implemented

The array model was already the model published in Saeed & Alhawaj. Verified present before any change: Eq. (7), β = exp(0.7R), applied per element with that element's own recovery; Eq. (14), the fouling-derated solution–diffusion flux; and Eqs. (17) and (18), Pdp = 0.01·n·Qav1.7 with Qav = (Qf + Qc)/2. Nothing required rewriting. What was absent was the citation.

The temperature correction remains Arrhenius, exp[2700(1/298.15 − 1/T)], rather than the paper's Eq. (19a/b), exp[0.0343(T − 25)]. The application ships real elements — ESPA, CPA, SWC and SW30 — whose rated flux is taken from datasheets that publish the Arrhenius form. Matching the datasheet an element came from is preferred to matching a general correlation.

Eqs. (4) and (5), the average concentration factor ACF = ln(1/(1−R))/R, are not implemented and must not be. The factor is a closed-form estimate of the mean feed-side concentration when a pressure vessel is treated as a single lump. This model integrates that concentration rise element by element, which is the quantity ACF approximates. Applying both would count the rise twice.

How this round was tested

ci/suites/bibliography.js contains 31 assertions, each made against the published equation rather than against a captured value. A captured number passes for the wrong reason as soon as the model moves.

Three of those assertions were wrong before they were right. The failures are recorded because they are the same error this project keeps finding, in miniature:

  • One compared a value to itself and could not fail.
  • One asserted that the measured curve settles faster than the derived curve. That is false here: the settling curve changes the clarifier's operating point, so the two runs equilibrate at different MLSS and the comparison was between two different plants.
  • One repeated that claim at a fixed concentration, which is still wrong, because Vesilind curves with different Vmax and different k cross. For the pair tested the crossover is near 2870 mg/L, inside the normal MLSS range, so the ordering reverses depending on where it is evaluated.

The replacements assert that the crossover falls where the algebra places it, and that the two curves order correctly on each side of it. Reverting the derivation produces five failures; ignoring the override produces four.

Methods that go beyond the reference

The element-by-element membrane march goes beyond the reference

Metcalf & Eddy gives the solution–diffusion pair, Eqs. 11-38 and 11-39, and stops. The march itself, the concentration-polarisation factor, the temperature correction and the per-element manufacturer limits are standard membrane projection practice rather than textbook material. That is better engineering than the book's lumped treatment, and it is a different provenance, so we name it rather than letting a reader who has seen "M&E" on other blocks assume it here.

The Fenton block has no textbook design method

Its reference sheet says so. It is not an oversight.

Worth doing, not done

Three items remain on this list. A fourth, the derivation of the settling curve from SVI, has been completed and is recorded as item P in the third pass below. It is struck through rather than removed: the reasoning it set out is the reasoning that was acted upon, and the record should show that.

The list is published in full. A record of open work kept only internally is not a record; it is an opinion.

  1. Eq. (8-86) would let SVI drive the settling curve — completed, see item P

    Retained rather than deleted. The reasoning recorded here was that an input already present on the form should perform the work its label implies, and that is the reasoning on which the change was made.

  2. The RO array model goes beyond the book, and the block should say so more loudly than it does

    See the section above. A user reading "M&E" on other blocks may carry the assumption across.

  3. Influent TSS and the ASM3 particulate COD are not reconciled

    The influent sets suspended solids directly from the TSS entered, while the reactions alter it through the solids-to-COD factors. On the default preset those factors imply 394 mg/L against the 300 entered. Both are defensible — the TSS is measured, the factors are typical — but the gap propagates through the design. The treatment nitrogen just received, item K, would close it: let the measured value set the total and the factors set the distribution.

  4. Fenton has no book method

    The guide already says so. No change wanted; it is listed here so it is not mistaken for an oversight.

Reporting a remaining error

Reports are requested. Send the project file and the figure expected. An addition to this page is preferable to an undetected error.

contact@kinetiro.com, or through the contact page.

An account is required. During the beta every account gets full access, and no card is asked for.