Skip to content

Saturation models

  • When the concentration of the element in the melt increases above the saturation threshold the key phase carrying the element (see Table below) is crystallized (when the bulk-rock composition allows it) which brings back the concentration of the element in the melt to saturation.

  • Although trace elements are not currently partitioned among mineral phases under subsolidus conditions, accessory minerals predicted by saturation models are still incorporated into the simulation. As a result, the model keeps track of the modal abundance and evolution of these accessory phases even below the solidus. This allows for modeling of element sequestration and mineral stability, and ensures that accessory mineral fractions are accurately represented for instance during fractional crystallization.

  • By default the bulk-rock composition is not directly adjusted to account for the extra elements (e.g., Fe for sulfide). However, MAGEMin_C provides the correction to apply to the bulk-rock composition to accomodate for the extra element(s) in the trace-element output structure: Out_TE.bulk_cor_wtandOut_TE.bulk_cor_mol.

Important

While saturation is computed based on available models, if the bulk-rock composition cannot satisfy the stoichiometry of the phase, the saturation level will be increased so that the element remains in the melt.

For instance, if P2O5 concentration in the melt is greater than the saturation level but there is not enough CaO to crystallize all the excess P2O5 as fluorapatite, then the saturation level of P2O5 will be increased such that only the available CaO from the melt is used to crystallize the right fluorapatite fraction.

This approach enforces mass conservation.

  • Watson & Harrison, 1983 - ZrSat_model = "WH"
  • Boehnke et al., 2013 - ZrSat_model = "B"
  • Crisp and Berry 2022 - ZrSat_model = "CB"
ElementphaseacronymformulacorrectionTE_prediction(; arg)
ZrzirconzrcZrSiO4SiO2 and OZrSat_model = "CB", "B", "WH"
SsulfidesulfFeSFeO and OSSat_model = "Oneill21", "Liu07"
P2O5fluorapatitefaptCa5(PO4)3FCaO (F is omitted)P2O5Sat_model = "Tollari06"

E.1 Zirconium saturation

Let's first model zirconium saturation using Crisp and Berry (2022) model. Start as usual by load MAGEMin_C, declaring the database, pressure and temperature conditions, bulk-rock composition and system unit:

julia
using MAGEMin_C
dtb     = "mp"
data    = Initialize_MAGEMin(dtb, verbose=-1, solver=0);
P,T     = 6.0, 699.0
Xoxides = ["SiO2";  "TiO2";  "Al2O3";  "FeO";   "MnO";   "MgO";   "CaO";   "Na2O";  "K2O"; "H2O"; "O"];
X       = [58.509,  1.022,   14.858, 4.371, 0.141, 4.561, 5.912, 3.296, 2.399, 10.0, 0.2];
sys_in  = "wt"

Subsequently, we need to define the element, phase, partiton coefficient and initial concentration in ug/g:

julia
el      = ["Zr"]
ph      = ["zrc"]
KDs     = ["0.0"]   # phase crystallized from saturation models have 0.0 KDs
C0      = [400.0]   # starting concentration of elements in ppm (ug/g)

Note

  • Although Zr is not partitioned into zrc, it is necessary to declare the main Zr-bearing phase and assign a "dummy" KD value of 0. This ensures that zrc will be crystallized by stoichiometry when the Zr concentration in the liquid exceeds the saturation threshold.

Then create the partition coefficient database:

julia
KDs_dtb = create_custom_KDs_database(el, ph, KDs)

Perform the stable phase equilibrium:

julia
out    = single_point_minimization(P, T, data, X=X, Xoxides=Xoxides, sys_in=sys_in, name_solvus=true);

And execute the partitioning of the trace-element together with the Zrsaturation model ZrSat_model = "CB":

julia
out_TE  = TE_prediction(out, C0, KDs_dtb, dtb; 
                        ZrSat_model     = "CB")

Finalize_MAGEMin(data)

Unfolding the out_TE structure yields:

julia> out_TE.

C0            Cliq          Cmin          Csol
Sat_P2O5_liq  Sat_S_liq     Sat_Zr_liq    bulk_D
bulk_cor_mol  bulk_cor_wt   elements      fapt_wt
liq_wt_norm   ph_TE         ph_wt_norm    sulf_wt
zrc_wt

Note

fapt_wt and sulf_wt are set to NaN as no saturation model has been provided.

Warning

The zircon fraction out_TE.zrc_wt is expressed in wt fraction (wtf) and not wt% (wt% = wtf/100.0 ...).

E.2 Zirconium and sulfur saturation models

The following example shows how to modify example E.1 to add simultaneously sulflur saturation using Liu et al. (2007) model:

julia
using MAGEMin_C
data    = Initialize_MAGEMin("mp", verbose=-1, solver=0);
P,T     = 6.0, 699.0
Xoxides = ["SiO2";  "TiO2";  "Al2O3";  "FeO";   "MnO";   "MgO";   "CaO";   "Na2O";  "K2O"; "H2O"; "O"];
X       = [58.509,  1.022,   14.858, 4.371, 0.141, 4.561, 5.912, 3.296, 2.399, 10.0, 0.2];
sys_in  = "wt"

