01 - Speciation calculation

The simplest thing PHREEQC does, and the foundation of everything else: take an analysis of a water and work out what is actually in it.

A laboratory reports total concentrations – so much calcium, so much sulfate. A speciation calculation turns those totals into the distribution of species they imply: free Ca²⁺, the ion pair CaSO₄, CaHCO₃⁺ and the rest, each with its activity. From that it computes a saturation index for every mineral it knows, which says whether the water would dissolve or precipitate each one.

The water here is seawater, from the analysis of Nordstrom and others (1979).

The input

TITLE Example 1.--Add uranium and speciate seawater.
SOLUTION 1  SEAWATER FROM NORDSTROM AND OTHERS (1979)
        units   ppm
        pH      8.22
        pe      8.451
        density 1.023
        temp    25.0
        redox   O(0)/O(-2)
        Ca              412.3
        Mg              1291.8
        Na              10768.0
        K               399.1
        Fe              0.002
        Mn              0.0002  pe
        Si              4.28
        Cl              19353.0
        Alkalinity      141.682 as HCO3
        S(6)            2712.0
        N(5)            0.29    gfw   62.0
        N(-3)           0.03    as    NH4
        U               3.3     ppb   N(5)/N(-3)
        O(0)            1.0     O2(g) -0.7
SOLUTION_MASTER_SPECIES
        U       U+4     0.0     238.0290     238.0290
        U(4)    U+4     0.0     238.0290
        U(5)    UO2+    0.0     238.0290
        U(6)    UO2+2   0.0     238.0290
SOLUTION_SPECIES
        #primary master species for U
        #is also secondary master species for U(4)
        U+4 = U+4
                log_k          0.0
        U+4 + 4 H2O = U(OH)4 + 4 H+
                log_k          -8.538
                delta_h        24.760 kcal
        U+4 + 5 H2O = U(OH)5- + 5 H+
                log_k          -13.147
                delta_h        27.580 kcal
        #secondary master species for U(5)
        U+4 + 2 H2O = UO2+ + 4 H+ + e-
                log_k          -6.432
                delta_h        31.130 kcal
        #secondary master species for U(6)
        U+4 + 2 H2O = UO2+2 + 4 H+ + 2 e-
                log_k          -9.217
                delta_h        34.430 kcal
        UO2+2 + H2O = UO2OH+ + H+
                log_k          -5.782
                delta_h        11.015 kcal
        2UO2+2 + 2H2O = (UO2)2(OH)2+2 + 2H+
                log_k          -5.626
                delta_h        -36.04 kcal
        3UO2+2 + 5H2O = (UO2)3(OH)5+ + 5H+
                log_k          -15.641
                delta_h        -44.27 kcal
        UO2+2 + CO3-2 = UO2CO3
                log_k          10.064
                delta_h        0.84 kcal
        UO2+2 + 2CO3-2 = UO2(CO3)2-2
                log_k          16.977
                delta_h        3.48 kcal
        UO2+2 + 3CO3-2 = UO2(CO3)3-4
                log_k          21.397
                delta_h        -8.78 kcal
PHASES
        Uraninite
        UO2 + 4 H+ = U+4 + 2 H2O
        log_k          -3.490
        delta_h        -18.630 kcal
END

Two things in it are worth pointing out.

Redox is specified, twice over. The solution carries pe 8.451, but also redox O(0)/O(-2), telling PHREEQC which couple to use as the master redox variable – and then individual elements override it: Mn 0.0002 pe uses pe itself, and U 3.3 ppb N(5)/N(-3) uses the nitrate-ammonium couple. Natural waters are rarely at redox equilibrium, and different couples give different answers, so PHREEQC makes you say which one governs each element rather than quietly picking one.

The database is extended in the input. Seawater contains uranium, and phreeqc.dat has none – which is what the first Database example finds. So the input carries SOLUTION_MASTER_SPECIES, SOLUTION_SPECIES and PHASES blocks that add uranium to the database for this run only.

That is the pattern for working with a species a database lacks: add it where the model is, not by editing the database. The addition travels with the input, and the database stays the one everyone else is using.

What to look at

The results are a table rather than a figure. Two parts of it carry the interest.

The species distribution shows how little of a total is usually free. Seawater’s calcium is not all Ca²⁺: a substantial part is paired with sulfate and carbonate, and it is the free ion’s activity, not the total, that determines whether a mineral precipitates.

The saturation indices say what seawater is in equilibrium with. Values near zero mean equilibrium; positive means the mineral could precipitate, negative that it would dissolve. Seawater is supersaturated with respect to calcite and dolomite – which it famously is, without precipitating them, because the kinetics are slow and the surfaces are poisoned. A saturation index says what is thermodynamically possible, never what will happen or how fast.

Where this goes next

Every other example in this set starts from a speciation like this one and then does something to it: changes the temperature (02 - Mineral Solubility), mixes it with another water (03 - Mixing), reacts it (05 - Irreversible Reactions) or transports it (11 - Transport and Cation Exchange).

The Monte Carlo example in the Statistics set takes this same seawater and asks what the uncertainty in its inputs does to the answer.

Source

  • Parkhurst, D. L. and Appelo, C. A. J. (2013). Description of input and examples for PHREEQC version 3. U.S. Geological Survey Techniques and Methods, book 6, chapter A43. This is Example 1 of that manual.

  • Nordstrom, D. K. and others (1979). The seawater analysis used here.