Worked examples
Each of these is a complete model file and can be directly copied and pasted in IGLi.
Rayleigh distillation with a rate law
A closed reservoir whose Cr(VI) is reduced at a steady rate. Nothing here is meant to model a real site, it is for example purpose only.
TITLE
Rayleigh distillation, driven by first-order kinetics
META
language 0.5
UNITS
time d
STANDARD
standard NIST-SRM-979 0.11339 ratio 53Cr/52Cr
ISOTOPES
ratio 53Cr/52Cr standard NIST-SRM-979
SPECIES
species Cr(VI)
species Cr(III)
PARAMETERS
k_red = 0.005 1/d
RESERVOIR Groundwater
volume 1 L
Cr(VI) 1 umol/kgw
delta53Cr 0 permil
PROCESS Reduction
type reduction
reactant Cr(VI)
product Cr(III)
location Groundwater
FRACTIONATION Reduction
isotope 53Cr/52Cr
epsilon -3.5
KINETICS Reduction
rate first_order
constant k_red
MODEL Decay
progress time
step 1 d
until time >= 600 d
OUTPUT
variable time
variable Groundwater.Cr(VI).remaining
variable Groundwater.Cr(VI).delta53Cr
variable Groundwater.Cr(III).delta53Cr
every 5 d
With f = exp(-kt) and a = 1 + epsilon/1000, the
remaining Cr(VI) sits at 1000 ((1 + d0/1000) f^(a-1) - 1), and the
Cr(III) that has accumulated follows from mass balance.
| t (d) | f | Cr(VI) delta53Cr | Cr(III) delta53Cr |
|---|---|---|---|
| 0 | 1.000000000 | 0.000000000 | none yet |
| 100 | 0.606530660 | 1.751532144 | -2.699976435 |
| 300 | 0.223130160 | 5.263805399 | -1.511853957 |
| 600 | 0.049787068 | 10.555318445 | -0.553053262 |
The reservoir as a whole stays at zero the entire time, since nothing enters or leaves it. Check that separately. A run can get every individual composition right and still drift, and a drift means mass balance has gone somewhere.
Equilibrium is not distillation Run the same reaction to the same extent, with the same factor, and the two laws disagree. The gap opens as the reaction proceeds. regime equilibrium is what selects the closed-system equation. Leave it out and the model runs Rayleigh. Fraction remaining Rayleigh Equilibrium Ratio 0.90 -0.036 -0.034 1.05 0.50 -0.236 -0.170 1.39 0.20 -0.547 -0.272 2.01 0.10 -0.783 -0.306 2.56 Fit an adsorption experiment with the wrong law, and by the time nine tenths has adsorbed the factor you recover is two and a half times too large. Early on, the two agree to within analytical error. That is why the substitution goes unnoticed for so long: nothing in the numbers points at it until the reaction has run a long way. A factor taken from a database No fractionation factor appears in this model. It comes from a database, and the results file names the study it came from. DATABASE file "cr_53cr_52cr.igdb" CONDITIONS temperature 15 C pH 7.0 PROCESS Oxidation type oxidation reactant Cr(III) product Cr(VI) from Soil into Groundwater extent 0.6 Three entries match. Two of them state a pH range that excludes 7.0 and one states a range that includes it, so the conditions settle it. Had all three survived, the run would have stopped and named all three. A database that gives two answers has not decided, and neither should the software. Chemistry from PHREEQC PHREEQC does the speciation, IGL does the isotopes. The PHREEQC file stays an ordinary PHREEQC file: it still runs on its own, and IGL never writes into it. PHREEQC Speciation input file "groundwater.pqi" database "minteq.v4.dat" mode series export "pH" to water_ph FRACTIONATION Reduction isotope 53Cr/52Cr law epsilon = -3.5 + 0.25 * water_ph mode series keeps every state PHREEQC recorded. When the model asks for the exported value at a given time, it gets the last state at or before that time, and that value holds until the next one. Nothing is interpolated. A straight line between two states claims a path PHREEQC never reported, and if you could guess that path you would not need PHREEQC.