IGL

Isotope Geochemistry Language, a text format for isotopic process models



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

Specification

This describes IGL 0.5.

These pages are built from the same definitions the software checks your models against. If something is documented here, the tools accept it.

How a file is laid out

A model is a series of blocks. A block starts at the left margin, and everything belonging to it is indented underneath. Nothing has to be closed. A block ends where the next one starts.

BLOCK Name          <- starts at the left margin, may carry a name
    key value       <- indented, so it belongs to the block above
    key = expression
    # anything after a hash is a comment

Names have to be unique across the whole file. You cannot have a reservoir and a process both called Reduction. A path like Groundwater.Cr(VI).delta53Cr would then have two readings, and inventing a rule for which one wins seemed worse than refusing the file.

Words like species or process are only special where they appear. Nothing is reserved across the whole language. If you need a species called process, you can have one.

Profiles

IGL is bigger than any one program needs to support, so a profile says which part of it a program handles. Core is always available. The other two add blocks on top of it, one for source identification and one for the more experimental work.

ProfileBlocksWhich
core16CONDITIONS, DATABASE, EXPORT, FRACTIONATION, ISOTOPES, KINETICS, META, MODEL, OUTPUT, PARAMETERS, PROCESS, RESERVOIR, SPECIES, STANDARD, TITLE, UNITS
identification2IDENTIFY, SAMPLE
extended13ADSORPTION, DATASET, EXCHANGE, FIT, INITIAL, LAW, MONTE_CARLO, PHREEQC, PLOT, RAYLEIGH, REPORT, SENSITIVITY, SOLUTION

You can mix them. Asking for the identification profile still gives you all of Core. An identification needs isotopes and standards like any other model.

If a program meets a block from a profile it does not support, it stops and says so (IG005). It will not skip the block quietly. You would get numbers that look fine and come from half your model, and nothing on screen would tell you.

Names held in reserve

Eight block names are recognised but not yet defined: SOLUTION, INITIAL, DATASET, FIT, MONTE_CARLO, SENSITIVITY, PLOT and REPORT.

Holding a name back does two things. If you write one of these blocks today, nothing accuses you of having invented it, and in the meantime nobody can claim the name for something different.

You can write one of these today, but nothing inside it is checked and nothing reads it. The tools tell you so (IG011) rather than leave you to assume it worked.

Version numbers

Four numbers move independently, because they cover four things that change at different speeds.

WhatVersionCovers
The language0.5 What you can write in a model. Your file declares it with META language.
Prepared model file1.3 What an engine reads.
Results file1.1 What an engine writes.
Database format1.1 What a fractionation database holds.

As long as the first number is the same, a program ignores anything new it does not recognise. A field can then be added without breaking every existing reader. Change the first number and programs do have to be updated.