Skip to content

The enthalpy of a glass ​

The heat a paste releases is the fall of its enthalpy, and the enthalpy of a paste that still holds unreacted slag or fly ash includes that of their glass. A clinker phase has a formula and a database record; a glass has neither. This page builds the enthalpy of a glass from measurements on silicate glasses, and says at each step what is measured and what is assumed. The function is glass_enthalpy; its use in a recipe is in Recipes: materials, extents and what has not reacted.

1. What is measured ​

Two properties of silicate glasses have been measured on enough compositions to be used here.

The heat capacity. Below the glass transition, the heat capacity of a silicate glass is the sum of contributions of its oxides, each independent of the composition (Richet, 1987):

the mole fraction of oxide , with coefficients for eleven oxides fitted on 36 glasses, to about 1 % between 270 K and the glass transition.

The enthalpy of vitrification, , the enthalpy by which a glass exceeds its crystal of the same composition, from the difference of their enthalpies of solution in a calorimeter. At 298 K it is measured for six glasses near a slag's composition, compiled by Richet and Bottinga (1986), Richet and Bottinga (1984) and Navrotsky et al. (1980):

julia
using ChemistryLab, DynamicQuantities, Printf
for g in ChemistryLab._vitrification_enthalpies()
    @printf("%-19s %-11s ΔHv = %5.1f kJ/mol%s  (%s)\n", g.name, g.formula, g.dH_v / 1000,
            isnan(g.uncertainty) ? "       " : @sprintf(" ± %3.1f", g.uncertainty / 1000), g.key)
end
gehlenite           Ca2Al2SiO7  ΔHv =  49.8 kJ/mol ± 1.8  (RichetBottinga1986)
akermanite          Ca2MgSi2O7  ΔHv =  32.5 kJ/mol ± 1.5  (RichetBottinga1986)
pseudowollastonite  CaSiO3      ΔHv =  29.9 kJ/mol ± 2.8  (RichetBottinga1986)
anorthite           CaAl2Si2O8  ΔHv =  71.8 kJ/mol         (RichetBottinga1984)
diopside            CaMgSi2O6   ΔHv =  92.4 kJ/mol         (RichetBottinga1984)
silica              SiO2        ΔHv =   9.1 kJ/mol         (Navrotsky1980)

The crystal of CaSiO₃ is pseudowollastonite, the one the calorimetry used.

2. The construction ​

Write the analysis as moles of each oxide per gram. The CaO, MgO, Al₂O₃ and SiO₂ part is written as moles of the six measured glasses plus moles of oxide that no measured glass takes,

the moles of oxide in one formula of glass . Two assumptions are made. The glasses are mixed ideally, with no enthalpy of mixing. And the oxide left over is counted as its crystal, with an enthalpy of vitrification of zero. The are chosen to leave as little as possible to the second, that is to minimize . This is a linear program with four equations; its solutions are among the vertices of the polytope, the choices of four columns whose square system has a non-negative solution, and with ten columns there are 210 to try.

The enthalpy of formation of the glass is then

the oxides, the formation of each crystal from its oxides, and its vitrification. The bracket is taken within one database, aq17, which holds the six crystals and the four oxides: the enthalpy of forming a crystal from its oxides is consistent only when both come from the same assessment. The databases do not agree on the crystals themselves:

julia
aq = ChemistryLab._aq17_crystals()
slop = Dict(symbol(s) => s for s in build_species(datapath("slop98-inorganic-thermofun.json"); verbose = false))
H(sp) = ustrip(us"kJ/mol", sp[:ΔₐH⁰](T = 298.15u"K", P = 1.0e5u"Pa"; unit = true))
for (a, s) in (("Gehlenite", "Gh"), ("Akermanite", "Ak"), ("Anorthite", "An"), ("Diopside", "Di"), ("Corundum", "Crn"))
    @printf("%-11s aq17 %9.2f   slop98 %9.2f kJ/mol   difference %6.2f\n", a, H(aq[a]), H(slop[s]), H(aq[a]) - H(slop[s]))
end
Gehlenite   aq17  -3986.88   slop98  -3979.93 kJ/mol   difference  -6.95
Akermanite  aq17  -3866.36   slop98  -3876.46 kJ/mol   difference  10.10
Anorthite   aq17  -4233.48   slop98  -4215.60 kJ/mol   difference -17.88
Diopside    aq17  -3202.76   slop98  -3202.34 kJ/mol   difference  -0.42
Corundum    aq17  -1675.25   slop98  -1661.65 kJ/mol   difference -13.59

so the choice of database moves a glass by up to twenty kilojoules per mole of crystal, several times the uncertainty of its enthalpy of vitrification. The enthalpies of formation of the oxides themselves, , come from a reference the caller chooses, so that the glass can be put on the scale of the database of the calculation it enters; the oxides of the analysis other than the four, Fe₂O₃, Na₂O, K₂O, TiO₂, MnO, are counted as their crystals, with no enthalpy of vitrification (assumed). SO₃ has no crystal in the databases: it is counted as anhydrite less lime,   , the sulfate taken as bound to the lime of the glass as it is in a calcium sulfate, rather than as a free oxide. At a temperature other than 298.15 K, the heat capacity of section 1 is integrated, an oxide it does not cover taking that of its crystal, as Richet (1987) prescribes.

