Distribution coefficients#

High-Temperature Geochemistry Volcanism and Internal Processes

The distribution of a trace element, for example between a solid mineral phase and a liquid magma phase, can be quantified using a distribution (partition) coefficient (\(K_D\)):

\[K_{D} = \frac{C_{solid}}{C_{liquid}}\]

where \(C_i\) is the concentration of a particular element.

  • Elements with \(K_D>1\) are compatible in a certain solid phase (they prefer to be in the solid/mineral, i.e. will be depleted in the liquid/melt).

  • Elements with \(K_D<1\) are incompatible in a certain solid phase (they prefer to be in the liquid/melt).

  • Elements with \(K_D<<1\) (\(K_D < 0.01\) or so) are termed highly incompatible in a certain solid phase.

The compability of an element depends on the charge and/or size of its ion - compatible ions tend to have a size fitting well in the crystal structure of a mineral. Elements show different compatibilities in different mineral phases.

\(K_D\) values are most readily determined by trace element analyses of silicate liquids that are in equilibrium with individual mineral phases (phenocrysts, e.g., ol, plag, cpx, etc).

  • Need to make sure that equilibrium assemblages are used!

  • Suitable equilibrium systems can be either natural samples (basaltic rock w/ phenocysts) or they are produced in laboratory experiments (experimental petrology)

  • The analyses commonly utilize in-situ analytical techniques (electron or ion microprobe, LA-ICPMS).

Rocks typically consist of more than one mineral phase. Hence, during partial melting of such a rock, several phases participate in the melting reactions. The degree to which an element is distributed between the liquid and the solid phases depends on the sum of the individual partition coefficients, weighed according to the relative proportions of the mineral phases present in the solid. The bulk distribution coefficient \(D\) of a specific element is therefore defined as:

\[D_{s/l} = \sum_i f_i K_{D,i}\]

where \(f\) is the mass fraction of a specific mineral i in a rock.

# import relevant modules

%matplotlib inline
import numpy as np
import pandas as pd
from IPython.display import display
from math import log10, floor
# create our own functions

# function to round a value to a certain number of significant figures
def round_to_n_sf(value, no_of_significant_figures):
    value_rounded = round(value, no_of_significant_figures-1-int(floor(log10(abs(value)))))
    if value_rounded == int(value_rounded): 
        value_rounded = int(value_rounded)
    return value_rounded

Problem Set 1 - Question 2#

Based on the \(K_D\) values given in the handout, calculate the bulk rock/melt distribution coefficients \(D\) of \(Rb\) and \(Sm\) for a spinel and garnet peridotite with the following mineral modes:

# create a dataframe to show the proportions of minerals in each rock
minerals = ["Olivine", "Orthopyroxene", "Clinopyroxene", "Spinel", "Garnet"]
percents_in_spinel_peridotite = [66, 24, 8, 2, 0]
percents_in_garnet_peridotite = [63, 30, 2, 0, 5]

dict1 = {'' : minerals,
        'Spinel Peridotite (%)' : percents_in_spinel_peridotite,
        'Garnet Peridotite (%)' : percents_in_garnet_peridotite}
df1 = pd.DataFrame(dict1)
print("Table 1: The proportions of minerals in spinel peridotite and garnet peridotite.")
display(df1.style.hide_index())

# create a dataframe to show the distribution coefficients of some elements in some minerals acquired from the handout
minerals = ["Olivine", "Orthopyroxene", "Clinopyroxene", "Spinel", "Garnet"]
KD_Rb = [4*10**-5, 0.005, 0.003, 5*10**-4, 0.007]
KD_U = [2*10**-5, 0.001, 0.01, 0.001, 0.006]
KD_Pb = [0.008, 0.01, 0.01, None, 1*10**-4]
KD_Sr = [6*10**-5, 0.005, 0.16, 5*10**-4, 0.01]
KD_Nd = [1*10**-4, 0.01, 0.28, 6*10**-4, 0.36]
KD_Sm = [4*10**-4, 0.02, 0.46, 5*10**-4, 1.1]
KD_Cr = [0.6, 2, 4, 200, 0.5]
KD_Ni = [8, 4, 3, 10, 0.4]

dict2 = {'' : minerals,
        'Rb' : KD_Rb,
        'U' : KD_U,
        'Pb' : KD_Pb,
        'Sr' : KD_Sr,
        'Nd' : KD_Nd,
        'Sm' : KD_Sm,
        'Cr' : KD_Cr,
        'Ni' : KD_Ni}
