Published products based upon the ENKI software ecosystem are collected by this community group. ENKI provides a software framework for computational thermodynamics and fluid dynamics. It supports development and access to thermochemical models of Earth materials within a containerized Jupyter server platform via Python-based APIs, and establishes a standard infrastructure of software libraries that permit these models to be integrated into fluid dynamical transport codes. The ENKI framework defines a common API for thermodynamic model usage and standard protocols for model interoperability. ENKI streamlines the workflow for new model development and the process of updating existing models. It contains model parameter calibration methods, automated code generation modules, and visualization tools that transform the focus of this workflow from logistics to concept.
ENKI provides a software framework for computational thermodynamics and fluid dynamics. It supports development and access to thermochemical models of Earth materials within a containerized Jupyter server platform via Python-based APIs, and establishes a standard infrastructure of software libraries that permit these models to be integrated into fluid dynamical transport codes. The ENKI framework defines a common API for thermodynamic model usage and standard protocols for model interoperability. Previous to the ENKI project, commonly used geochemical, petrological, and fluid dynamical models were not interoperable; they were difficult to use, required a specialist to maintain, and were not generally available on all computing platforms. A significant advance is that ENKI has transformed the focus in using these models from running an app with a single purpose to calling appropriate software resources from a framework. This enhances flexibility of use and liberates users from tailoring their research objectives to the output of a particular model.
In addition to making commonly used modeling tools available on a centralized platform, ENKI streamlines the workflow for new model development and the process of updating existing models. It contains model parameter calibration methods, automated code generation modules, and visualization tools that transform the focus of this workflow from logistics to concept. Traditional model development workflows are error prone, tedious, and require considerable expertise in code development. They are difficult to replicate and time intensive; typical projects require months to years to complete. The ENKI workflow involves symbolic model specification using the SymPy Python package (Meurer et al., 2017), with model structure documented in a Jupyter notebook. The software framework automatically performs symbolic differentiation to generate a full thermodynamic specification, transforms the symbolic results to code (C or C++), compiles and wraps this code in Cython, and delivers the resulting module back to the framework. Because the generated code has a standardized API, it is immediately available for integration into the framework to utilize existing calibration, phase equilibrium, and visualization tools. It may also be integrated as libraries for materials property evaluation in fluid dynamics simulations. The ENKI model development workflow requires less coding expertise, is less error prone, may be easily replicated, and requires far less development time.
The ENKI software framework is maintained in the ThermoEngine public repository at GitLab. The Python framework contains the modules in the following table:
calibrate - Provides methods for supporting thermodynamic model calibration using modern Bayesian statistical methods; provides tools to interface with properties and experimental phase equilibrium databases; implements an architecture for replicable calibration, and provides visualization and statistical tools for calibration assessment |
coder - Provides methods for construction of thermodynamic models using symbolic mathematical expressions and for automated generation of expressions for derivative thermodynamic properties and for source code implementation; generates C code for inclusion in the phases module and C++ code for generation of computational libraries that support fluid dynamical modeling software |
core - Provides an interface to our legacy objective-C code base and implements generic compositional transformation routines |
equilibrate - Provides methods that implement equilibrium calculations, including generic equilibrium calculators for Gibbs free energy, Helmholtz free energy, enthalpy and entropy minimization as well as open system calculations; MELTS; speciation models (DEW); equilibrium calculators for systems missing an omnicomponent phase; phase diagram and pseudo section generators |
graphics - Provides methods for graphical display of properties and phase diagrams |
model - Provides methods for loading legacy databases and coder generated model implementations; convenience methods for accessing reaction-based functions; integrated with the phases module |
phases - Provides methods implementing a uniform standardized API for accessing thermodynamic properties of pure phases and solution phases; tightly integrated with the model and coder modules |
In addition to the Python software framework, the repository contains C/C++/FORTRAN code that can be compiled for rapid execution of existing models, extensive user documentation, and numerous Jupyter notebooks that illustrate API usage and modeling workflows.