3. What ideal mixing leaves open ​

When several combinations leave the same amount of oxide over, ideal mixing should give them the same enthalpy, and the measured glasses do not. The composition Ca₃MgAl₂Si₄O₁₅ is anorthite plus akermanite, and also gehlenite plus diopside plus silica, and also half gehlenite, half anorthite, diopside and half pseudowollastonite; every combination with nothing left over lies between these three. Their enthalpies of vitrification are 104, 151 and 168 kJ per formula. The function returns the midpoint of the extremes and their half-difference as span:

julia
M(f) = ustrip(us"g/mol", Species(f)[:M])
mol = Dict("CaO" => 3, "MgO" => 1, "Al2O3" => 1, "SiO2" => 4)
Mf = sum(n * M(ox) for (ox, n) in mol)
g = glass_enthalpy(Dict(ox => n * M(ox) / Mf for (ox, n) in mol))
@printf("vitrification %.1f ± %.1f kJ per Ca3MgAl2Si4O15\n",
        ustrip(us"J/g", g.vitrification) * Mf / 1000, ustrip(us"J/g", g.span) * Mf / 1000)
vitrification 136.2 ± 31.9 kJ per Ca3MgAl2Si4O15

A span of 32 kJ per formula is large against the enthalpies of mixing measured between silicate glasses, which Richet and Bottinga (1986) find below about 5 kJ/mol near 1000 K. It is larger too than what Richet and Bottinga (1986) attribute to the fictive temperature of a glass, the temperature at which the supercooled liquid would have the configuration the glass kept (Richet, 2001; Sec. 6.4d, p. 153): an error of 100 K on it moves the enthalpy of a diopside or anorthite glass by about 10 kJ/mol. Two glasses of one composition whose fictive temperatures are and differ in enthalpy, below both, by

the heat capacity of a glass depending little on its history (Richet, 2001; Sec. 6.4d, Eq. (6.42), p. 153); a liquid cooled faster freezes at a higher temperature (Richet, 2001; Sec. 6.4b, p. 150), and, exceeding , the glass it gives holds more enthalpy. The six measurements were made on glasses of different thermal histories, by several laboratories, over half a century: the span is the measure of how far they can be combined, and it is reported rather than hidden in the midpoint.

4. What a slag gets ​

A blast-furnace slag holds more lime than the measured glasses can take: its alumina goes to gehlenite, its magnesia to akermanite, its remaining silica to pseudowollastonite, and some lime is left over, which no combination can avoid, so the combination is unique and the span zero. For the slag of Snellings et al. (2022):

julia
rows = literature_table("Snellings2022", "chemical_composition"; material = "GGBFS")
slag = Dict(String(o) => ustrip(p) / 100 for (o, p) in zip(rows.oxide, rows.percent) if o != "Total")
s = glass_enthalpy(slag; ignore = ("P2O5",))
for k in (:formation_298, :from_oxides, :vitrification, :uncertainty)
    @printf("%-14s %9.1f J/g\n", k, ustrip(us"J/g", getfield(s, k)))
end
@printf("lime left over: %.2f %% of the slag\n", 100 * s.unassigned["CaO"] * M("CaO"))
formation_298   -13376.0 J/g
from_oxides       -391.2 J/g
vitrification      156.8 J/g
uncertainty          5.8 J/g
lime left over: 2.58 % of the slag

The enthalpy of vitrification, about 160 J/g, is the part of the heat a slag can release that a crystalline assemblage of the same composition would not; its uncertainty, from the printed uncertainties of the three glasses, is a few joules per gram. The phosphorus of the analysis has no crystal in the reference databases and is left out by name (ignore), which the result reports.

5. What it does not give ​

The construction gives an enthalpy, which is what a heat needs. It does not give an entropy or a Gibbs energy. A glass is not in internal equilibrium: its residual entropy is the configurational entropy frozen at its fictive temperature, and it depends on the thermal history of the sample (Richet, 2001; Secs. 6.3a and 6.4d, pp. 144 and 153) (Absolute entropy and entropy of formation). Obtaining it takes the heat capacity of the glass down to a few kelvins, which Richet and Bottinga (1986), p. 16 and Table 5 report for silica, the feldspars and diopside, not for gehlenite, akermanite or pseudowollastonite; and no rule combines residual entropies the way section 2 combines enthalpies. The glass therefore cannot be a phase whose stability an equilibrium decides, and it enters a calculation as the residue of a constituent that reacts at a prescribed extent. For the same reason the enthalpy of vitrification is an upper bound to what the glass adds to the driving force of its dissolution,   : the heat capacities of a glass and of its crystal differ little (Richet, 2001; Sec. 4.3a, p. 72), so that is close to the residual entropy and positive, and a less stable form is the more soluble (Richet, 2001; Sec. 12.3d, p. 299). The fictive temperature of a granulated slag, quenched in water, is not known; a slag quenched faster than the measured glasses holds more enthalpy than section 2 gives it, by the integral of section 3, and section 3 gives the order of magnitude. And the glass of a siliceous fly ash, rich in silica and alumina, with potassium and iron, lies outside the measured glasses: its alumina has no measured glass to go to without lime, and it is left over as corundum, with the assumption that carries.