Skip to content
FastChem logo

FastChem

VULCAN uses FastChem to set up the initial chemical composition of the atmosphere before the kinetics calculation begins. This page gives a short overview of what FastChem is, how it works, and how it is integrated into VULCAN.

PROTEUS fork

A separate fork of FastChem, used elsewhere in the PROTEUS framework (e.g. by AGNI), is maintained at FormingWorlds/FastChem. VULCAN currently relies on its own embedded copy of FastChem, adapted from FastChem 2.0, rather than this fork. VULCAN may switch to the PROTEUS fork in a future release.

What is FastChem?

FastChem is an open-source equilibrium chemistry code developed by Daniel Kitzmann, Joachim W. Stock and collaborators. It computes the chemical equilibrium composition of a gas given a temperature, a pressure, and a set of elemental abundances.

Rather than performing a direct Gibbs free energy minimisation, FastChem solves the coupled system of equations formed by the law of mass action for every molecule/ion together with the element conservation equations. This system is decomposed into a series of one-dimensional non-linear equations which are solved analytically wherever possible and iterated until the whole system converges. This semi-analytical approach makes FastChem fast and numerically robust, even at the low temperatures and high pressures typical of rocky-planet atmospheres.

FastChem is written in object-oriented C++, with a Python wrapper (pyFastChem) for scripting, and is released under the GNU General Public License v3.0.

Versions

FastChem has been developed through several major versions, each documented in its own paper:

  • FastChem 1 (Stock et al. 2018): the original release, solving the gas-phase equilibrium for neutral and ionised species. It required hydrogen to be present as a reference element.
  • FastChem 2 (Stock et al. 2022): generalised the formalism so that it no longer relies on hydrogen as a reference element, allowing it to be applied to arbitrary (even hydrogen-free) element mixtures. This version also introduced the pyFastChem Python interface, distributed via PyPI.
  • FastChem Cond (Kitzmann, Stock & Patzer 2024): added equilibrium condensation and a rainout approximation, together with thermochemical data for roughly 290 condensate species, enabling cloud-relevant chemistry for cool planets and brown dwarfs.
  • FastChem 4 (Kitzmann, Stock & Patzer 2026): a major update focused on robustness and coverage. The thermochemical database is expanded to 800 gas-phase molecules/ions and 511 condensates across 44 elements, adding rare-earth, transition, and heavy elements such as Sc, Y, Ba, and Li.

How VULCAN uses FastChem

VULCAN ships with its own bundled, modified copy of FastChem in the fastchem_vulcan/ directory. This version is based on the FastChem 2.0 formalism (arbitrary element compositions), but has been adapted so that its equilibrium constants are computed from the same NASA-9 polynomial thermochemical data that VULCAN itself uses for the chemical kinetics network. This keeps the equilibrium initial state and the kinetics network thermodynamically consistent with one another.

Before running VULCAN for the first time, this bundled copy of FastChem must be compiled with a C++ compiler:

cd fastchem_vulcan/
make

Relevant configuration options

config.py option Description
ini_mix = 'eq' Use FastChem to compute the initial composition (default). Other options (const_mix, vulcan_ini, table) bypass FastChem entirely.
use_solar If True, use solar elemental abundances (Lodders 2009) as-is. If False, use the custom abundances below.
O_H, C_H, N_H, S_H, He_H, ... Elemental abundance ratios (relative to H) for the elements in atom_list, used when use_solar = False.
fastchem_met_scale Scaling factor applied to the solar abundances of elements known to FastChem but not tracked by the VULCAN network (e.g. Si, Mg, Ti). A value of 0.1 gives these elements 0.1x solar abundance.
use_ion Whether ionised species are included in the equilibrium calculation (selects parameters_ion.dat vs parameters_wo_ion.dat).
atom_list The set of elements tracked by the active chemical network; determines which elemental abundances are passed through to FastChem individually.

Acknowledgements and citation

If you use VULCAN, please also acknowledge FastChem. Depending on which aspects of FastChem are relevant to your work, cite some or all of the papers listed on the publications page.

The FastChem source code is hosted at github.com/NewStrangeWorlds/FastChem and is released under the GNU General Public License v3.0, the same licence used by VULCAN.