Axom provides a robust, flexible software infrastructure for the development of multi-physics applications and computational tools.

The Sidre component in Axom provides a data repository library for flexible, low-overhead, hierarchical organization of simulation data. Five concepts are embodied in Sidre classes:

  • Buffer is a container for data in memory.
  • View provides a virtual description of data referenced through a pointer (type, offset, stride) and access to that data.
  • Group is a node in a hierarchical tree structure for data. A group may contain any number of (child) Groups or Views.
  • DataStore is the central access point for a Sidre data hierarchy. It contains Buffers and a root Group.
  • Attribute holds metadata that apply to Views for selective processing of data.

Sidre also provides parallel I/O facilities via the IOManager class.

Work flow

Typically, an application code will

  • Create a DataStore object
    • Create a hierarchy of groups and views in the data store; the group and view hierarchy, once created, can be modified as needed by adding, destroying, moving, or copying groups and views within it
    • Describe data associated with views
    • Allocate data in buffers or in views directly (there are many ways to do this)
    • Create a set of attributes and associate attribute (and values) with views
  • Alternately, read in a data store hierarchy and data from an external source, such as a set of HDF5 files
  • Access groups and views in a hierarchy by name (path-like syntax is supported to access any group or view in a subtree of any group in the hierarchy)
  • Access a data pointer from a view to read or write data in memory
    • Pointers to external data allocations can also be managed
  • Save data in a group hierarchy files, such as an HDF5 archive
    • Save a subset of data in a group hierarchy; e.g., only the views with a specific attribute set
  • Delete the data store when done
    • This will also clean up data allocated via Sidre mechanisms; external data must be deallocated by user code