Axom

Axom is a project in WCI/WSC that is funded by ECP/ATDM. Its principal goal is to provide a collection of robust and flexible software components that serve as building blocks for LLNL simulation tools. The emphasis is on sharing core infrastructure software amongst applications rather than having different codes develop and maintain similar capabilities.

A key objective of Axom is to facilitate integration of novel, forward-looking computer science capabilities into LLNL simulation codes. Thus, a central function of Axom is to enable and simplify data exchange between applications and tools that Axom provides. To meet these objectives, developers of Axom components emphasize the following features in software design and implementation:

  • Flexibility to meet the needs of a diverse set of applications
  • High-quality, with well designed APIs, good documentation, tested well, high performance, etc.
  • Consistency in software engineering practices
  • Integrability so that components work well together and are easily adopted by applications

The main drivers of the Axom project are to:

  • Provide the CS infrastructure foundation of the ECP/ATDM multi-physics application at LLNL
  • Support current ASC and other production applications and as they continue to evolve
  • Provide capabilities for LLNL research codes, proxy apps, etc. that simplify technology transfer from research efforts into production applications

Components

  • Inlet: Input deck parsing and information storage/retrieval
  • 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 indexes

Component Level Dependencies

Dependencies between components are as follows:

  • 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
  • Quest depends on Slam, Spin, Primal, and Mint
  • Inlet depends on Sidre, and Slic

The figure below summarizes the dependencies between the components. Solid links indicate hard dependencies; dashed links indicate optional dependencies.

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

Other Tools Application Developers May Find Useful

Axom developers support other tools that can be used by 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 native C and Fortran APIs from C++ code
  • Conduit: Library for describing and managing in-memory data structures

Developer Resources

Communicating with the Axom Team

Mailing Lists

The project maintains two email lists:

Chat Room

We also have a chat room on LLNL’s Microsoft Teams called ‘Axom’. They open to anyone on the LLNL network. Just log onto Teams and join the room.

Git repository and Issue Tracking

The main interaction hub for Axom is on Github