Relaxed Composite Class

class burnman.RelaxedComposite(composite, relaxation_vectors)[source]

Bases: Composite

A class implementing a relaxed Composite mineral assemblage. Unlike a standard Composite, the set_state() method of this class uses the burnman.equilibrate function to find the equilibrium phase fractions and compositions at given pressure and temperature. Once equilibrated, the thermodynamic properties of the relaxed composite can be queried in the same way as for a standard Composite.

One additional feature of this class is that properties related to the second derivatives of the Gibbs energy (e.g. compressibility, thermal expansivity, heat capacity) can be calculated taking into account relaxation of one or more user-defined isochemical reaction vectors via the relaxation_vectors argument to the constructor. If complete relaxation is desired, the user can pass relaxation_vectors=composite.reaction_basis. More limited relaxation can be specified by passing a linear subset of the reaction basis vectors.

For example, on short timescales,a composite of olivine and wadsleyite might be able to exchange Mg and Fe, even if no grain growth or reduction can occur. In this case, a single vector representing the exchange of Mg and Fe between the two minerals can be used to relax the composition at given P and T: relaxation_vectors=[[1, -1, -1, 1]], where the first two entries correspond to olivine (fo, fa) and the second two to wadsleyite (mwd, fwd). This is a subset of the full reaction basis, which would be: [[1, 0, -1, 0], [0, 1, 0, -1]].

Example:

from burnman import RelaxedComposite

# Create a standard Composite
# This is also where you would set the composition of
# the individual phases if desired.
unrelaxed_composite = Composite(...) # see Composite documentation

# Create a RelaxedComposite that reacts quickly relative to
# changes in pressure and temperature
composite = RelaxedComposite(
    unrelaxed_composite,
    relaxation_vectors=unrelaxed_composite.reaction_basis
)

# Set the state of the relaxed composite at 10 GPa and 1500 K
# This will equilibrate the composite at its current bulk
# composition.
composite.set_state(1.0e10, 1500.0)

# Now do the same but specifying a different bulk composition
bulk_composition = {'Mg': 0.8, 'Fe': 0.2, 'Si': 1.0, 'O': 4.0}
composite.set_state(1.0e10, 1500.0, bulk_composition=bulk_composition)

# Query thermodynamic properties as usual
K_T = composite.isothermal_bulk_modulus_reuss
Parameters:
  • composite (burnman.Composite) – The unrelaxed Composite material.

  • relaxation_vectors (list of lists or 2D array) – A list of isochemical relaxation vectors. Each vector should be a list or array with length equal to the number of endmembers in the composite. The number of vectors determines the number of degrees of freedom available for relaxation.