Axom is an open source project that provides robust and flexible software components that serve as building blocks for high performance scientific computing applications. A key goal of the project is to have different application teams co-develop and share general core infrastructure software across their projects instead of individually developing and maintaining capabilities that are similar in functionality but are not easily shared.
An important objective of Axom is to facilitate integration of novel, forward-looking computer science capabilities into simulation codes. A pillar of Axom design is to enable and simplify the exchange of simulation data between applications and tools. Axom developers emphasize the following principles in software design and implementation:
- Start design and implementation based on concrete application use cases and maintain flexibility to meet the needs of a diverse set of applications
- Develop high-quality, robust, high performance software that has well-designed APIs, good documentation, and solid testing
- Apply consistent software engineering practices across all Axom components so developers can easily work on them
- Ensure that components integrate well together and are easy for applications to adopt
The main drivers of Axom capabilities originate in the needs of multiphysics applications in the Advanced Simulation and Computing (ASC) Program at Lawrence Livermore National Laboratory (LLNL) . However, Axom can be employed in a wide range of applications beyond that scope, including research codes, proxy application, etc. Often, developing these types of applications using Axom can facilitate technology transfer from research efforts into production applications.
Axom software components are maintained and developed on the Axom GitHub Project.
While Axom is developed in C++, its components have native interfaces in C and Fortran for straightforward usage in applications developed in those languages. Python interfaces are in development.
Our current collection of components is listed here. The number of components and their capabilities will expand over time as new needs are identified.
- Inlet: Input file parsing and information storage/retrieval
- Klee: Shaping specification and implementation
- Lumberjack: Scalable parallel message logging and filtering
- Mint: Mesh data model
- Primal: Computational geometry primitives
- Quest: Querying on surface tool
- Sidre: Simulation data repository
- Slam: Set-theoretic lightweight API for meshes
- Slic: Simple Logging Interface Code
- Spin: Spatial index structures for managing and accelerating spatial searches
User guides and source code documentation are always linked on this site.
|Core||User Guide||Source documentation|
|Inlet||User Guide||Source documentation|
|Klee||User Guide||Source documentation|
|Lumberjack||User Guide||Source documentation|
|Mint||User Guide||Source documentation|
|Primal||User Guide||Source documentation|
|Quest||User Guide||Source documentation|
|Sidre||User Guide||Source documentation|
|Slam||User Guide||Source documentation|
|Slic||User Guide||Source documentation|
|Spin||User Guide||Source documentation|
Component Level Dependencies¶
Axom has the following inter-component dependencies:
- Core has no dependencies and the other components depend on Core
- Slic optionally depends on Lumberjack
- Slam, Spin, Primal, Mint, Quest, and Sidre depend on Slic
- Mint optionally depends on Sidre
- Inlet depends on Sidre, Slic, and Primal
- Klee depends on Sidre, Slic, Inlet and Primal
- Quest depends on Slam, Spin, Primal, Mint, and, optionally, Klee
The figure below summarizes these dependencies. Solid links indicate hard dependencies; dashed links indicate optional dependencies.
Other Tools Application Developers May Find Useful¶
The Axom team develops and supports other software tools that are useful for software projects independent of the Axom. These include:
- BLT CMake-based build system developed by the Axom team to simplify CMake usage and development tool integration
- Shroud Generator for C, Fortran, and Python interfaces to C++ libraries, and Fortran and Python interfaces to C libraries
- Conduit Library for describing and managing in-memory simulation data
Folks interested in contributing to Axom may be interested in our developer resource guides.
Communicating with the Axom Team¶
The most effective way to communicate with the Axom team is by using one of our email lists:
We also have the ‘Axom’ chat room on the LLNL Microsoft Teams server. This is open to anyone with access to the LLNL network. Just log onto Teams and join the room.