df2 = pd.DataFrame(dict2)
elements = ['Rb', 'U', 'Pb', 'Sr', 'Nd', 'Sm', 'Cr', 'Ni']
for e in elements:
    df2.loc[:, e] = df2[e].map('{:.1e}'.format)
print("Table 2: The distribution coefficients of some elements in some minerals.")
display(df2.style.hide_index())
Table 1: The proportions of minerals in spinel peridotite and garnet peridotite.
Spinel Peridotite (%) Garnet Peridotite (%)
Olivine 66 63
Orthopyroxene 24 30
Clinopyroxene 8 2
Spinel 2 0
Garnet 0 5
Table 2: The distribution coefficients of some elements in some minerals.
Rb U Pb Sr Nd Sm Cr Ni
Olivine 4.0e-05 2.0e-05 8.0e-03 6.0e-05 1.0e-04 4.0e-04 6.0e-01 8.0e+00
Orthopyroxene 5.0e-03 1.0e-03 1.0e-02 5.0e-03 1.0e-02 2.0e-02 2.0e+00 4.0e+00
Clinopyroxene 3.0e-03 1.0e-02 1.0e-02 1.6e-01 2.8e-01 4.6e-01 4.0e+00 3.0e+00
Spinel 5.0e-04 1.0e-03 nan 5.0e-04 6.0e-04 5.0e-04 2.0e+02 1.0e+01
Garnet 7.0e-03 6.0e-03 1.0e-04 1.0e-02 3.6e-01 1.1e+00 5.0e-01 4.0e-01
# Question 2
# create a function to calculate the bulk distribution coefficient of an element in a rock
# make sure the orders of values for each mineral are correct
def bulk_distribution_coefficient_calculator(minerals_percentages_list, KD_list):
    minerals_percentages_array = np.array(minerals_percentages_list)
    KD_array = np.array(KD_list)
    D = np.sum(minerals_percentages_array/100*KD_array)
    if D >= 1: Compatibility = "compatible"
    else: 
        if D < 0.01: Compatibility = "highly incompatible"
        else: Compatibility = "incompatible"
    return D, Compatibility


D_Rb_in_spinel_peridotite = bulk_distribution_coefficient_calculator(percents_in_spinel_peridotite, KD_Rb)
D_Rb_in_garnet_peridotite = bulk_distribution_coefficient_calculator(percents_in_garnet_peridotite, KD_Rb)
D_Sm_in_spinel_peridotite = bulk_distribution_coefficient_calculator(percents_in_spinel_peridotite, KD_Sm)
D_Sm_in_garnet_peridotite = bulk_distribution_coefficient_calculator(percents_in_garnet_peridotite, KD_Sm)
print("The bulk distribution coefficient of Rb for a spinel peridotite is %g, meaning that Rb is %s in spinel peridotite." \
      % (round_to_n_sf(D_Rb_in_spinel_peridotite[0], 2), D_Rb_in_spinel_peridotite[1]))
print("The bulk distribution coefficient of Rb for a garnet peridotite is %g, meaning that Rb is %s in garnet peridotite." \
      % (round_to_n_sf(D_Rb_in_garnet_peridotite[0], 2), D_Rb_in_garnet_peridotite[1]))
print("The bulk distribution coefficient of Sm for a spinel peridotite is %g, meaning that Sm is %s in spinel peridotite." \
      % (round_to_n_sf(D_Sm_in_spinel_peridotite[0], 2), D_Sm_in_spinel_peridotite[1]))
print("The bulk distribution coefficient of Sm for a garnet peridotite is %g, meaning that Sm is %s in garnet peridotite." \
      % (round_to_n_sf(D_Sm_in_garnet_peridotite[0], 2), D_Sm_in_garnet_peridotite[1]))
The bulk distribution coefficient of Rb for a spinel peridotite is 0.0015, meaning that Rb is highly incompatible in spinel peridotite.
The bulk distribution coefficient of Rb for a garnet peridotite is 0.0019, meaning that Rb is highly incompatible in garnet peridotite.
The bulk distribution coefficient of Sm for a spinel peridotite is 0.042, meaning that Sm is incompatible in spinel peridotite.
The bulk distribution coefficient of Sm for a garnet peridotite is 0.07, meaning that Sm is incompatible in garnet peridotite.

References#

  • Lecture slide and Practical for Lecture 1 of the High-Temperature Geochemistry module

  • Lecture slide for Lecture 4 of the Volcanism and Internal Processes module