About KiwiSpec
A chemical equilibrium speciation model for soil solution that runs entirely in your browser. It calculates how each element is distributed between free ions, dissolved complexes, organic matter and mineral phases — and, most usefully, the free-ion activity that actually governs plant uptake and toxicity.
Total concentrations tell you very little about how a soil will behave. A soil solution holding 3 µmol L−1 of copper may present less than a thousandth of that to a root, because almost all of it is bound to dissolved organic matter. KiwiSpec exists to make that distinction, and it is built around the thing that makes soil solution different from any other natural water: organic matter.
What it does
- Speciation over 315 components and more than 3,500 aqueous complexes — the full Visual MINTEQ thermodynamic database, with soil-relevant shortlists layered on top so you are not hunting through actinides to find calcium.
- Dissolved organic matter by the NICA-Donnan model, with a soil-solution default for how much of the DOC is active and separate pools for DOC from the soil and from biowastes.
- The soil itself: in soil mode, metals are partitioned between solid-phase organic matter, iron oxides, clay and the solution, from the soil's reactive metal, organic carbon and oxide contents. Dissolved concentrations and Kd come out, not in.
- Biowaste applications: mix compost, biosolids or manure into the soil at a given rate and see what reaches the solution; sweep the rate, pH or DOC and plot the response.
- Soil air: CO2 at soil partial pressures rather than atmospheric, which is where a great deal of soil pH buffering comes from.
- Mineral phases: saturation indices for 741 minerals, grouped into the carbonates, oxides, phosphates, silicates and sulfates that actually occur in soils, with automatic precipitation if you want it.
- Redox through 29 couples, for waterlogged soils and for arsenic, chromium, iron, manganese and sulfur chemistry.
It is checked against published measurements of free metal ions in soil solutions and of dissolved metals in a sludge-amended New Zealand pasture soil; the verification section says where it does well and where it does not.
What it does not do
Being clear about this matters more than the feature list. KiwiSpec calculates equilibrium. In soil mode that includes organic matter, iron oxides and clay, but not other oxide surface models or non-humic organic matter as such, and it knows nothing about ageing of added metals, decomposition, kinetics, transport or biology. A real soil is not at equilibrium, and the difference between what this model says and what a soil does is often the interesting part of a thesis. The limitations section of the guide goes through this properly.
How it runs
The whole model is HTML, CSS and JavaScript with the thermodynamic data compiled in. Every calculation runs in your browser: nothing is sent to a server, so your data never leaves your computer. To run it offline, open the KiwiScience site with Open KiwiScience.command (or kiwispec/Open KiwiSpec.command) and choose KiwiSpec in the menu.
This page holds everything written about the model: this overview, the user guide, the worked examples and the theory and databases. The model itself is one click away.
User guide
Written for postgraduate students who have met chemical equilibrium in lectures but have not run a speciation model before. If you have used Visual MINTEQ, PHREEQC or WHAM, skip to section 3.
1Before you start
What a speciation model is for
You measure a soil solution and find 3 µmol L−1 of copper. That number, on its own, predicts almost nothing. The copper is distributed among free Cu2+, carbonate and sulfate ion pairs, hydroxide complexes, and — overwhelmingly, in most soils — complexes with dissolved organic matter. Only a small and variable part is present as the free hydrated ion, and it is that part which plants take up, which is toxic, and which sorbs to mineral surfaces.
A speciation model takes the total concentrations you measured, plus pH, temperature and a few other conditions, and solves the simultaneous equilibria to tell you what fraction sits in each form. The central output is the free-ion activity, and the reason to run the model at all is that this quantity is very hard to measure and quite easy to calculate.
The free-ion activity model (FIAM). The working hypothesis behind most of this is that biological response — uptake, deficiency, toxicity — correlates with the free-ion activity rather than the total dissolved concentration. It is an approximation with well-documented exceptions (some organic complexes are taken up intact; competition at the root surface by Ca2+ and H+ matters, which is what the biotic ligand model adds). Know that you are invoking it.
What you need to have measured
At an absolute minimum, to get anything meaningful:
- pH of the solution you are modelling — not a 1:5 water pH if you are modelling a soil solution extract.
- The major ions: Ca, Mg, K, Na, and the counter-anions Cl, SO4, NO3 and inorganic carbon. These set the ionic strength and the activity coefficients. Leaving out half the anions will bias every activity coefficient in the run. Calcium and magnesium matter twice over when organic matter is present: they compete with trace metals for the humic sites, and without them KiwiSpec overestimates copper binding by 0.5–1 log unit (see Verification). The model warns you if they are missing.
- DOC, if there is any organic matter at all — which in a real soil there always is.
- The elements you actually care about.
- Temperature. Field temperature, not lab temperature, if you want field speciation.
Alkalinity is not optional in a calcareous soil. If you do not supply carbonate, either as a measured alkalinity or through the CO2 partial pressure, the model has no carbonate to work with and will happily report that calcite is wildly undersaturated in a soil full of lime.
2Your first run
Open the model. It starts on a temperate pasture soil so there is something to look at.
- Pick a starting point. Use Start from… in the top bar: a typical soil solution, or one of the worked examples. The typical soils are representative compositions to edit, not data — never report them as if they were measurements.
- Set the conditions. pH and temperature at the top of the Solution tab. Leave pH on Fixed (measured).
- Enter your components. Click a group chip (Major cations, Trace metals…) to load the usual suspects, or search the full database. Type concentrations in whatever unit you chose; the mol/L column shows the conversion so you can check it.
- Enter your DOC. At the foot of the Solution tab, under the components. Leave it at 0 and organic matter is left out altogether; this is the step people skip, and it is the step that changes the answer most. The soil pool assumes 65 % of the DOC binds like fulvic acid unless you enter a measured fraction; a biowaste pool needs its own measured fractions.
- If you have a soil analysis rather than a solution, switch on soil mode on the Soil tab (section 5).
- Set the soil CO2. Gases & minerals tab. The default, log P = −2.0, is a reasonable soil value and is about 25 times atmospheric.
- Press Run (or Ctrl+Enter).
- Read the Key results tab first. Everything else is detail. If you change an input afterwards, a banner reminds you that the results are out of date until you run again.
Change one thing at a time and re-run. A speciation model is most useful as an instrument for asking "what does this depend on?", and the way to find out is a series of runs that differ in one input. Raise the pH by one unit; halve the DOC; take the sulfate out. The pattern of change is the result, not any single number.
3Getting your data in
Components, not elements
MINTEQ works in components — a chosen basis set from which every species is written as a reaction. Mostly a component is the obvious ion, but there are traps:
| You measured | Enter as | Note |
|---|---|---|
| Total inorganic carbon, alkalinity, or bicarbonate | CO3-2 | Always as carbonate, whatever form you measured. The model works out the distribution between H2CO3*, HCO3− and CO32− from the pH. Or leave it out and let the CO2 pressure set it. |
| Phosphate, "P", Olsen P | PO4-3 | As orthophosphate. If you have "mg P per litre", the molar mass to divide by is 30.97, not 94.97 — but the model expects the PO4-3 molar mass, so convert to mol/L yourself and enter that. |
| Sulfate or "S" | SO4-2 | Same trap. |
| Ammonium-N, nitrate-N | NH4+1, NO3-1 | "mg N/L" needs converting; the component molar masses are those of the whole ion. |
| Iron, when you know the oxidation state | Fe+2 or Fe+3 | These are separate components. To let them interconvert, switch on the Fe2+/Fe3+ couple on the Redox tab. |
| Arsenic | H3AsO3 (As III) or AsO4-3 (As V) | Likewise two components; couple them if you want redox to decide. |
| Silicon, "Si", silica | H4SiO4 | |
| Boron | H3BO3 | |
| Aluminium | Al+3 | Enter monomeric Al. A total dissolved Al that includes colloids will overstate what the model thinks is in solution. |
Element mass versus ion mass. The model converts mg/L to mol/L using the molar mass of the component. If your laboratory reported mg P L−1 or mg N L−1, convert to mol/L yourself first and enter that. The mol/L column beside each entry is there so you can check you have not lost a factor of three.
Solution concentrations or soil contents
Speciation happens in the solution, so on its own the model needs mol L−1 of soil solution. If what you have is a soil analysis — mg per kilogram of dry soil — do not convert it with a guessed "soluble fraction". Switch on soil mode on the Soil tab instead (section 5): you then enter each trace metal as its reactive soil content, and the model works out how much of it is in solution from the soil's organic matter, oxides, pH and DOC. That fraction is the answer to the question, not an input to it.
Charge balance
The output reports a charge balance error. If it exceeds about ±10 %, something is missing or wrong — usually an unmeasured anion (organic anions and bicarbonate are the usual culprits). The speciation will still solve, because pH is fixed and the solution is not required to balance, but a badly unbalanced analysis means your ionic strength is wrong, so every activity coefficient is wrong.
4Dissolved organic matter
This is the part of soil solution chemistry that most distinguishes it from surface water or groundwater work, and the reason this version of the model exists.
What the model does with DOC
KiwiSpec uses the NICA-Donnan model, which treats humic material as a gel-like polyelectrolyte with two classes of proton-binding site — carboxylic (type 1) and phenolic (type 2) — each with a continuous distribution of affinities. Two things happen at once:
- Specific binding to the sites, described by the NICA isotherm. This is what holds Cu, Pb, Al and Fe(III) so strongly.
- Non-specific accumulation of counter-ions in the Donnan gel — the diffuse volume around the negatively charged molecule. This is what holds most of the Ca and Mg the organic matter appears to "bind".
The output separates these two, because they behave quite differently: gel accumulation collapses as ionic strength rises, specific binding does not.
What you enter
DOC
Your measured dissolved organic carbon in mg C L−1. Typical soil solutions run from about 5 (a mineral subsoil) to 100 or more (an organic horizon, or a soil recently given compost or biosolids). DOC is entered as one or more pools on the Solution tab; leave it at 0 and organic matter is left out.
How much of it binds
Only humic and fulvic acids bind metals in the NICA-Donnan model. For each pool you give fulvic acid and humic acid as a percentage of DOC. The soil pool defaults to 65 % fulvic acid, no humic acid. That is deliberately more than the humic material you would measure: fractionation (the rapid batch DAX-8 procedure of Van Zomeren & Comans 2007) finds humic substances are only 39 ± 13 % of soil DOC (Groenenberg et al. 2010). But copper also binds to smaller, non-humic molecules — in sludge extracts nearly all dissolved Cu is in complexes below 1000 Da (Vulkan et al. 2002) — and NICA-Donnan has nothing to represent them. With 40 % the model leaves copper too free against measured free Cu2+ (Weng et al. 2002) and under-predicts dissolved Cu in a sludge-amended soil (Percival 2003); with 65 % both are unbiased. So read 65 % as an effective value for copper, not as a measurement. Humic material is taken as 50 % carbon, so 65 % fulvic acid is a DOM:DOC ratio of 1.3.
Two alternatives are one click away under NICA-Donnan settings: the measured-humics value, 40 %, which fits Cd and Pb a little better on the same data; and Visual MINTEQ's surface-water default, 82.5 % (DOM:DOC 1.65), for reproducing older work.
This is still the largest single assumption in the calculation. Between 20 and 82.5 % fulvic acid, pCu at DOC 20 mg/L and pH 6 moves from 8.05 to 9.33. If your conclusion depends on it, report the range. The Sweep tab will plot it for you.
Biowaste DOC
Compost, biosolids, manure and digestate each add dissolved organic matter of their own, usually less humified than soil DOM and different from one batch to the next. Add it as a separate pool with + Add a biowaste DOC pool. A biowaste pool has no default: the model will not run until you enter its measured fulvic and humic fractions, because any single number would be a guess presented as a value.
Binding parameters
Under NICA-Donnan settings. The default is the generic set of Milne et al. (2003), as in Visual MINTEQ. The alternative is the refit of Wiersma et al. (2025), which changes Cd, Cu, Zn, Al, Fe(III) and Mn and was fitted to a larger database. On the independent data tested so far it does not do better for copper, so it is offered for comparison rather than as the default.
What to expect
| Element | Fraction on DOM at pH 6, DOC 20 mg/L (65 % fulvic) | Behaviour |
|---|---|---|
| Cu, Pb | 99 % | The classic case. Free Cu2+ can be a hundredth of the dissolved total or less. |
| Al(III), Fe(III) | 55–99 % | Strongly bound where they stay dissolved; above their solubility ferrihydrite and Al(OH)3(soil) precipitate instead. |
| Cd | 40–75 % | Intermediate and strongly pH-dependent: 42 % at pH 5, 76 % at pH 7. |
| Ni | 15–35 % | Moderate. |
| Zn, Ca, Mg | 4–6 % | Weak. Ca and Mg are mostly held in the Donnan gel rather than at sites; they matter because they compete with everything else. |
Binding rises steeply with pH, because raising pH deprotonates the carboxylic and phenolic groups and frees the sites. This is a large part of why metal solubility and metal toxicity fall as you lime a soil, and it is worth reproducing yourself: run the same solution at pH 4, 5, 6, 7 and plot the free-ion activity.
Chromium(III) and mercury are excluded from organic binding. Their NICA reactions are written through a hydrolysed species rather than the free ion, and applying the isotherm without that correction would give a wrong answer. The model tells you when it has left them out rather than reporting a number it cannot stand behind.
5Soil mode and biowastes
In most soils, and in any soil rich in organic matter, the solid phase decides how much metal is in solution. Soil mode adds it. Switch it on at the top of the Soil tab.
What the model adds
- Solid-phase organic matter by NICA-Donnan, with the solid-phase parameter files of Visual MINTEQ: generic humic and fulvic acid with a fixed Donnan volume of 1 L/kg (Gustafsson and Kleja 2005). Optional cation selectivity for the gel, from Visual MINTEQ's
sonnica.cdb, is off by default because the values are unpublished. - Iron and aluminium oxides as hydrous ferric oxide, by the two-layer model of Dzombak and Morel (1990). They matter most for phosphate, arsenate and molybdate, and for zinc above about pH 6.5.
- Clay as a constant-charge Donnan exchanger (Weng et al. 2001). Wiersma et al. (2025) found clay held less than 3 % of Cd, Cu or Zn across 24 soils.
What you enter
- Solution : soil (L/kg)
- The water per kilogram of dry soil the solution came from: the gravimetric water content for pore water (0.27 at 27 % w/w), or the extraction ratio for an extract (10 for 1:10).
- Soil organic matter
- Soil organic carbon (%), the part of it that is reactive humic material, and how much of that is humic rather than fulvic acid. The default, 31 % of SOC reactive, is the site density Weng et al. (2001) derived from CEC; it lies within the 50 ± 23 % that Wiersma et al. (2025) found by fractionation. At 50 % KiwiSpec over-binds Cu and Cd by about one log unit against measured free ions. 74 % is taken as humic acid; the split barely matters. The reactive fraction is the soil input predictions are most sensitive to — measure it if you can.
- Clay
- Clay content (%) and its charge. Clay is a Donnan exchanger with a fixed negative charge and a gel volume of 1 L/kg (Weng et al. 2001); 0.25 mol/kg is illite. It holds only a few per cent of the trace metals in most soils.
- Oxides
- HFO in g/kg. If you have oxalate and dithionite extractions, the converter takes the amorphous (oxalate) Fe and Al plus a sixth of the crystalline part, following Wiersma et al. (2025).
- The basis of each component
- In soil mode the component table gains a Basis column. Reactive means you are entering the geochemically active soil content in mg/kg: ideally the 0.43 M HNO3 extraction (Groenenberg et al. 2017), not an aqua regia or total digest, which also counts metal locked in minerals. The model partitions it. Dissolved means a measured solution concentration, held fixed; use it for Ca, Mg, K, Na and the anions. The solid phase still holds whatever it holds in equilibrium with them, and they still compete for sites.
pH must be fixed at the measured value. The results then include a Solid phase tab with each component's split between organic matter, oxide and solution, and Kd.
Adding a biowaste
The Biowaste application box on the Soil tab mixes an application into the soil before solving. Give the rate (t dry matter/ha), the depth it is mixed into and the soil bulk density; the biowaste's organic carbon and its reactive humic fraction; and its metal contents with the reactive share of each. The calculator:
- works out the mass of soil in the mixed layer (depth × bulk density, per hectare) and the biowaste's share of the mixture;
- dilutes the soil's reactive metals and organic carbon by that share and adds the biowaste's;
- adds the biowaste's reactive organic matter as a second organic-matter pool, with its own reactive fraction.
The unamended soil stays as you entered it, so the application can be switched off, changed, or swept against rate on the Sweep tab. Add the biowaste's dissolved organic carbon separately as a biowaste DOC pool. The reactive humic fraction of the biowaste has no default: measure it. Worked example 6 goes through a real case.
This is an equilibrium partition. Metals added in biosolids age into less available forms over months to years, the added organic matter decomposes, and soil pH drifts after application. None of that is modelled, so treat the result as the state soon after application.
6Gases and minerals
Soil CO2
Soil air is not atmospheric air. Root and microbial respiration raise the CO2 partial pressure to roughly 10−2.5–10−1.5 atm, against 10−3.4 outside — ten to a hundred times higher. Because carbonate equilibria buffer soil pH and control calcite solubility, this is not a detail.
Leaving the CO2 box ticked makes the solution an open system: carbonate enters or leaves to hold the partial pressure, and the total carbonate in the answer will differ from what you entered. Unticking it makes a closed system, where the carbonate you entered is all there is. Use open for a field soil in contact with soil air, closed for a sealed sample.
Minerals
Saturation index is defined as
SI = log (IAP / Ksp)
SI > 0: supersaturated, the mineral could precipitate.
SI = 0: at equilibrium.
SI < 0: undersaturated, the mineral would dissolve.
Reported saturation indices cost nothing and assume nothing, so read them freely. Forcing a mineral into the calculation is a stronger claim:
- May precipitate lets a mineral form only if the solution becomes supersaturated. This is usually the honest choice.
- At equilibrium holds the mineral exactly saturated, dissolving or growing it without limit. Only do this when you know the phase is present and reactive — calcite in a calcareous soil, gypsum in a gypsic horizon.
Soils are full of minerals that are supersaturated and never precipitate, and full of minerals present but not at equilibrium. A positive saturation index is a statement about thermodynamics, not a prediction that anything will happen. Kinetics, crystal size, nucleation barriers and organic inhibitors all intervene. Dolomite is the standard example: supersaturated in a great many soils, and essentially never forming.
The mineral group chips load the phases plausible in soils. Untick Soil minerals only in the saturation output to see everything the database can express with your components — but expect exotic phases you should ignore.
7Redox
MINTEQ treats different oxidation states as different components. Fe2+ and Fe3+ are separate, and by default they do not interconvert — which is often what you want, because you measured them separately.
Switching on a redox couple links the two through the electron activity, so the element is distributed between the states according to pe. Then:
- Enter the total of the element (it does not matter which state you enter it as; the couple redistributes it).
- Set pe or Eh on the Redox tab. Well-drained soil: pe 8–12. Waterlogged: pe −2 to 2. Below about pe −4 you are into methanogenesis.
A single pe rarely describes a real soil. Soils are not at redox equilibrium: the Fe(II)/Fe(III) couple, the SO4/S(−II) couple and the NO3/N2 couple routinely imply pe values differing by several units in the same sample, because the reactions are microbially mediated and slow. A measured Eh from a platinum electrode is a mixed potential and is not reliably the pe of any particular couple. Use redox coupling to explore how speciation would respond, and prefer measured concentrations of each oxidation state when you have them.
8Reading the output
Key results
The tab to look at first. For each component, every percentage is a share of the total you entered, so the three add up to 100:
| Column | Meaning |
|---|---|
| Total | What you entered. |
| Where it is | A bar split into free ion (rust), complexes (sand) and organic matter (green). A mostly green bar for Cu, Pb or Al is normal in a soil solution. |
| % free | The free hydrated ion. |
| % complexed | Inorganic and small-ligand complexes, and protonated forms such as HCO3−. |
| % on DOM | Held by organic matter, whether bound to sites or accumulated in the Donnan gel. Shown only when DOC is above zero. |
| Free ion | The free hydrated ion concentration. |
| Free-ion activity | Concentration × activity coefficient. This is the number to use for uptake, toxicity and sorption. |
| p(free ion) | −log10 of that activity, the usual way to report it: pCu 9.6, pZn 6.8, and so on. |
The other tabs
- Distribution
- For each element, what percentage of its total is in each species, including the organically bound and Donnan-held fractions. Usually the most readable view.
- Solid phase
- Soil mode only. For every component, the share held by soil organic matter, by oxide and in solution, the dissolved concentration and Kd.
- Organic matter
- The state of the humic phase — its charge in eq/kg, the Donnan volume, the Boltzmann factor χ — and a breakdown of what it is holding, separating site binding from gel accumulation. The tab only appears when DOC is above zero.
- Saturation
- Saturation indices, soil minerals first.
- Species
- Every aqueous species with its concentration, activity and activity coefficient. Use it to find out which complex is doing the work. Organically bound metal is not a species and is not listed here.
- Sweep
- Runs the current problem over a range of one input — pH, DOC, the active fraction, a component, SOC, oxide or biowaste rate — and plots free-ion activity, the DOM-bound share and the dissolved concentration (and Kd in soil mode). Export the numbers as CSV.
- Report
- A plain-text record of the whole run, including the assumptions. Download it and keep it with your data: it is what makes the calculation reproducible.
Sanity checks before you believe anything
- Did it converge? A red banner means the numbers are the last iterate and should not be used.
- Is the charge balance within about 10 %? If not, an ion is missing.
- Is the ionic strength plausible? Soil solutions typically sit between 0.001 and 0.05 mol L−1. Far outside that, check your units.
- Do the major species make sense? At pH 6 the dominant carbonate species should be H2CO3*; at pH 8, HCO3−. If not, something is wrong.
- Is anything wildly supersaturated? An SI of +5 for a common mineral usually means an input is too high by orders of magnitude.
9Limitations
Read this section before you write a discussion.
What is not modelled at all
- Most surface complexation. Soil mode includes hydrous ferric oxide by the Dzombak and Morel (1990) two-layer model, which is a simple and generic representation. There is no CD-MUSIC, no goethite, gibbsite or manganese oxide model, and no clay edge sites.
- Specific binding to clay edges. Clay is an electrostatic exchanger only; at neutral to alkaline pH, where edge sites bind Zn, Ni and Cu specifically, it will under-bind.
- Non-humic organic matter. Only humic and fulvic acid bind. Hydrophilic, low-molecular-weight DOC, which binds copper, is represented only through the higher effective fulvic fraction. Particulate and fresh plant material are inert.
- Ageing and time. Metals added in biosolids or fertiliser become less reactive with time; added organic matter decomposes. The model has no memory of when anything arrived.
- Kinetics, transport and biology. Equilibrium is assumed, instantly and everywhere.
Where the equilibrium assumption is weakest
- Mineral precipitation and dissolution, which can be slower than anything else in the system.
- Redox, which is microbially mediated and effectively never at equilibrium.
- Organic matter binding, which has a slowly exchanging fraction.
- Anywhere a soil is drying, wetting or being disturbed.
Uncertainty in the numbers themselves
- Activity coefficients. The Davies equation is good to about I = 0.5 mol L−1, which covers nearly all soil solutions, but it is an approximation with no ion-specific information for most species.
- Stability constants. Compiled from many sources over decades. Well-studied inorganic complexes are good to a few hundredths of a log unit; obscure organic complexes and rare elements may be out by a log unit or more.
- NICA-Donnan parameters are generic fulvic and humic acid. Your soil's organic matter is not the average of Milne's dataset.
- Temperature. Constants are corrected from 25 °C by van 't Hoff or by an analytical expression where the database has one. At 10 °C that is a small correction; for species with no enthalpy in the database there is no correction at all.
Report free-ion activities to one or two significant figures, or as a log. Writing pCu = 9.63 implies a precision the underlying constants and the DOM:DOC ratio cannot support. pCu ≈ 9.6, or "between 9 and 10", is honest.
10Troubleshooting
- "The calculation did not converge"
- Most often a mineral has been forced to equilibrium when the solution cannot possibly sustain it. Switch forced phases to May precipitate. Failing that, fix the pH rather than calculating it, and check for a concentration entered in the wrong unit.
- A mineral "cannot be held at equilibrium"
- The model is telling you that satisfying that constraint would need an unphysical amount of dissolution — calcite at pH 4, for instance. It drops the phase and carries on. This is a result, not an error.
- The free-ion activity is far lower than I expected
- Almost always organic binding. Check the green share of the bar on Key results and the Organic matter tab. Then check your DOM:DOC ratio.
- A note says ferrihydrite or Al(OH)3 precipitated
- Your Fe(III) or Al total is above what can stay dissolved at that pH, so the excess has been put into a solid, where it cannot compete with Cu and other metals for organic sites. This is on by default whenever organic matter is in the problem (Gases & minerals tab). Entering total Fe from an acid digest as dissolved Fe(III) is the usual cause; enter the filtered, dissolved Fe if you have it.
- Less metal is on the organic matter than I expected
- Look for competition. Fe3+ and Al3+ bind very strongly. By default they cannot stay above the solubility of ferrihydrite and Al(OH)3(soil); if you have switched that off, the model flags supersaturation and offers a one-click fix. Also check that the metal total is not a large fraction of the site density quoted under NICA-Donnan settings: once the strong sites fill, the bound fraction falls. And check the active fraction of DOC: at the 40 % measured-humics value copper is under-bound.
- Ionic strength looks far too high
- A unit error, usually mg/L entered as mol/L, or a soil basis conversion with too small a water content.
- The charge balance error is enormous
- An anion is missing. Organic anions and bicarbonate are the usual omissions; at high pH, check you have carbonate in.
- Nothing happens when I press Run
- Every component is at zero concentration. Enter some numbers.
- My element is not in the list
- Search the full database in the component box — all 315 components are there, the group chips are only shortcuts. If it is genuinely absent, the thermodynamic data for it does not exist in this database.
11Reporting a calculation
A speciation calculation is only reproducible if you report the assumptions with it. In a methods section, state:
- The model and the thermodynamic database (see Theory & databases for the citations).
- Temperature, pH, and whether pH was fixed or calculated.
- Every component and its total concentration — a table, or deposited data.
- The activity model (Davies or extended Debye–Hückel).
- Whether the system was open or closed to CO2, and at what partial pressure.
- For organic matter: DOC, the DOM:DOC ratio, the fulvic/humic split, and the parameter set.
- Which mineral phases, if any, were forced to equilibrium.
- The charge balance error.
The Report tab produces a text file containing all of this. Keep it with your data.
Example wording. Soil solution speciation was calculated with KiwiSpec, an independent implementation of the MINTEQ equilibrium formulation using the Visual MINTEQ 4.0 thermodynamic database. Calculations were run at the measured field temperature (12 °C) with pH fixed at the measured value, using the Davies equation for activity coefficients and an open system with log pCO2 = −2.0. Binding to dissolved organic matter was described with the NICA-Donnan model using generic fulvic acid parameters (Milne et al., 2003), taking the reactive DOM to be 1.65 times the measured DOC. Because this ratio is uncertain, calculations were repeated at 1.2 and 2.0; free Cu2+ activity varied over 0.5 log units across that range. Charge balance errors were below 6 % for all samples.
Further reading
- Kinniburgh, D.G. et al. (1999) Ion binding to natural organic matter: competition, heterogeneity, stoichiometry and thermodynamic consistency. Colloids and Surfaces A 151, 147–166.
- Milne, C.J. et al. (2003) Generic NICA-Donnan model parameters for metal-ion binding by humic substances. Environmental Science & Technology 37, 958–971.
- Gustafsson, J.P. Visual MINTEQ documentation and database.
- Sposito, G. The Chemistry of Soils. The standard text for the underlying soil chemistry.
- Stumm, W. & Morgan, J.J. Aquatic Chemistry. For the equilibrium framework itself.
Worked examples
Every number in these examples was produced by the model itself, not copied from a textbook. Reproduce them: the inputs are given in full, and disagreement means one of us has made a mistake worth finding.
Each example follows the same shape: a question a soil scientist actually asks, the inputs, the result, and — the part that matters — what the result means and where it should not be trusted. Unless stated otherwise all runs use 12 °C, the Davies activity model, an open system at log pCO2 = −2.0, fixed pH, and the soil-solution default for DOM: 65 % of DOC active as fulvic acid, the value that reproduces measured free Cu2+ (see example 2). With organic matter present, ferrihydrite and Al(OH)3(soil) precipitate if the solution is supersaturated with them.
1Liming an acid soil
Question. A pasture soil at pH 4.5 shows poor growth. How much does liming to pH 6.5 change the aluminium and copper the plant actually sees?
Inputs
Ca 1.0, Mg 0.30, K 0.20, Na 0.40, SO4 0.30, Cl 0.50, NO3 0.30, CO3 0.20 mmol L−1; Al 20, Zn 1.0, Cu 0.30 µmol L−1; DOC 25 mg L−1.
Open this example in the model →
Result
| pH | pAl | pCu | pZn | Al on DOM (%) | Cu on DOM (%) | SI gibbsite |
|---|---|---|---|---|---|---|
| 4.5 | 5.42 | 8.03 | 6.15 | 41.0 | 95.8 | −0.48 |
| 5.0 | 5.87 | 8.41 | 6.15 | 39.7 | 98.3 | +0.57 |
| 5.5 | 7.37 | 8.82 | 6.15 | 25.1 | 99.3 | +0.57 |
| 6.0 | 8.87 | 9.25 | 6.16 | 20.6 | 99.7 | +0.57 |
| 6.5 | 10.37 | 9.77 | 6.17 | 17.3 | 99.9 | +0.57 |
| 7.0 | 11.87 | 10.45 | 6.20 | 14.5 | 99.9 | +0.57 |
What it means
Free Al3+ activity falls by nearly five orders of magnitude between pH 4.5 and 6.5. From pH 5 on it is set by the solubility of Al(OH)3(soil), which falls a thousandfold per pH unit: the model precipitates the aluminium that cannot stay dissolved, and what the DOM holds is a share of what remains (41 % of the total at pH 4.5, 15 % by pH 7 because most of the total is by then solid). This is a quantitative version of why liming relieves aluminium toxicity.
Copper follows the same direction but for a different reason: it is already 96 % organically bound at pH 4.5, and the remaining free fraction is squeezed out as more sites open up — and as the aluminium that competed for those sites precipitates.
Zinc barely moves — pZn changes by 0.05 across the whole range. Zinc binds organic matter far more weakly, and at these concentrations it stays largely as the free ion. This is the pattern behind zinc deficiency appearing after liming: total zinc has not changed, but sorption to the soil — which this solution-only calculation leaves out, and soil mode adds — removes it from solution.
Read the gibbsite column carefully. From pH 5 the SI of gibbsite stays at +0.57: the solution is held at saturation with Al(OH)3(soil), a less crystalline and more soluble phase, which precipitates automatically when organic matter is present. With that switched off (Gases & minerals tab) the 20 µmol/L of Al stays dissolved, reaches SI +3.5 for gibbsite by pH 7, and competes with Cu for the organic sites — a physically impossible solution that makes copper look less bound than it is.
2Copper and DOC
Question. Two soils have the same total dissolved copper but different DOC. Should we expect the same toxicity?
Inputs
As above at pH 6.0, Cu 0.30 µmol L−1, no aluminium or zinc, DOC varied.
Open this example in the model →
Result
| DOC (mg L−1) | Cu on DOM (%) | Free Cu2+ activity | pCu | Factor below the DOC-free case |
|---|---|---|---|---|
| 0 | — | 2.1 × 10−7 | 6.67 | 1 |
| 2 | 73.6 | 5.6 × 10−8 | 7.25 | 4 |
| 5 | 93.7 | 1.3 × 10−8 | 7.87 | 16 |
| 10 | 98.4 | 3.4 × 10−9 | 8.47 | 63 |
| 20 | 99.6 | 7.8 × 10−10 | 9.11 | 270 |
| 50 | 100.0 | 1.0 × 10−10 | 9.98 | 2,000 |
| 100 | 100.0 | 2.1 × 10−11 | 10.67 | 10,100 |
What it means
No. Same total copper, and free Cu2+ activity spans four orders of magnitude across a realistic DOC range. This single result is the argument for using speciation rather than total concentrations in any soil ecotoxicology work, and it is why soil guideline values expressed as total metal transfer so badly between soils.
Note the shape: the first few mg L−1 of DOC do most of the work (74 % bound at only 2 mg L−1 and 94 % at 5), after which the curve flattens in percentage terms but the free-ion activity keeps falling steadily — because what is left is being divided among ever more sites.
How much can you trust it?
The share of DOC that binds like fulvic acid is the one input that moves this answer most, so test it. At DOC 20 mg L−1:
| Fulvic acid (% of DOC) | pCu | Cu on DOM (%) |
|---|---|---|
| 20 | 8.05 | 95.8 |
| 40 (measured humic substances) | 8.66 | 99.0 |
| 65 (soil default) | 9.11 | 99.6 |
| 82.5 (surface-water default) | 9.33 | 99.8 |
More than a log unit of spread. Humic substances measured by fractionation are only about 40 % of soil DOC, but copper also binds to the smaller, non-humic molecules — in sludge extracts almost all dissolved Cu is in complexes below 1000 Da (Vulkan et al. 2002) — and NICA-Donnan has no term for them. Against measured free Cu2+ in 32 Dutch sandy-soil solutions (Weng et al. 2002), 40 % leaves copper too free; 65 % is unbiased (RMSE 0.22 log units). That is why 65 % is the default: it is an effective value for copper, not a measurement of humic material. Report pCu ≈ 9.1 with the fraction you assumed.
For Cd and Pb the 40 % measured-humics value fits the same data slightly better (Cd 0.24 against 0.32 log units, Pb 0.77 against 0.98). If your question is about those metals rather than copper, run both. The verification section of the theory page has the numbers.
3Phosphate availability
Question. Why is phosphate least available at both low and high pH?
Inputs
Ca 1.5, Mg 0.40, K 0.20, Na 0.50, SO4 0.30, Cl 0.50, CO3 0.50 mmol L−1; PO4 5.0, Al 5.0, Fe(III) 2.0 µmol L−1; no DOM, so the inorganic chemistry stands alone.
Open this example in the model →
Result
| pH | H2PO4− (%) | HPO42− (%) | CaHPO4(aq) (%) | SI variscite (AlPO4) | SI hydroxyapatite |
|---|---|---|---|---|---|
| 4.5 | 87.0 | 0.2 | 0.1 | +0.05 | −14.32 |
| 5.5 | 72.4 | 1.7 | 0.5 | +1.51 | −7.56 |
| 6.5 | 70.8 | 16.8 | 4.9 | +1.76 | −0.61 |
| 7.5 | 22.7 | 56.7 | 13.8 | +0.34 | +4.63 |
| 8.5 | 2.6 | 84.1 | 6.0 | −2.63 | +6.79 |
What it means
The classic phosphate availability curve falls out of the two solubility columns. At low pH, variscite (AlPO4·2H2O) is at or above saturation, so aluminium phosphates limit solution P. At high pH, hydroxyapatite becomes strongly supersaturated, so calcium phosphates take over. Between roughly pH 6 and 7 both are close to or below saturation at the same time — the availability maximum every soil fertility course draws freehand.
The speciation columns matter separately: the shift from H2PO4− to HPO42− around pH 7.2 changes the charge of the dominant ion, which changes how strongly it sorbs to oxide surfaces and how readily roots take it up.
In a real soil, sorption to iron and aluminium oxide surfaces usually controls solution phosphate more tightly than precipitation does. This example is solution-only; switch on soil mode and give an oxide content to add that sorption (hydrous ferric oxide, Dzombak and Morel 1990). Without it, read the table as "which solid phases could control P", not as a prediction of the concentration.
4Aluminium speciation
Question. In an acid soil, how much of the dissolved aluminium is actually the toxic species?
Inputs
Ca 0.20, Mg 0.10, K 0.05, Na 0.20, SO4 0.20, Cl 0.20, NO3 0.05, CO3 0.05 mmol L−1; F 5.0, Al 30 µmol L−1; DOC 30 mg L−1. The species percentages are of the inorganic aluminium (what is not on DOM); the DOM column is of the total.
Open this example in the model →
Result
| pH | Al3+ (%) | AlOH2+ (%) | Al(OH)2+ (%) | AlSO4+ (%) | Al–F (%) | On DOM (%) | pAl |
|---|---|---|---|---|---|---|---|
| 4.0 | 38.5 | 1.3 | 0.0 | 24.5 | 35.5 | 55.9 | 5.44 |
| 4.5 | 32.9 | 3.6 | 0.2 | 21.4 | 41.8 | 63.3 | 5.59 |
| 5.0 | 22.6 | 7.9 | 1.4 | 14.9 | 52.4 | 62.3 | 5.87 |
| 5.5 | 2.9 | 3.2 | 1.8 | 1.9 | 88.9 | 22.9 | 7.37 |
What it means
Even at pH 4.0, only 39 % of the inorganic aluminium is free Al3+ — and 56 % of the total is organically bound besides. So the toxic species is under a fifth of what an analysis of "total dissolved Al" reports, and far less again by pH 5.5.
Fluoride is the surprise. At just 5 µmol L−1, fluoride complexes 36–89 % of the inorganic aluminium as AlF2+ and AlF2+. If you do not measure fluoride, you cannot calculate aluminium speciation in an acid soil properly. This is the kind of thing a speciation model is for: nobody would guess it, and the constants have been in the database for forty years.
By pH 5 Al(OH)3(soil) is saturated and takes most of the aluminium out of solution; what is left is mostly fluoride complexes, which is why AlF reaches 89 % of the inorganic Al at pH 5.5 and pAl jumps to 7.4. Sulfate contributes another 2–25 %, which is why aluminium toxicity is often milder in gypsum-amended soils than the total aluminium suggests.
5Flooding a soil
Question. What happens chemically as a soil is flooded and the redox potential falls?
Inputs
20 °C, pH 6.5, log pCO2 = −1.5 (a flooded soil accumulates CO2); Ca 0.80, Mg 0.50, K 0.30, Na 0.60, CO3 3.0, SO4 0.20, Cl 0.50 mmol L−1; Fe 0.20, Mn 0.05 mmol L−1; DOC 25 mg L−1. Fe2+/Fe3+ and HS−/SO42− couples active.
Open this example in the model →
Result
| pe | Eh (V) | Fe as Fe(II) (%) | S as sulfide (%) | Fe on DOM (%) | SI siderite | SI mackinawite |
|---|---|---|---|---|---|---|
| +8 | +0.465 | 0.3 | 0.0 | 0.4 | −6.93 | −93 |
| +4 | +0.233 | 3.3 | 0.0 | 3.3 | −2.93 | −57 |
| +2 | +0.116 | 18.3 | 0.0 | 8.4 | −0.93 | −39 |
| 0 | 0.000 | 100.0 | 0.0 | 14.8 | 0.00 | −22 |
| −2 | −0.116 | 100.0 | 0.0 | 14.8 | 0.00 | −6 |
| −4 | −0.233 | 100.0 | 100.0 | 10.2 | −0.56 | +0.58 |
What it means
The redox sequence appears in the right order and at the right potentials. At pe +4 the iron is still ferrihydrite; reduction takes place between pe +2 and 0 (Eh +0.12 to 0 V at pH 6.5), where the solid dissolves as Fe2+. Sulfate reduction only begins far lower, between pe −2 and −4. That separation is why flooded soils go through an iron-reducing stage — grey gleying, soluble Fe(II), phosphate release — well before they smell of sulfide.
Ferrihydrite is allowed to precipitate here, as it is by default whenever organic matter is present. Without it the model would keep the Fe(III) dissolved far above its solubility and show iron “reducing” already at pe +4 — an artefact of an impossible starting solution.
Siderite (FeCO3) sits essentially at saturation once the iron is reduced, so it plausibly controls dissolved Fe(II) in a flooded soil at this CO2 pressure. Once sulfide appears, mackinawite (FeS) becomes saturated and takes over — and because FeS is far less soluble, dissolved iron collapses. The siderite index turning down at pe −4 is that handover happening.
Fe(II) counts wherever it is, in solution or on the organic matter. About 15 % of the iron is held by the DOM once it is reduced — Fe2+ binds much more weakly than Cu2+, but at 0.2 mmol L−1 it is abundant enough to take a real share of the sites, and to compete with trace metals for them.
A single pe cannot describe a real flooded soil: the iron and sulfur couples are microbially mediated and rarely in mutual equilibrium, and a platinum electrode reading is a mixed potential. Treat this table as the sequence a soil moves through, not as a calibration between a measured Eh and a speciation.
6Biosolids on a pasture soil
Question. Sewage sludge is applied to a New Zealand pasture soil. How much of the added copper, nickel and zinc ends up in the soil solution — and can the model predict it from the soil analysis alone?
Inputs
The field trial of Percival (2003) on Templeton silt loam near Lincoln: plots given anaerobically digested Christchurch sludge, some of it spiked with Cu, Ni or Zn sulfate, and a control. Soil mode, pore water at 27 % water content (0.27 L/kg), 20 °C. The soil inputs are the measured total metals and total C, with the default 31 % of soil C as reactive humics; the solution inputs are the measured pH, major cations and anions, and DOC (65 % as fulvic acid). Only the dissolved metals are left for the model to predict. The paper gives total rather than 0.43 M HNO3-reactive metal, so the reactive pool is taken as the total.
Open the Cu-spiked plot in the model →
Result (1998 samples)
| Plot | pH | C (%) | Cu measured | Cu predicted | Ni measured | Ni predicted | Zn measured | Zn predicted | log Kd Cu |
|---|---|---|---|---|---|---|---|---|---|
| No sludge | 4.9 | 3.1 | 0.2 | 0.06 | 0.1 | 1.99 | 0.9 | 6.8 | 3.04 |
| Unspiked sludge | 5.0 | 2.9 | 0.4 | 0.28 | 0.2 | 2.64 | 3.5 | 14.4 | 2.92 |
| Cu-spiked (Cu4) | 4.8 | 2.7 | 4.0 | 4.27 | 0.5 | 7.00 | 7.6 | 34.0 | 2.82 |
| Ni-spiked (Ni4) | 4.9 | 2.4 | 0.4 | 0.45 | 13.2 | 31.5 | 5.2 | 23.0 | 2.85 |
| Zn-spiked (Zn4) | 4.8 | 2.5 | 0.7 | 0.73 | 1.1 | 12.7 | 476 | 558 | 2.54 |
Dissolved metal in µmol L−1. Measured values from Percival (2003), Tables 2, 3, 5 and 6.
What it means
Copper is predicted well throughout. On the Cu-spiked plot 4.3 against 4.0 µmol/L measured, and within a factor of 1.5 on the other sludge plots; only the unamended control, at 0.2 µmol/L, comes out low (0.06). Across all 42 plot-years the copper error is 0.36 log units (0.10 on the spiked plots), as good as the multi-surface models of Wiersma et al. (2025). The zinc on the Zn plot comes out within 20 %.
Nickel and zinc on the plots not spiked with them come out several times too high. That is mostly the input: a total digest counts metal locked in mineral lattices, which the reactive pool should not, and for geogenic Ni and Zn that is most of it. Measure the 0.43 M HNO3 fraction and much of this error goes away. Even on the Ni-spiked plot nickel is over-predicted by a factor of two — the soil holds Ni and Zn more strongly than the generic parameters allow, which is also what Wiersma et al. (2025) found for Zn.
Then apply more
Unspiked sludge at 400 mg Cu, 80 mg Ni and 1,800 mg Zn per kg dry matter, mixed into the top 10 cm of the control soil (bulk density assumed 1.2 g/cm³; the sludge’s own organic matter left out, so this errs towards solubility):
| Rate (t/ha) | Soil Cu (mg/kg) | Soil Zn (mg/kg) | Dissolved Cu (µM) | pCu | Dissolved Zn (µM) | pZn |
|---|---|---|---|---|---|---|
| 0 | 4.0 | 49 | 0.06 | 10.12 | 6.8 | 5.37 |
| 10 | 7.3 | 63 | 0.11 | 9.59 | 10.0 | 5.20 |
| 50 | 19.8 | 119 | 0.30 | 8.69 | 26.2 | 4.78 |
| 100 | 34.5 | 184 | 0.53 | 8.20 | 51.6 | 4.48 |
| 200 | 60.6 | 299 | 1.00 | 7.67 | 114 | 4.14 |
Zinc, not copper, is the element to watch in this acid soil: at 200 t/ha it reaches the 300 mg/kg soil limit and a dissolved concentration above 100 µM (probably an overestimate, as the Ni and Zn results above suggest), while free Cu2+ stays near 2 × 10−8. The Soil tab’s biowaste calculator does this mixing for you and the Sweep tab plots it against rate.
This is an equilibrium partition. Metal added in biosolids ages into less reactive forms over years, the sludge’s organic matter decomposes, and pH drifts; none of that is modelled. Treat the table as what the soil does soon after application, not as a long-term forecast.
Try these yourself
- Repeat example 2 at pH 5 and pH 7. Does DOC matter more or less as pH rises, and why?
- In example 4, remove the fluoride. How much does pAl change? Now remove the sulfate as well.
- In example 1, let gibbsite precipitate (May precipitate) and re-run the pH sweep. How does the aluminium curve change once the solid is allowed to control it?
- Take the calcareous soil preset and drop the CO2 pressure from 10−2 to atmospheric. What happens to calcite saturation, and what does that say about a soil sample left open on a bench?
Theory & databases
What the model actually computes, and what it computes it from. Read this before citing the model in a thesis.
1The equilibrium problem
The formulation is the classic MINTEQ tableau. A set of components is chosen as a basis, and every aqueous species is written as a formation reaction from those components with stoichiometric coefficients v(s,c):
log a(s) = log K(s) + Σc v(s,c) · log a(c)
[s] = a(s) / γ(s)
So the entire speciation is determined by the activities of a handful of components. Copper in a carbonate solution needs Cu2+, CO32−, H+ and H2O; from those four activities, every one of CuOH+, CuCO3(aq), Cu(CO3)22−, Cu2(OH)22+ and the rest follows directly.
The component activities are fixed by requiring that the mass balances close. For each component c with total T(c), and for each phase p held at equilibrium with mole amount n(p):
F(c) = Σs v(s,c)[s] + Σp v(p,c)n(p) − T(c) = 0
G(p) = log K(p) + Σc v(p,c) log a(c) − log(target) = 0
The second equation is the phase constraint: a mineral held at equilibrium has unit activity, so its saturation index is zero; a gas at a fixed partial pressure has its log P as the target. The unknowns are the component activities and the phase amounts, and the number of equations matches.
What pH does to the problem
Fixing pH removes H+ from the unknowns and removes its mass balance. This is both a convenience and a statement: you are asserting that something outside the model — the exchange complex, mineral weathering, the atmosphere — holds the pH there. In a soil that is almost always the honest position. Calculating pH instead requires either a total proton concentration (rarely known) or a charge balance (which requires every ion to have been measured).
2How it is solved
The system is non-linear and spans many orders of magnitude, so it is solved for x = ln a(c) rather than for the activities themselves. The Jacobian of the mass balances has the convenient form
∂F(c)/∂x(k) = Σs v(s,c) v(s,k) [s]
which is symmetric and positive definite when all totals are positive, and Newton–Raphson on it converges quadratically once close to the answer. The difficulty is getting close. From a poor starting guess a species can be predicted at 1020 mol L−1, and Newton diverges.
Three things make it robust:
- Successive-substitution sweeps before Newton. Each component's own mass balance is solved in turn using a logarithmic step, which crosses many decades at once and cannot diverge. The step is damped to one decade per sweep, because strongly coupled balances (a species appearing in two equations at once) otherwise settle into a limit cycle.
- A damped Newton with a line search, limiting each activity to one decade of movement per iteration.
- A ceiling on the ionic strength during iteration. Without one, a transient over-prediction sends I to astronomical values, the activity coefficients overflow, and every charged species collapses to zero — a state from which the iteration cannot recover.
Mineral phases are added and removed in an outer loop: the most supersaturated candidate is added, phases whose amount goes negative are dropped, and a phase that would have to dissolve without limit to satisfy its constraint is reported as impossible rather than pursued.
3Activity coefficients
Ions in real solutions do not behave ideally. The activity coefficient γ relates activity to concentration, and it depends on the ionic strength
I = ½ Σi zi2 ci
Davies equation (the default)
log γ = −A z2 [ √I / (1 + √I) − 0.3I ]
No ion-specific parameters, reliable to about I = 0.5 mol L−1. Soil solutions are typically 0.001–0.05, comfortably inside that.
Extended Debye–Hückel (WATEQ)
log γ = −A z2 √I / (1 + B a √I) + b I
Uses the tabulated ion-size parameter a and the b-dot term. Better at higher ionic strength, but only about a hundred species in the database carry the parameters; the rest fall back to Davies. Worth using for saline or sodic soils.
The Debye–Hückel A and B are computed from the density and dielectric constant of water at the run temperature (A = 0.509 and B = 0.328 at 25 °C), so temperature enters the activity model as well as the constants.
Neutral species take γ = 1 unless the salting-out option is on, which applies log γ = 0.1I. The activity of water is corrected for the total solute molality.
4Temperature
Constants are tabulated at 25 °C. Soil solutions are rarely at 25 °C, so they are corrected two ways.
Where the database supplies an analytical power function, it is used directly:
log K(T) = A1 + A2T + A3/T + A4 log10T + A5T2 + A6/T2
Otherwise the van 't Hoff expression is used with the tabulated reaction enthalpy:
log K(T) = log K(298.15) + (ΔH / 2.303R) (1/298.15 − 1/T)
Species with neither an analytical expression nor an enthalpy get no temperature correction at all — their constant is used as tabulated. For a run at 10 °C this is a small error for most complexes and a larger one for reactions with big enthalpies, such as carbonate and sulfide equilibria. If temperature matters to your conclusion, check whether the species driving it carries an enthalpy.
5The NICA-Donnan model
Humic material is not a molecule with a stability constant. It is a polydisperse mixture of polyelectrolytes carrying a continuous distribution of binding-site affinities, and it develops an electrostatic field that attracts counter-ions. NICA-Donnan handles both aspects.
The NICA isotherm
For each of two site classes j — type 1 (carboxylic) and type 2 (phenolic) — the amount of ion i bound is
Qi,j = Qmax,j (ni,j/nH,j) × [ (K̃i,jci)ni,j / Σk (K̃k,jck)nk,j ] × [ Spj / (1 + Spj) ]
where S = Σk (K̃k,jck)nk,j
The first bracket distributes the occupied sites among the competing ions; the second is the overall occupancy of that site class. The exponents n are ion-specific non-ideality parameters and p is the width of the affinity distribution. Competition is built in — calcium really does displace copper, and the model says by how much.
The Donnan gel
The charged organic matter is treated as a gel phase of volume
log10 VD = b(1 − log10 I) − 1 (L per kg of organic matter)
Counter-ions accumulate inside it according to a Boltzmann factor χ, with cD,i = ci χzi, and χ is fixed by requiring the gel to be electrically neutral:
q/VD + Σi zi(cD,i − ci) = 0
where q is the net charge on the organic matter in eq/kg. Note what this means physically: as ionic strength rises the gel shrinks, so Donnan accumulation falls away while specific binding does not. The output separates the two for exactly this reason.
Every cation Visual MINTEQ lets into the gel takes part, including those that bind to no site (Na+, K+, NH4+), and what the gel holds of each is taken off that ion's total. Leaving the monovalent ions out, or not balancing them, forces divalent ions to neutralise the gel on their own and inflates Ca, Mg and Zn accumulation, badly so in dilute, organic-rich solutions. Anion exclusion from the gel is small and is not balanced.
Dissolved organic matter: how much of the DOC binds
The reactive amount is entered per DOC pool as fulvic and humic acid, each as a percentage of DOC, and converted at 50 % carbon. The soil-solution default is 65 % fulvic acid. Humic substances measured by fractionation are only 39 ± 13 % of DOC in soil extracts (Groenenberg et al. 2010), but copper also binds to low-molecular-weight, non-humic DOC (in sludge extracts almost all dissolved Cu is in complexes below 1000 Da; Vulkan et al. 2002), which NICA-Donnan does not represent. 65 % is the fraction Weng et al. (2002) found best for Cu, and in KiwiSpec's validation it is the value that gives unbiased copper on two independent datasets (below), where the measured-humics value under-binds it. It is therefore an effective fraction for copper, and two independent fits land on the same value: WHAM VI needed 69 % of pore-water DOC as fulvic acid to match free Cu2+ measured by electrode in 22 copper-contaminated soils (Vulkan et al. 2000), and 65 % to match copper titrations of 15 freshwaters (Bryan et al. 2002). The 40 % measured-humics value (slightly better for Cd and Pb) and Visual MINTEQ's surface-water 82.5 % (Sjöstedt et al. 2010) are options. Biowaste DOC pools have no default.
Solid-phase organic matter
In soil mode the reactive part of soil organic matter is added as solid humic and fulvic acid with the same NICA constants, from Visual MINTEQ's solid-phase parameter files. The difference is the gel: the files fix its volume at 1 L/kg instead of equation 5.2 (Gustafsson and Kleja 2005). By default 31 % of soil organic carbon is reactive: the site density of soil organic matter relative to generic humic acid that Weng et al. (2001) derived from CEC, and within the 50 ± 23 % Wiersma et al. (2025) found by fractionation. At 50 % KiwiSpec over-binds Cu and Cd by about a log unit against measured free ions. 74 % of it is humic acid (Wiersma et al. 2025). Visual MINTEQ also applies Gaines-Thomas selectivity coefficients relative to H+ in the solid-phase gel (Al 0.6, Mg 0.4, Na 0.65 in sonnica.cdb), so that cD,i = Ksel,i ci χzi. The user guide attributes them to unpublished work, so they are optional and off by default.
Hydrous ferric oxide
Iron and aluminium oxides are represented as hydrous ferric oxide by the generalised two-layer model of Dzombak and Morel (1990), with the constants of Visual MINTEQ's feo-dlm_2025 database: two site types at 2.256 (weak) and 0.056 (strong) sites nm−2, which at 600 m2/g and 89 g/mol are 0.2 and 0.005 mol per mol Fe, and 77 surface species covering cations and oxyanions. Each surface species is
[Sj] = [≡SOHt] 10log Kj,t + Σ νjc log ac exp(−zjFψ/RT)
and the surface charge is balanced by a Gouy-Chapman diffuse layer, σ = (8000 εε0RTI)½ sinh(Fψ/2RT). At a given ψ each site balance is linear in the free site, so ψ is the only unknown and is found by bisection. The model returns what the surface holds at the current bulk activities and plugs into the same coupling as the humic phases. The log K values are for 25 °C; only RT and the dielectric constant follow temperature.
Clay
Clay is a Donnan exchanger with a constant negative charge (0.25 mol/kg for illite, range 0.1–0.4) and a gel volume of 1 L/kg from its interlayer spacing and surface area (Weng et al. 2001). The gel is neutralised by counter-ions, q/VD + Σ zici(χzi − 1) = 0, with no specific edge binding.
Iron and aluminium above their solubility
With any organic sorbent present, ferrihydrite and Al(OH)3(soil) are allowed to precipitate by default whenever Fe(III) or Al is in the problem. Fe3+ and Al3+ held in solution above their solubility are not real species; left there they compete with Cu and other metals for organic sites and make those metals look less bound than they are. Holding Al3+ at Al(OH)3 saturation instead, whatever the total, is not the default: in acid organic topsoils Al is undersaturated, and forcing saturation at pH 3.8 would put millimolar Al3+ into solution.
Reactive and dissolved components
In soil mode each component has a basis. For a reactive component the total is the geochemically active soil content (solid plus solution, converted to mol per litre of solution with the solution:soil ratio) and the model partitions it. For a dissolved component the measured solution concentration is fixed; the solid phase is computed in equilibrium with it and competes, but is not subtracted. Major ions are normally dissolved, trace metals and oxyanions reactive. Kd is the solid-phase amount (mol/kg) over what is in solution including DOM-bound metal (mol/L).
How it couples to the speciation
Binding depends on the free-ion concentrations, which depend on how much the sorbents — dissolved and solid humics and the oxide — have already taken out of solution. The two are iterated to a fixed point. Plain substitution diverges once binding is strong — at 99 % bound, a small change in the aqueous total swings the bound amount by much more than itself. Nor can each metal be solved on its own: Al, Fe(III), Ca and Mg compete for the same sites and share the Donnan gel, so taking up more of one releases others. The aqueous totals of all binding components are therefore solved together by Newton’s method, with the cross-derivatives dBi/d ln cj taken from the isotherm and a backtracking line search. It usually settles in five to fifteen passes.
With a redox couple switched on, the unknown is the element rather than the oxidation state: Fe(II) and Fe(III) both bind, their bound amounts are summed into the iron balance, and the Organic matter tab shows the split.
Parameters
| Parameter set | Qmax,1 | Qmax,2 | b | p1 | p2 | nH,1 | nH,2 |
|---|---|---|---|---|---|---|---|
| Generic fulvic acid | 5.88 | 1.86 | 0.57 | 0.59 | 0.70 | 0.66 | 0.76 |
| Generic humic acid | 3.15 | 2.55 | 0.49 | 0.62 | 0.41 | 0.81 | 0.63 |
| Purified peat humic acid | 2.30 | 4.32 | 0.33 | 0.63 | 0.42 | 0.87 | 0.59 |
The alternative generic set of Wiersma et al. (2025, Table 1) keeps these proton parameters and replaces the constants for Cd, Cu and Zn (refitted to a larger database) and for Al, Mn and Fe(III) (from linear free-energy relationships; Fe(III) for fulvic acid from Hiemstra and van Riemsdijk). It is built by tools/build_nica.py from the Milne set and that table.
Site densities are in mol kg−1. The generic sets are from Milne et al. (2003), fitted across a large compilation of binding datasets; the peat set is from Kinniburgh et al. (1999). Complexation constants are available for 24 cations.
Chromium(III) and mercury are excluded. Their reactions in the parameter files are written through a hydrolysed master species rather than the free ion, so applying the isotherm without first making the hydrolysis correction would be wrong by that factor. The model reports the omission rather than the wrong number.
6The databases
All thermodynamic data comes from the Visual MINTEQ 4.0 distribution, converted without editing the values.
| Source file | Contents | Records used |
|---|---|---|
comp_2008.vdb | Components: charge, ion size, b-dot, molar mass | 315 |
thermo.vdb | Aqueous complexes: log K, ΔH, stoichiometry | 3,523 |
type6.vdb | Solid phases | 741 |
gases.vdb | Gas phases | 20 |
redox.vdb | Redox couples | 29 |
analyt09.vdb | Analytical log K(T) power functions | 35 accepted of 46 |
genFA.NPF.TXT, genHA.NPF.TXT, ppha.NPF.TXT | NICA-Donnan site parameters | 5 sets |
genericfa.NIC, genericha08.NIC, pphaha.NIC | NICA complexation constants | 24 cations |
donnica.CDB | Ions permitted in the Donnan gel | 50 |
One constant worth knowing about: the copper bicarbonate complex CuHCO3+ is carried at the NIST value, log K 12.13 for Cu2+ + H+ + CO32−. The WHAM database has used 14.62 (from GEOCHEM), which overstates the complex at pH 7 in low-DOC water by up to 0.4 log units in free Cu2+; Bryan et al. (2002) recommend the NIST value.
Records that were excluded, and why
Two classes of record are left out. Both are reported by the model rather than hidden.
- Seven aqueous species whose reactions do not balance in charge. These are errors in the source files — PuNO32+ is written with sulfate instead of nitrate, HgN3+ has the wrong azide coefficient, and so on. Including them would break charge balance and the ionic strength.
- Eleven of the 46 analytical log K(T) expressions that do not reproduce the constant they belong to. Magnetite's differs by seven log units, meaning it was written for a different reaction basis. Those fall back to the van 't Hoff correction; the 35 that agree are pinned to reproduce the tabulated 25 °C value exactly.
Sub-models that are not implemented
Visual MINTEQ contains surface complexation models (diffuse layer, constant capacitance, triple layer, CD-MUSIC), the Stockholm Humic Model, the Gaussian DOM model and biotic ligand models. Of these, KiwiSpec implements only the diffuse-layer model for hydrous ferric oxide, in soil mode, and not through input files. When an input file uses one, the loader says so explicitly and leaves the affected components out, rather than approximating them silently.
The Gaussian DOM model is present in the distribution but its documentation describes it as outdated and removed from the current program; NICA-Donnan is the model in current use, and is what KiwiSpec implements.
7Verification
The model ships with two test suites, run with the JavaScript engine that comes with macOS. They are worth knowing about, because they say what has and has not been checked.
Speciation, against independently known results
- The ion product of water — pH 7.00 and log[OH−] −7.00 in pure water.
- 0.001 M HCl: pH 3.015, matching the Davies activity correction.
- Acetic acid dissociation (pKa 4.757): pH 3.91 against 3.91 analytically.
- Phosphate speciation across its three pKa values, including the 50:50 split at pH 7.20.
- Gypsum solubility: 16.0 mM against about 15.2 mM measured.
- Calcite in equilibrium with atmospheric CO2: pH 8.24.
- Seawater major-ion speciation: free Na 87 %, Mg 57 %, SO4 44 %, matching published MINTEQ output.
- The Fe(II)/Fe(III) crossover at pe = log K = 13.03.
- Automatic precipitation from a supersaturated CaSO4 solution.
NICA-Donnan, against the properties it must have
- Donnan volume falls monotonically with ionic strength and matches equation 5.2 exactly at I = 1.
- Humic charge runs from near zero at pH 1 to the full site density at pH 12, in the right direction throughout.
- Gel electroneutrality closes to 1 part in 1011, and the organic matter plus its counter-ion atmosphere is electrically neutral overall.
- Copper binding rises monotonically with pH and with DOC.
- The selectivity order Cu > Pb > Cd > Zn ≈ Mg ≈ Ca is reproduced.
- Dissolved plus organically held equals the total input to 1 part in 1011.
Soil mode, against the properties it must have
- HFO has zero surface potential at pHpzc = 8.11, positive below and negative above, and higher ionic strength screens the potential while letting the surface carry more charge.
- The Zn sorption edge on HFO rises with pH and phosphate sorption falls; mass balance closes to 10−10.
- The solid-phase files use their fixed Donnan volume of 1 L/kg at any ionic strength.
- Kd(Cd) rises with pH. At constant DOC, Kd(Cu) barely moves while free Cu2+ falls steeply: dissolved Cu is nearly all on DOM, and the solid and dissolved humics bind it with the same pH dependence. That is the known DOC control of Cu solubility.
- log Kd(Cu) at 2 % SOC and pH 5.5 is 3.7, inside the range usually measured.
Against measured free ions and dissolved metals
tools/validate.js runs five published datasets, entering only what each paper reports, and one comparison with another model. Errors are RMSE (mean error) in log units. The defaults were chosen with Cu first. The two uncertain fractions — reactive SOM and active DOC — were set from independent evidence (the CEC-derived SOM site density of Weng et al. 2001; the DOC fraction Weng et al. 2002 found best for Cu). They were then checked, unchanged, on a New Zealand sludge-amended soil the choice did not use.
Weng et al. (2002): free Cu, Cd, Zn, Ni and Pb by the Donnan membrane technique in 32 solutions from a Dutch sandy soil. Solution only:
| Cu | Cd | Zn | Ni | Pb | |
|---|---|---|---|---|---|
| Weng et al., published NICA-Donnan | 0.28 | 0.35 | 0.16 | 0.42 | 0.71 |
| KiwiSpec default, 65 % FA | 0.22 (+0.01) | 0.32 (+0.17) | 0.16 (−0.08) | 0.41 (−0.25) | 0.98 (+0.70) |
| measured humics, 40 % FA | 0.37 (−0.22) | 0.24 (+0.07) | 0.16 (−0.09) | 0.43 (−0.26) | 0.77 (+0.48) |
| Wiersma et al. (2025) set, 65 % | 0.39 (−0.26) | 0.23 (+0.05) | 0.15 (−0.07) | 0.41 (−0.25) | 0.97 (+0.70) |
| surface-water default, 82.5 % | 0.25 (+0.14) | 0.37 (+0.23) | 0.16 (−0.08) | 0.40 (−0.23) | 1.08 (+0.83) |
KiwiSpec matches or beats the authors' own implementation for Cu, Cd, Zn and Ni. Pb is over-bound in the limed plots, as the authors found for their own NICA-Donnan run (“mostly overestimates the binding”); this is a limitation of the generic Pb constants.
Weng et al. (2001): the same 32 samples in soil mode, free-ion activity predicted from 2 M HNO3 metal, organic matter, clay, oxalate and DCB iron and DOC, at 2 L/kg:
| Cu | Cd | Zn | Ni | Pb | |
|---|---|---|---|---|---|
| KiwiSpec default: SOM 31 %, DOC 65 % | 0.72 (+0.68) | 0.73 (+0.69) | 0.41 (+0.20) | 0.48 (+0.05) | 0.62 (−0.59) |
| SOM 50 %, DOC 40 % | 1.12 (+1.09) | 1.02 (+0.99) | 0.62 (+0.50) | 0.59 (+0.35) | 0.34 (−0.27) |
| SOM 20 % | 0.39 (+0.30) | 0.47 (+0.42) | 0.34 (−0.05) | 0.51 (−0.20) | 0.90 (−0.86) |
| default + Al3+ at Al(OH)3(soil) | 1.00 (+0.14) | 0.67 (+0.31) | 0.48 (−0.04) | 0.61 (−0.28) | 1.47 (−1.15) |
Free-ion activities fall within an order of magnitude for all four cationic metals, the criterion set before running. Cu and Cd remain over-bound by about 0.7 log units; the donor-solution Ca, which competes for sites, was not reported and is taken as the 2 mM of the Ca(NO3)2 matrix. Oxide and clay change Cu, Cd, Zn and Ni by 0.03 log units or less, consistent with the authors' own estimate that solid organic matter holds 45–99 % of these metals. Pb is under-bound: the authors attribute 70–90 % of the Pb in the limed soils to iron oxides, including goethite, for which KiwiSpec has no model.
Percival (2003): a sewage-sludge field trial on a New Zealand pasture soil (worked example 6), 42 plot-years, soil mode, predicting dissolved metal from total metal, total C and the solution chemistry. This dataset was not used to choose the defaults.
| Cu | Ni | Zn | |
|---|---|---|---|
| KiwiSpec default, all plots | 0.36 (−0.24) | 1.05 (+0.98) | 0.70 (+0.64) |
| KiwiSpec default, plots spiked with that metal | 0.10 (−0.06) | 0.51 (+0.48) | 0.36 (+0.32) |
| SOM 50 %, DOC 40 %, all plots | 0.72 (−0.67) | 0.74 (+0.63) | 0.42 (+0.31) |
| SOM 50 %, DOC 40 %, spiked plots | 0.49 (−0.49) | 0.24 (+0.15) | 0.16 (−0.01) |
Copper is now predicted within 0.1 log units on the spiked plots and 0.36 overall, against a benchmark of 0.40–0.44 for the multi-surface models of Wiersma et al. (2025). The cost is Ni and Zn, which the higher-reactivity settings fitted better here: dissolved Ni and Zn come out 2–3 times too high on the spiked plots, and more on the others, where the reported total metal overstates the reactive pool. The defaults favour copper by design; for a Zn or Ni question, test 50 % reactive SOM as well.
Nolan et al. (2003): Donnan dialysis free ions in 27 Australian pore waters. The paper does not report the anions, K, Na or Al, so the inputs have to be completed by assumption and the comparison is indicative only. Zn is predicted to 0.66 log units (WHAM VI with the full analysis: 0.36). For Cu and Pb in the alkaline contaminated samples both KiwiSpec and WHAM predict far too little free metal (WHAM by 1.7 log units, KiwiSpec by 3.9); the authors report the same for WHAM and GEOCHEM. Treat NICA-Donnan copper and lead above pH 7 with caution.
Vulkan et al. (2000): free Cu2+ activity by ion-selective electrode in the pore waters of 22 copper-contaminated soils from England, Chile and China (pCu 3.9–10.5, pH 4.7–7.9). Solution mode, from pH, DOC and the dissolved Cu, Zn and Cd. The paper gives the ionic strength (from conductivity) but not the major ions, so Ca(NO3)2 is added to that ionic strength, with CO2 at 10−3 atm. This dataset was not used to choose the defaults. Criterion, set before running: the share within 0.5 pCu no more than 25 points below the authors' WHAM VI run, whose DOC fraction was fitted to these data (82 %).
| RMSE (ME) | within 0.5 pCu | |
|---|---|---|
| WHAM VI, 69 % FA fitted (authors) | – | 82 % |
| KiwiSpec default, 65 % FA | 0.58 (+0.22) | 73 % |
| measured humics, 40 % FA | 0.53 (−0.17) | 77 % |
| surface-water default, 82.5 % | 0.71 (+0.43) | 55 % |
| default, NaNO3 instead of Ca(NO3)2 | 1.05 (+0.89) | 23 % |
| default, Wiersma et al. (2025) set | 0.97 (+0.53) | 50 % |
Below pH 6 the default is within 0.21 log units (n 8); above it, 0.70 (n 14), with free Cu under-predicted by up to 1.9 log units in the two most alkaline Chilean samples — the same pattern as Nolan et al. below. The matrix row is the lesson: with sodium in place of calcium the error quadruples, because Ca competes with Cu for humic sites. KiwiSpec now warns when trace metals and organic matter are entered with no Ca or Mg.
Bryan et al. (2002), model to model: WHAM VI's p[Cu2+] at 1 µM total Cu, DOC 1–10 mg/L, pH 5.5–8.5, with fulvic acid at 1.3 × DOC (65 %, the same active fraction as KiwiSpec). The table does not give the background electrolyte. In 1 mM NaNO3 KiwiSpec binds more Cu than WHAM (p[Cu] +0.62 higher, RMS 0.64); with 0.24 mM Ca, the median of the waters sampled, the two models agree to 0.35 log units (KiwiSpec −0.25). Two models built on different humic descriptions agree once the competing cation is present. This is not a measurement, and is reported, not tested.
These are checks against internal properties, five published datasets and one other model, not a line-by-line comparison with Visual MINTEQ, which was not available. They show where the model is good (Cu in solution and in a sludge-amended soil; Cd, Zn and Ni in solution) and where it is not (Pb throughout; Ni and Zn in soil mode at the Cu-first defaults; Cu and Pb above pH 7; any calculation without the measured Ca). If a result matters, reproduce it in Visual MINTEQ or ORCHESTRA before you publish it.
The validation datasets
- Bryan, S.E., Tipping, E. & Hamilton-Taylor, J. (2002) Comparison of measured and modelled copper binding by natural organic matter in freshwaters. Comparative Biochemistry and Physiology C 133, 37–49. doi:10.1016/S1532-0456(02)00083-2
- Nolan, A.L., McLaughlin, M.J. & Mason, S.D. (2003) Chemical speciation of Zn, Cd, Cu, and Pb in pore waters of agricultural and contaminated soils using Donnan dialysis. Environmental Science & Technology 37, 90–98. doi:10.1021/es025966k
- Percival, H.J. (2003) Soil and soil solution chemistry of a New Zealand pasture soil amended with heavy metal-containing sewage sludge. Australian Journal of Soil Research 41, 1–17. doi:10.1071/SR01061
- Vulkan, R., Zhao, F.-J., Barbosa-Jefferson, V., Preston, S., Paton, G.I., Tipping, E. & McGrath, S.P. (2000) Copper speciation and impacts on bacterial biosensors in the pore water of copper-contaminated soils. Environmental Science & Technology 34, 5115–5121. doi:10.1021/es0000910
- Vulkan, R., Mingelgrin, U., Ben-Asher, J. & Frenkel, H. (2002) Copper and zinc speciation in the solution of a soil–sludge mixture. Journal of Environmental Quality 31, 193. doi:10.2134/jeq2002.1930
- Weng, L., Temminghoff, E.J.M. & Van Riemsdijk, W.H. (2001) Contribution of individual sorbents to the control of heavy metal activity in sandy soil. Environmental Science & Technology 35, 4436–4443. doi:10.1021/es010085j
- Weng, L., Temminghoff, E.J.M., Lofts, S., Tipping, E. & Van Riemsdijk, W.H. (2002) Complexation with dissolved organic matter and solubility control of heavy metals in a sandy soil. Environmental Science & Technology 36, 4804–4810. doi:10.1021/es0200084
- Wiersma, W., Van Eynde, E., Comans, R.N.J. & Groenenberg, J.E. (2025) Quantifying the accuracy, uncertainty, and sensitivity of soil geochemical multisurface models. Environmental Science & Technology 59, 5172–5181. doi:10.1021/acs.est.4c04812 (soil properties and HFO calculation from its Supporting Information; the refitted parameter set)
The tables used are transcribed, with their sources, in tools/validation/; the papers themselves are not distributed with KiwiSpec.
Numerical robustness
Two failure modes of the speciation solver were found and fixed during this work. Transient bursts of polynuclear species (Fe3(OH)45+) could push the ionic strength into the range where the Davies term turns positive and trap the iteration; ionic strength is now capped at twice what the component totals could give, which no real solution exceeds. All 30 bundled Visual MINTEQ problems now converge (28 before). And a component buffered by a mineral held at equilibrium is no longer given a mass balance in the sorbent coupling, which it could not satisfy.
8Provenance and citation
KiwiSpec descends from a long line. MINTEQ was developed for the US Environmental Protection Agency by Battelle Pacific Northwest Laboratories, combining the mass-action formulation of MINEQL with the thermodynamic database of WATEQ3. MINTEQA2 followed. Visual MINTEQ, maintained by Jon Petter Gustafsson at KTH and later SLU, rebuilt it for Windows, revised the database extensively and added the organic-matter models. KiwiSpec is an independent implementation of the speciation calculation in JavaScript, using the Visual MINTEQ databases.
If you use this in published work
Cite the sources of the data and the models, not only the tool:
- Gustafsson, J.P. Visual MINTEQ — for the thermodynamic database.
- Kinniburgh, D.G., van Riemsdijk, W.H., Koopal, L.K., Borkovec, M., Benedetti, M.F. & Avena, M.J. (1999) Ion binding to natural organic matter: competition, heterogeneity, stoichiometry and thermodynamic consistency. Colloids and Surfaces A 151, 147–166.
- Milne, C.J., Kinniburgh, D.G., van Riemsdijk, W.H. & Tipping, E. (2003) Generic NICA-Donnan model parameters for metal-ion binding by humic substances. Environmental Science & Technology 37, 958–971.
- Allison, J.D., Brown, D.S. & Novo-Gradac, K.J. (1991) MINTEQA2/PRODEFA2, a geochemical assessment model for environmental systems. US EPA, Athens, Georgia.
State that the calculations were performed with an independent implementation, and give the version of the database used.