el      = ["Zr","S"]
ph      = ["zrc","sulf"]
KDs     = ["0.0" "0.0"; "0.0" "0.0"]   # phase crystallized from saturation models have 0.0 KDs

C0      = [400.0, 100.0]   # starting concentration of elements in ppm (ug/g)
dtb     = "mp"

KDs_dtb = create_custom_KDs_database(el, ph, KDs)

out    = single_point_minimization(P, T, data, X=X, Xoxides=Xoxides, sys_in=sys_in, name_solvus=true);
out_TE  = TE_prediction(out, C0, KDs_dtb, dtb; 
                        ZrSat_model     = "CB",
                        SSat_model      = "Liu07")

Finalize_MAGEMin(data)

E.3 Saturation models and bulk correction

This example shows how to correct the bulk-rock composition in a iterative manner when accessory phase crystallized when saturation is exceeded.

julia

using MAGEMin_C
data    = Initialize_MAGEMin("mp", verbose=-1, solver=0);
P,T     = 6.0, 699.0
Xoxides = ["SiO2";  "TiO2";  "Al2O3";  "FeO";   "MnO";   "MgO";   "CaO";   "Na2O";  "K2O"; "H2O"; "O"];
X       = [58.509,  1.022,   14.858, 4.371, 0.141, 4.561, 5.912, 3.296, 2.399, 10.0, 0.2];
X_mol, Xoxides  = convertBulk4MAGEMin(X, Xoxides,"wt","mp"); sys_in   = "mol"
X_mol ./= sum(X_mol)                                                    # normalize to 1.0

el      = ["Zr","S"]
ph      = ["zrc","sulf"]
KDs     = [ "0.0" "0.0";
            "0.0" "0.0"]                                          # phase crystallized from saturation models have 0.0 KDs

C0      = [400.0, 1000.0]                                        # starting concentration of elements in ppm (ug/g)
dtb     = "mp"

KDs_dtb = create_custom_KDs_database(el, ph, KDs)

out      = Vector{out_struct}(undef,1)
out_TE   = Vector{out_TE_struct}(undef,1)

X       = copy(X_mol)
tol     = 1e-6
res     = 1.0
n0      = 0.0
ite     = 0
while res > tol && ite < 32
    out[1]     = single_point_minimization(P, T, data, X=X, Xoxides=Xoxides, sys_in=sys_in, name_solvus=true);
    out_TE[1]  = TE_prediction(out[1] , C0, KDs_dtb, dtb; 
                            ZrSat_model     = "CB",
                            SSat_model      = "Liu07");

    X       =  X_mol .- out_TE[1].bulk_cor_mol

    res     = abs(n0 - vec_norm(out_TE[1].bulk_cor_mol))
    n0      = vec_norm(out_TE[1].bulk_cor_mol)

    ite    += 1
    if ite == 32
        @warn "Saturation model did not converge in 32 iterations, residual is $res"
    end
end

which displays:

Iteration 0: residual = 0.00011674564300540276
Iteration 1: residual = 3.909415504073306e-7

Note

  • out_TE[1].bulk_cor_mol is applied to the start bulk X_mol between all iterations

  • The objective of the while loop is to iterate until the residual defined as the difference of the norm of the bulk correction between two iteration decrease below the tolerance threshold tol = 1e-6

References

  • Watson, E. B., & Harrison, T. M. (1983). Zircon saturation revisited: temperature and composition effects in a variety of crustal magma types. earth and planetary science letters, 64(2), 295-304.

  • Bea, F., Fershtater, G., & Corretgé, L. G. (1992). The geochemistry of phosphorus in granite rocks and the effect of aluminium. Lithos, 29(1-2), 43-56

  • Boehnke, P., Watson, E. B., Trail, D., Harrison, T. M., & Schmitt, A. K. (2013). Zircon saturation re-revisited. Chemical Geology, 351, 324-334.

  • Crisp, L. J., & Berry, A. J. (2022). A new model for zircon saturation in silicate melts. Contributions to Mineralogy and Petrology, 177(7), 71.

  • Tollari, N., Toplis, M. J., & Barnes, S. J. (2006). Predicting phosphate saturation in silicate magmas: an experimental study of the effects of melt composition and temperature. Geochimica et Cosmochimica Acta, 70(6), 1518-1536.

  • Liu, Y., Samaha, N. T., & Baker, D. R. (2007). Sulfur concentration at sulfide saturation (SCSS) in magmatic silicate melts. Geochimica et Cosmochimica Acta, 71(7), 1783-1799.

  • O'Neill, H. S. C. (2021). The thermodynamic controls on sulfide saturation in silicate melts with application to ocean floor basalts. Magma redox geochemistry, 177-213.

  • Bockrath, C., Ballhaus, C., & Holzheid, A. (2004). Stabilities of laurite RuS2 and monosulfide liquid solution at magmatic temperature. Chemical Geology, 208(1-4), 265-271.