What IGL is
IGL is a plain text language for describing isotopic processes: reservoirs, fractionation factors, kinetics, and the model that runs over them. A model is one file. It is readable without the software that produced it, it survives in version control, and it means the same thing to every conforming engine.
IGL is a specification first. The igl toolchain is the reference
implementation, not the definition. Anyone may write another one, and the
conformance suite exists to settle the
question of whether they did.
A complete model
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
$ igl check model.igl no diagnostics $ igl build model.igl model.iglir.json $ igl run model.iglir.json model.results.json
The residual composition of that run is +3.212165544 permil and the cumulative product is -2.141443696. Both follow from the closed form of Rayleigh distillation, which is why the model above is also a test: an engine that disagrees with those digits is wrong, and the disagreement can be traced without arbitration.
Three properties the design is built around
One file, no project
A model carries its own reservoirs, its own species, its own factors and its own stopping condition. There is no workspace to reconstruct and no database connection to restore. A file mailed to a reviewer runs.
An absence is visible
A value that could be plausible and wrong is left out instead. A composition that does not exist yet is absent rather than zero, a database that answers a query two ways is an error rather than a choice, and a construct this implementation does not read says so. The alternative is a results file that is correct for a model nobody wrote.
The boundary is published
What an engine consumes is a model.iglir.json and what it produces
is a results.json. Both are
specified and versioned independently of the
language, so a second implementation can be written against a document rather
than against this one's source.
Where to start
- The specification, for what the language is.
- The block reference, for what a model may contain.
- The command line tool, for checking, building and running one.
- Download, for Windows and Linux binaries.
- The fractionation databases, for factors with their citations.