Alkali uptake by C-A-S-H (L'Hôpital et al. 2016)
Before this page
Validation against published data, whose section Alkali uptake by C-S-H compares the isotherms of Hong and Glasser (1999), on which the alkali end members of CSHQ were fitted.
L'Hôpital et al. (2016) synthesized C-A-S-H, with an Al/Si of 0.05, at six Ca/Si from 0.6 to 1.6, and three C-S-H without aluminum: 2 g of lime, silica fume and monocalcium aluminate in 90 mL of water or of a KOH or NaOH solution, from 0.01 to 0.5 mol/L, each sample equilibrated at 20 °C for 91, 182 or 364 days. They report the solutions, every element and the pH (their Appendix B), and the C-S-H, its Ca/Si and the alkali it took up, from the fall of the dissolved alkali (Appendix C). This page computes the same batches at equilibrium with the two models of the gel that carry the alkalis, and compares.
Which model was fitted to these data
The alkali end members of CSHQ (Kulik, 2011) were fitted on the isotherms of Hong and Glasser (1999) (Lothenbach et al., 2019; §2.7), not on these: for CSHQ the comparison is a prediction. CASH+NK was fitted on these very data, the NaOH series at 0.05 and 0.1 mol/L and the KOH series from 0.01 to 0.5 mol/L, among others (Miron et al., 2022; Table 4): for CASH+NK it checks that the model is applied as its authors fitted it.
1. The batches
The solids of each batch, in g per 90 mL of solution ((L'Hôpital et al., 2016; Appendix A)):
using ChemistryLab, DynamicQuantities, OptimaSolver, Printf
include(joinpath(pkgdir(ChemistryLab), "scripts", "lhopital2016_alkali.jl"))
mix = lh16_table("mixing_proportions")
println("Al/Si Ca/Si CaO, g SiO2, g CaO·Al2O3, g")
for i in eachindex(mix.CaO)
@printf("%5.2f %5.1f %7.3f %8.3f %10.3f\n", mix.Al_Si_target[i], mix.Ca_Si_target[i],
ustrip(us"g", mix.CaO[i]), ustrip(us"g", mix.SiO2[i]), ustrip(us"g", mix.CaO_Al2O3[i]))
endAl/Si Ca/Si CaO, g SiO2, g CaO·Al2O3, g
0.00 0.6 0.718 1.282 0.000
0.00 1.0 0.966 1.034 0.000
0.00 1.6 1.198 0.802 0.000
0.05 0.6 0.670 1.248 0.082
0.05 0.8 0.809 1.118 0.074
0.05 1.0 0.921 1.012 0.067
0.05 1.2 1.014 0.925 0.061
0.05 1.4 1.093 0.851 0.056
0.05 1.6 1.159 0.789 0.052
0.10 1.0 0.879 0.991 0.130Each batch is computed as it was prepared (lh16_state): the lime, the silica and the aluminate as the Cemdata18 records of the three solids, which dissolve, in 90 g of water with the hydroxide dissolved in it, at 20 °C. Beside the gel the system holds portlandite, amorphous silica and the calcium aluminate hydrates of Cemdata18, hydrogarnet and its siliceous member, strätlingite and microcrystalline gibbsite among them, for the aluminum neither gel takes. The activity model is the one the authors used to speciate their solutions, the extended Debye–Hückel equation of Cemdata18 with the ion size and the b_γ of the hydroxide of the batch (Lothenbach et al., 2019).
ASSUMED: the 90 mL of solution are 90 g of water; the hydroxide solutions are pure, where the potassium ones carry 0.1 to 3.5 mmol/L of sodium.
2. The two gels
CSHQ with the alkali end member of the hydroxide of the batch, KSiOH or NaSiOH, and CASH+NK (Miron et al., 2022) on cemdata18-cashplus.json, whose twelve end members carry both alkalis, without the neutral aqueous complexes of the alkalis, as its authors fitted it. The three times of one solution are three samples of one composition, which an equilibrium does not tell apart: each of the 49 compositions is computed once, each series of one Ca/Si walked down from its most concentrated solution, each solve starting from the last.
results = Dict{String, Any}()
for gel in ("CSHQ", "CASH+NK")
results[gel] = lh16_compute(gel)
end
batches = sort(collect(keys(results["CSHQ"])); by = b -> (b[3], b[2], b[1], b[4]))
for gel in ("CSHQ", "CASH+NK")
println(gel, ": ", length(results[gel]), " compositions, ",
count(b -> results[gel][b].certified, batches), " certified")
endCSHQ: 49 compositions, 49 certified
CASH+NK: 49 compositions, 49 certified3. The alkali the gel takes up
The alkali over silicon of the gel, computed over measured, in the batches whose every measurement is positive. Above Ca/Si 1.2 the gel takes up so little that the fall of the dissolved alkali, the measured quantity, is within its own error, and several measurements are negative.
println(" CSHQ CASH+NK")
for ca in (0.6, 0.8, 1.0, 1.2, 1.4, 1.6)
q, n = lh16_uptake_ratios(results["CSHQ"], ca), lh16_uptake_ratios(results["CASH+NK"], ca)
@printf("Ca/Si %.1f %5.2f to %5.2f %5.2f to %5.2f (%d batches)\n", ca,
minimum(q), maximum(q), minimum(n), maximum(n), length(q))
end CSHQ CASH+NK
Ca/Si 0.6 0.12 to 1.25 0.82 to 1.55 (7 batches)
Ca/Si 0.8 0.24 to 0.46 1.00 to 1.36 (5 batches)
Ca/Si 1.0 0.32 to 0.98 0.90 to 1.50 (8 batches)
Ca/Si 1.2 0.41 to 1.19 0.62 to 1.16 (5 batches)
Ca/Si 1.4 0.79 to 2.84 0.64 to 0.65 (2 batches)
Ca/Si 1.6 1.47 to 1.49 0.49 to 1.24 (2 batches)Every batch: the alkali over silicon of the gel, and the dissolved alkali and silicon
mean(x) = sum(x) / length(x)
println(" alkali/Si of the gel alkali, mmol/L Si, mmol/L")
println("Al/Si Ca/Si mol/L measured CSHQ CASH+NK measured CSHQ CASH+NK measured CSHQ CASH+NK")
for b in batches
b[3] == "none" && continue
m = lh16_measured(b, :alkali_Si)
a, s = lh16_measured_solution(b, b[3] == "NaOH" ? "Na" : "K"), lh16_measured_solution(b, "Si")
@printf("%4.2f %3.1f %-4s %5.2f %-19s %5.3f %5.3f %8.1f %6.1f %6.1f %8.3f %6.3f %6.3f\n",
b[1], b[2], b[3], b[4], join((@sprintf("%.3g", x) for x in m), " "),
results["CSHQ"][b].alkali_Si, results["CASH+NK"][b].alkali_Si,
isempty(a) ? NaN : mean(a), results["CSHQ"][b].alkali, results["CASH+NK"][b].alkali,
isempty(s) ? NaN : mean(s), results["CSHQ"][b].Si, results["CASH+NK"][b].Si)
end alkali/Si of the gel alkali, mmol/L Si, mmol/L
Al/Si Ca/Si mol/L measured CSHQ CASH+NK measured CSHQ CASH+NK measured CSHQ CASH+NK
0.00 0.6 KOH 0.50 0.23 0.287 0.356 453.0 451.3 433.4 38.000 66.512 50.819
0.05 0.6 KOH 0.01 0.031 0.032 0.032 0.004 0.031 2.6 9.2 4.0 4.267 10.746 6.189
0.05 0.6 KOH 0.05 0.13 0.15 0.16 0.028 0.120 15.0 44.5 25.8 13.667 31.345 26.654
0.05 0.6 KOH 0.10 0.27 0.25 0.28 0.058 0.223 43.3 89.2 56.7 29.000 40.209 36.479
0.05 0.6 KOH 0.25 0.26 0.33 0.142 0.311 185.0 225.6 191.9 34.000 55.841 44.007
0.05 0.6 KOH 0.50 0.24 0.27 -1.21 0.280 0.356 442.0 454.0 435.1 15.490 66.038 49.709
0.05 0.8 KOH 0.01 0.031 0.03 0.031 0.007 0.031 3.5 8.6 3.6 1.633 2.100 1.827
0.05 0.8 KOH 0.05 0.12 0.13 0.13 0.033 0.157 20.7 43.8 18.6 1.400 7.375 2.414
0.05 0.8 KOH 0.10 0.24 0.23 0.25 0.061 0.241 48.7 88.7 51.7 4.600 12.141 1.934
0.00 1.0 KOH 0.50 0.21 0.205 0.316 457.0 464.3 440.3 0.590 10.990 0.254
0.05 1.0 KOH 0.01 0.013 0.013 0.014 0.006 0.013 7.5 8.9 7.7 0.113 0.488 0.152
0.05 1.0 KOH 0.05 0.079 0.064 0.027 0.088 35.5 45.3 34.0 0.215 1.624 0.249
0.05 1.0 KOH 0.10 0.15 0.16 0.17 0.051 0.151 68.7 91.2 72.6 0.410 3.145 0.228
0.05 1.0 KOH 0.25 0.15 0.18 0.26 0.114 0.256 211.0 230.7 203.5 0.770 7.398 0.236
0.05 1.0 KOH 0.50 0.43 0.19 0.207 0.341 434.5 465.3 438.3 1.280 12.671 0.320
0.10 1.0 KOH 0.50 0.217 0.363 208.0 465.7 437.0 0.600 15.823 0.494
0.05 1.2 KOH 0.01 0.0037 0.0043 0.0052 0.005 0.003 9.2 9.2 9.5 0.030 0.224 0.048
0.05 1.2 KOH 0.05 0.03 0.018 0.021 0.028 46.0 46.7 45.5 0.065 0.427 0.073
0.05 1.2 KOH 0.10 0.092 0.095 0.1 0.039 0.065 82.7 93.9 89.4 0.210 0.758 0.098
0.05 1.2 KOH 0.25 0.068 -0.04 0.32 0.088 0.153 233.0 236.3 224.9 0.065 1.921 0.145
0.05 1.4 KOH 0.01 0.001 0.0014 0.0021 0.004 0.001 9.8 9.4 9.9 0.006 0.109 0.029
0.05 1.4 KOH 0.05 -0.006 -0.0076 -0.0079 0.014 0.007 51.0 48.1 49.0 0.009 0.114 0.037
0.05 1.4 KOH 0.10 0.031 0.034 0.026 0.021 95.0 96.5 97.0 0.029 0.140 0.054
0.00 1.6 KOH 0.50 0.048 0.070 0.060 493.0 491.4 491.7 0.040 0.083 0.099
0.05 1.6 KOH 0.01 -0.001 9.3e-05 0.0022 0.004 0.000 9.9 9.5 10.0 0.004 0.058 0.019
0.05 1.6 KOH 0.05 -0.014 0.0031 -0.008 0.010 0.002 51.3 48.8 49.8 0.008 0.051 0.020
0.05 1.6 KOH 0.10 0.012 0.016 0.0081 0.018 0.006 98.0 98.0 99.4 0.029 0.050 0.025
0.05 1.6 KOH 0.25 -0.11 0.063 0.040 0.025 234.3 245.4 247.0 0.041 0.063 0.053
0.05 1.6 KOH 0.50 -0.038 -0.34 -0.37 0.075 0.064 540.0 491.1 491.4 0.051 0.108 0.104
0.05 0.6 NaOH 0.05 0.11 0.14 0.1 0.035 0.102 22.3 43.2 29.6 19.667 30.580 30.240
0.05 0.6 NaOH 0.10 0.14 0.26 0.26 0.072 0.206 51.0 86.5 60.5 32.000 38.797 38.753
0.05 0.8 NaOH 0.05 0.12 0.15 0.11 0.040 0.141 21.7 42.3 22.1 4.100 6.959 3.576
0.05 0.8 NaOH 0.10 0.12 0.23 0.14 0.075 0.223 63.0 86.0 55.6 5.433 11.271 3.039
0.05 1.0 NaOH 0.05 0.077 0.1 0.067 0.033 0.073 33.0 44.2 36.7 0.440 1.528 0.358
0.05 1.0 NaOH 0.10 0.16 0.14 0.062 0.136 72.0 89.2 75.4 0.525 2.874 0.358
0.10 1.0 NaOH 0.50 0.256 0.358 NaN 460.8 440.0 0.680 13.495 0.982
0.05 1.2 NaOH 0.05 0.043 0.041 0.029 0.026 0.023 42.7 45.9 46.3 0.120 0.408 0.080
0.05 1.2 NaOH 0.10 0.11 0.079 0.048 0.059 83.5 92.5 90.5 0.195 0.699 0.119
0.05 1.4 NaOH 0.05 0.00063 0.011 -0.0088 0.017 0.008 50.0 47.6 48.9 0.024 0.112 0.037
0.05 1.4 NaOH 0.10 -0.14 0.038 0.0048 0.031 0.023 107.7 95.7 96.8 0.033 0.135 0.056
0.05 1.6 NaOH 0.05 -0.014 0.0055 -0.015 -0.018 0.013 0.003 51.3 48.5 49.7 0.014 0.051 0.020
0.05 1.6 NaOH 0.10 -0.17 0.019 -0.018 0.022 0.009 111.3 97.5 99.1 0.018 0.049 0.0254. The solution
The dissolved alkali, silicon and calcium, computed over the mean of the measured ones, as the smallest, the median and the largest of the batches, and the difference of pH; below and above Ca/Si 1.1, where the gel takes up the alkali and where it hardly does.
med(x) = sort(x)[cld(length(x), 2)]
span(x) = @sprintf("%5.2f %5.2f %6.2f", minimum(x), med(x), maximum(x))
println(" alkali Si Ca |ΔpH|")
println(" min median max min median max min median max median max")
for gel in ("CSHQ", "CASH+NK"), low in (true, false)
r = lh16_solution_ratios(results[gel]; low)
@printf("%-8s Ca/Si %s %s %s %s %4.2f %4.2f\n", gel, low ? "< 1.1" : "> 1.1",
span(r.alkali), span(r.Si), span(r.Ca), med(r.ΔpH), maximum(r.ΔpH))
end alkali Si Ca |ΔpH|
min median max min median max min median max median max
CSHQ Ca/Si < 1.1 1.00 1.34 3.60 0.21 2.52 26.37 0.19 2.41 30.75 0.13 0.97
CSHQ Ca/Si > 1.1 0.88 0.99 1.14 1.53 3.61 29.78 0.16 0.65 1.03 0.06 0.21
CASH+NK Ca/Si < 1.1 0.88 1.04 2.10 0.25 0.96 3.21 0.18 1.67 10.81 0.09 0.55
CASH+NK Ca/Si > 1.1 0.89 1.00 1.08 0.43 1.39 5.05 0.38 0.79 3.20 0.07 0.245. What the comparison says
CSHQ takes up too little alkali where the gel is poor in calcium. At a Ca/Si of 0.8 it takes up a quarter to a half of what was measured, at 0.6 and 1.0 as little as an eighth and a third; only in 0.5 mol/L KOH does it reach the measurement. This is the opposite of what CSHQ does on the isotherms it was fitted on, where it binds more than the gel did at 46 of 48 points (Validation against published data): its two alkali end members, fixed on one dataset, cannot follow both. The alkali it leaves in solution, at the median a third more than was measured below Ca/Si 1.1, raises the pH, by up to 0.6 in 0.05 mol/L KOH at Ca/Si 0.6. Above Ca/Si 1.1 the gel takes up little and CSHQ follows the dissolved alkali within 14 %. The largest difference of pH, 0.97, is the batch without alkali at Ca/Si 0.8, measured at 10.27, which CASH+NK misses by 0.55 as well.
CSHQ also dissolves too much silicon at a high pH, at the median 2.5 times the measurement below Ca/Si 1.1 and 3.6 times above, up to thirty times in the most concentrated hydroxides. The authors found the same with the same model (their Section 3.2, Fig. 10) and concluded that the model, built on alkali-free C-S-H, has to be extended to high pH.
CASH+NK reproduces the data it was fitted on. Its alkali over silicon is 0.62 to 1.55 times the measured one at every Ca/Si up to 1.2, within the error L'Hôpital et al. (2016) give the indirect method at high concentration, up to 100 %; the dissolved alkali is at the median the measured one, and the silicon within 4 % of it below Ca/Si 1.1 and 39 % above. The calcium is where both models differ most from the measurement, high below Ca/Si 1.1, by a factor of 2.4 at the median with CSHQ and 1.7 with CASH+NK, and low above.
For a user, the page draws the line this way: in a gel of a Portland cement, above Ca/Si 1.4, the two models take up the same small amount of alkali and give the same solution; in a gel poor in calcium, below a Ca/Si of about 1.1, the gel of a blend rich in silica fume, CSHQ underestimates the alkali the gel holds, and CASH+NK is the model whose alkali uptake was fitted there.
Where to go next
Aluminum uptake by C-S-H compares the companion syntheses without alkali, the aluminum taken by the gel. The models of the C-S-H gel lists the gels of the package and the databases they come from, and CEM II/B-V and CEM II/B-M (V-LL), with their CEM I, integrated in time runs CASH+NK in the pastes of a blended cement.