IGL

Isotope Geochemistry Language, a text format for isotopic process models



Describes IGL 0.5. Page revision 1.0, 2026-08-07.

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)fCr(VI) delta53CrCr(III) delta53Cr
01.0000000000.000000000none yet
1000.6065306601.751532144-2.699976435
3000.2231301605.263805399-1.511853957
6000.04978706810.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.