What IGL is
IGL is a way of writing an isotopic model as plain text. You describe the reservoirs, the species, the fractionation factors, how the reaction proceeds, and what you want to see. That description is a file, and the file is the model. IGL does not replace classic geochemistry softwares or Domain Specific Languages (DSL) such as PHREEQC. Instead, its aim is to extend their abilities. IGL is fully compatible with PHREEQC, but they are not a requirement for IGL to fully work.
Written this way, a model carries all information needed to replicate, explain and justify your isotope calculations. You can email it, use it in publication or store it for years. Without any software, the reader is able to read and understand your choices and redo all the calculation by themselves.
A model, start to finish
TITLE
Chromium reduction in a closed system
META
author "Colin Ferrari"
language 0.5
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)
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
extent 0.6
FRACTIONATION Reduction
isotope 53Cr/52Cr
epsilon -3.5
MODEL Closed
progress extent
processes [ Reduction ]
OUTPUT
variable Groundwater.Cr(VI).delta53Cr
variable Groundwater.Cr(III).delta53Cr
Three commands take it from there:
$ igl check model.igl no diagnostics $ igl build model.igl model.iglir.json $ igl run model.iglir.json model.results.json
That run leaves the remaining Cr(VI) at +3.212165544 permil and the Cr(III) that formed at -2.141443696. Both numbers come straight out of the Rayleigh equation, so you can check them by hand. Exact replication was one of the requirements when IGL was designed. Each exact model files must give the same result, down to the bit. Therefore, significant figures are not a decoration or a lack of rigor, they are a necessity to prove that the results are rigorously the same, which a rounded figure could not demonstrate.
What the design is trying to protect
Everything in one place
A model states its own reservoirs, its own species, its own factors, and where it stops. There is no project to reopen and no settings to restore. A file someone sends you runs. Nothing depending on the modeller's computer is stored in the IGL file. Path to the databases or to the PHREEQC binary are always stored at the engine level, which are not sharable.
Nothing quietly filled in
IGL will never guess or make asumptions. If the data provided to the model are not enough to solve a calculation, then IGL notifies you clearly. A pool that has not formed yet has no composition at all, rather than a composition of zero. Ask a database a question it answers two ways and the run stops, instead of one of the two being chosen for you. And where the software cannot do something your model asks for, it tells you rather than passing over it.
Anyone can write their own engine
What a calculation engine reads and what it writes are both described in public documents, kept separate from the language and from this implementation. Someone who wants to build their own engine works from those documents, not from our source code, and the test suite settles whether it agrees.
Where to start
- The specification, for how a model is put together.
- The block reference, for everything a model can contain.
- The igl tool, for checking and running one.
- Downloads for Windows and Linux.
- The fractionation databases, with a citation on every value.