Axom

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

Axom software components are maintained and developed on the Axom GitHub Project.

Note

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

  • Multimat: Managing multimaterial field data

  • 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

Documentation

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

Multimat

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 depends on Slam, and optionally Sidre

  • Multimat depends on Slic, and Slam

  • 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.

digraph dependencies {
  quest -> {slam primal mint spin};
  quest -> klee [style="dashed"];
  {inlet klee mint primal quest slam spin} -> {slic core};
  mint -> slam
  mint -> sidre [style="dashed"];
  multimat -> {slic slam};
  spin -> {slam primal};
  sidre -> {slic core};
  slic -> core;
  slic -> lumberjack [style="dashed"];
  lumberjack -> core;
  inlet -> {sidre primal};
  klee -> {sidre primal inlet};
}

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

Developer Resources

Folks interested in contributing to Axom may be interested in our developer resource guides.

Communicating with the Axom Team

Mailing Lists

The most effective way to communicate with the Axom team is by using one of our email lists:

Chat Room

We also have the ‘Axom Users’ 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.