Skip to content

Releases: llnl/axom

Axom-v0.13.0

05 Feb 23:21
d00f6c6

Choose a tag to compare

Please download the Axom-v0.13.0.tar.gz tarball below, which includes all of the
submodules needed to build Axom. The AxomData-v0.13.0.tar.gz tarball contains
extra files to put in the data directory only if you want to run certain
Axom tests.

Added

  • Adds the AXOM_ENABLE_TUTORIALS configuration variable (ON by default)
  • Adds a tutorial on shaping in Axom and associated infrastructure in quest, klee, inlet and sidre.
  • Sina: User can control curve ordering in Sina output file setDefaultCurveOrder()
  • Sina: appendDocument() will create the document if not present or append if document exists.
    It can also auto detects the protocol based on file's name, removing the need to call
    the append function that matches your protocol.
  • Adds Sina fortran functions sina_set_curves_order and sina_set_record_curves_order
  • Sidre: Added iterators and Attribute class to the Python interface.
  • Adds new optimization hint macros AXOM_LIKELY and AXOM_UNLIKELY to mark likely/unlikely
    paths in if-statements.
  • The axom::bump::extraction::CutField class was added to cut Blueprint geometry using a
    field (isosurface). The output contains polygons for 3D inputs and lines for 2D inputs.
    resulting in geometry with reduced topological dimension.
  • The axom::bump::extraction::PlaneSlice class was added to cut Blueprint geometry using a
    plane given using "origin" and "normal" values in the algorithm's options. The planar slice
    results in polygons for 3D inputs and lines for 2D inputs.
  • Adds a reader for STEP files to quest/io. The geometry can either be returned
    as an array of NURBSPatch with trimming curves or it can be triangulated into triangle mesh.
  • Adds a components variant to Axom's spack package. Users can now provide an explicit list
    of desired components, e.g. components=sidre and Spack adds any missing dependencies,
    e.g. the slic component and the conduit dependency. By default (when components is not provided,
    or when components="all"), all components are enabled. All components can be disabled via components=none.
  • Adds a conduit spack variant. Conduit was previously a required dependency in our spack package, and is now enabled by default.
  • Adds spack variants for adiak and caliper. These replace the previous profiling variant which enabled both at the same time.
  • Adds the AXOM_TEST_NUM_OMP_THREADS configuration variable to control the default OpenMP thread count for tests.
  • Slic: Adds slic::getAbortFunction() to return a function pointer to the abort handler called during logging functions
  • Quest: Adds a 3D winding number example and improves WN performance in 2D and 3D
  • Sidre: Added AXOM_SIDRE_IO_USE_SCALAR_STATE_STRING (default ON) to optionally serialize scalar views
    with state "SCALAR" instead of "TUPLE" for compatibility with downstream readers (e.g. VisIt)
    that don't yet support "TUPLE". We expect to remove this in the future as readers adopt the "TUPLE" type.

Changed

  • Version of quest::discretize that approximates a surface-of-revolution from a polyline
    now respects the allocator ID of the output Array. It no longer resets the ID to the
    execution space default.
  • Updates to RAJA version 2025.12.1
  • Updates to camp version 2025.12.0
  • Updates to Umpire version 2025.12.0
  • Updates to Caliper version 2.14.0
  • Evaluation methods for line integrals in axom::primal have been generalized, and
    evaluate_scalar_line_integral has been renamed to evaluate_line_integral.
  • Treatment of materials on strided-structured Blueprint meshes has changed in axom::mir.
    Materials are now expected to be defined only on the valid subset of zones in the mesh.
    This more closely matches VisIt behavior.
  • Views and functions for creating views in axom::bump have been enhanced to better validate
    Blueprint meshes to guard against malformed input. Likewise, runtime input checks have been
    promoted to use SLIC_ERROR_IF instead of SLIC_ASSERT so the checks will remain in
    optimized Axom builds.
  • The maximum number of vertices allowed in polygon primitives can now be passed as a template
    argument to axom::bump::TopologyMapper, axom::bump::PrimalAdaptor, and
    axom::mir::ElviraAlgorithm.
  • Material views in axom::bump::views were enhanced with const_iterator classes that
    enable traversal of material data for zones so kernels do not need to use large fixed size
    buffers to gather that data inside kernels.
  • Material views in axom::bump::views were enhanced with an overloaded zoneMaterials()
    method that allows data to be gathered into axom::ArrayView objects.
  • A new heavily_mixed example program was added in axom::mir to demonstrate running MIR on
    meshes with heavily mixed zones.
  • saveDocument() now has a AUTODETECT protocol for the file type
  • Sina fortran can now handle multiple records rather than a single record per application
  • Most Sina Fortran call can now pass the record for which the call is desired (sina_add, sina_add_file, sina_add_curveset, sina_add_curve)
  • Sina fortran create_document_and_record is now sina_create_record
  • Sina fortran sina_write_document now accepts a third argument that preserves records in memory so they can be written to another file (otherwise they're released from memory as soon as they're written)
  • Primal: In Bezier and NURBS classes, accessors for arrays of control points, weights and knots
    are now returned by (const) reference instead of returning a copy by value.
  • The axom::bump::clipping::ClipField and axom::mir::EquiZAlgorithm classes were enhanced so they can clip polygons up to 8 sides.
  • De-virtualized axom::Array methods to improve performance. This change may break code which
    utilizes axom::Array or sidre::Array/MCArray in a polymorphic manner, for example by overriding
    Array::updateNumElements() or Array::dynamicRealloc().
    Refer to the new StoragePolicy interface for substitute functionality.
  • The axom::bump::clipping namespace was renamed to axom::bump::extraction since it now
    contains additional algorithms.
  • Updates to mfem version 4.9.
    Also updates mfem's hypre dependency to hypre version 2.27.
  • Quest: MFEMReader can now read in multispan 1D NURBS meshes
  • fmt: Axom's built-in version of the fmt formatting library was updated to fmt version 12.1.0.
  • Primal: Improves robustness of linear_winding_number by using atan2 instead of acos
  • Core: Allows users to set the minimum size for Axom's shared memory allocator in getSharedMemoryAllocatorID()
  • Core: Allows users to set the name of the shared memory allocation in allocate()
  • Quest: Adds a function to the signed distance API to set the shared memory size: signed_distance_set_shared_memory_size()
  • Sidre: Shroud-generated C/Fortran interfaces for Group::createViewScalar() and Group::createViewString()
    now include overloads that accept an allocator ID.

Fixed

  • Sina's Fortran tests are now running (instead of silently failing)
  • Optimized Array::push_back() and Array::emplace_back() operations.
  • Quest: In Shaping applications, we now check return code after attempting to load a mesh
    and throw an error for unsuccessful loads.
  • Core: Bugfix for batched insertion into a FlatMap with deleted entries
  • Quest: Sets the allocation name for shared memory in the signed distance query

Removed

  • Removes the AXOM_ENABLE_MFEM_SIDRE_DATACOLLECTION CMake config variable.
    It is no longer needed -- we now always use MFEMSidreDataCollection in configurations with mfem and sidre.

Axom-v0.12.0

02 Oct 22:23
2975440

Choose a tag to compare

Please download the Axom-v0.12.0.tar.gz tarball below, which includes all of the Axom submodules as well. The AxomData-v0.12.0.tar.gz tarball contains extra files to put in the data directory only if you want to run certain Axom tests.

Added

  • Added a new Python interface for sidre, using nanobind to generate Python bindings.
  • Added a new "BUMP" (Blueprint Utilities for Mesh Processing) component in Axom, which includes utilities that were formerly included in the Axom MIR component. BUMP is useful for writing algorithms that process Blueprint meshes.
  • New axom::MALLOC_ALLOCATOR_ID is for using malloc and free even when axom is configured with Umpire support.
  • The axom::mir::ElviraAlgorithm class, which performs material interface reconstruction using the ELVIRA algorithm, was enhanced so it supports 3D structured mesh inputs. The output mesh is a Blueprint mesh with a 3D unstructured polyhedral topology.
  • The axom::mir::ElviraAlgorithm class, was enhanced to accept a "plane" option that causes it to return clipping plane origin and normal as fields on the mesh.
  • The axom::mir::ElviraAlgorithm class, was enhanced to accept a "pointmesh" option that causes it to return a mesh consisting of points located at clipping plane origins for each clipped material fragment, instead of returning polygonal or polyhedral meshes. This option is off by default.
  • Exposed primal clip operations for clipping various shapes with a plane.
  • Adds constructs in the axom namespace that wrap RAJA atomics, reductions, scans, and sorts. When RAJA is not available, serial-only substitutes are provided, allowing algorithms to still compile and run. These constructs are templated on the ExecSpace (execution space) so it is not necessary to query RAJA policies via the execution_space type traits classes.
  • 2D and 3D implementations for axom::for_all were added.
  • Adds axom::FlatMapView, a helper class associated with axom::FlatMap to support queries from within a GPU kernel.
  • Adds axom::FlatMap::create<ExecSpace>() and axom::FlatMap::insert<ExecSpace>() to support constructing or inserting a hash map over a batch of keys and values on the GPU or with OpenMP.
  • Adds support for custom allocators to axom::FlatMap.
  • Primal: Adds ability to perform sample-based shaping on tetrahedral shapes.
  • Improves efficiency of volume fraction computation from quadrature samples during sample-based shaping.
  • Adds a axom::DeviceHash type as a GPU-enabled version of the std::hash interface.
  • Added a new quest::STLWriter class that writes mint meshes to STL format.
  • Adds assign methods to axom::Array.
  • Adds assign, fill, set methods to axom::ArrayView.
  • Core: Adds a TempFile class to Axom's FileUtilities to help with generating temp files with unique file names that can be automatically removed when the instance goes out of scope.
  • Klee: We now support optional specification of a per-shape dimensions field for the geometry of a shape. These can be used to override the global dimensions of a Klee input file.
  • Lumberjack: Added sorting of log messages by creation time. This is now the default.
  • Slic: Added check for pending messages which is done by default when calling flushStreams() and pushStreams().
  • Sina: Records can now be provided with a curve ordering to use when writing to file. By default, all records will now use oldest-first ordering (ULTRA-like)
  • Sina: Documents can optionally be written as HDF5 instead of JSON. HDF5 should provide better performance for large, curve-rich sets
  • Sina: Written documents can now be appended to. This is a flexible system with a few different uses, ex: continuous writing of timeseries, overwriting values that change over the course of a simulation, and snapshot handling. See documentation for details.
  • Adds quest::MFEMReader for reading 1D MFEM contours in 2D space.
  • Adds an option to quest::SamplingShaper to allow in/out tests based on winding numbers for MFEM contours.
  • The shaping_driver example program can select --sampling inout to do the default In/Out sampling and --sampling windingnumber to select winding number in/out tests for MFEM data.

Changed

  • Updates blt submodule to [BLT version 0.7.1][https://github.com/LLNL/blt/releases/tag/v0.7.1]
  • Updates to [Conduit version 0.9.5][https://github.com/LLNL/conduit/releases/tag/v0.9.5]
  • Updates to [RAJA version 2025.09.0][https://github.com/LLNL/RAJA/releases/tag/v2025.09.0]
  • Updates to [camp version 2025.09.2][https://github.com/LLNL/camp/releases/tag/v2025.09.2]
  • Updates to [Umpire version 2025.09.0][https://github.com/LLNL/Umpire/releases/tag/v2025.09.0]
  • Axom now requires C++17 and will default to that if not specified via BLT_CXX_STD.
  • Fixed Timer::elapsed*() methods so they properly report the sum of all start/stop cycles since the last reset().
  • Adds support for allocations using malloc and free even when Axom is configured with Umpire support.
  • Adds a new utility tool, mesh_converter, which converts between mesh formats. The first conversion is from a Pro-E tetrahedral mesh to an STL mesh of its boundary triangles.
  • Primal: Adds a method to determine if a point is contained within a Tetrahedron.
  • The primal::BoundingBox class' expand() and shift() methods were modified so they do nothing when called on invalid bounding boxes.
  • Updates to [MFEM version 4.8.0][https://github.com/mfem/mfem/releases/tag/v4.8]
  • Readers in Quest were moved from a quest/readers directory to quest/io.
  • Sina: Renames a Fortran module to sina_hdf5_config (from hdf5_config)
  • Spin: Uses axom::FlatMap in SparseOctreeLevel implementation. We have observed a performance regression of about 20% during InOutOctree construction and queries over STL surface meshes relative to the previous sparsehash implementation. Please reach out to Axom developers if this affects you while we work on fixes for these.
  • Klee: Moves source files related to IO into a new io subdirectory in the Klee component
  • Primal: Consolidates construction logic for BezierCurve, BezierPatch, KnotVector, NURBSCurve and NURBSPatch classes and add overloads from axom::ArrayView
  • Primal: 2D and 3D winding number methods are now accelerated via memoization (dynamic caching + reuse) when supplied arrays of query points
  • Core: Updates behavior of FlatMap::reserve() to only trigger a rehash if maximum load factor would be exceeded.
  • Quest: Moves curve linearization from the quest::C2CReader into quest::LinearizeCurves so the logic can be used with other curve data.

Fixed

  • Core: prevent incorrect instantiations of axom::Array from a host-only compile, when Axom is compiled with GPU support. Instances where this occurs will now trigger a static assertion during compile time.
  • Fixes build with ninja generator
  • Primal: Fixes a BoundingBox constructor with zero (or fewer) points
  • Sina: Fixes configuration variables related to inclusion of AdiakWriter.hpp and to hdf5 support in sina_fortran_interface.f
  • Spin: Fixes undefined behavior in BVH tree construction associated with using signed indexes
  • Spin: Fixes undefined behavior in UniformGrid construction associated with invalid geometry bounding boxes
  • Core: Fixes undefined behavior in MapCollection when searching empty collections
  • Core: Fixes some edge cases in the joinPath file utility
  • Core: Fixes FlatMap::erase() to update reported size.
  • Core: Fixes FlatMap::rehash() when allocated in device-only memory.

Deprecated

  • Primal: Deprecates Triangle::checkInTriangle(pt). Use Triangle::contains(pt) instead.

Axom-v0.11.0

03 Apr 18:17
6859604

Choose a tag to compare

Please download the Axom-v0.11.0.tar.gz tarball below, which includes all of the Axom submodules as well. The AxomData-v0.11.0.tar.gz tarball contains extra files to put in the data directory only if you want to run certain Axom tests.

Added

  • Added a new "Mir" Axom component for accelerated Material Interface Reconstruction (MIR) algorithms.
    MIR algorithms take Blueprint meshes with a matset and they use the matset's material information
    to split any input zones that contain multiple materials into zones that contain a single material.
    The Mir component provides an implementation of the Equi-Z MIR algorithm, which is a visualization-
    oriented algorithm that produces smooth interfaces between zones and their neighbors. The Mir
    component also provides a 2D ELVIRA algorithm, which reconstructs polygonal shapes and preserves
    volume fractions.
  • Support in quest::IntersectionShaper for Blueprint mesh stored in a conduit::Node
    or sidre::Group.
  • Adds new CMake configuration options, AXOM_ENABLE_ASAN and AXOM_ENABLE_UBSAN, to enable/disable AddressSanitizer and UndefinedBehaviorSanitizer respectively in Axom. Default is OFF for both.
  • A number of new klee::Geometry constructors are added, for the different shapes now supported.
    This is a temporary change. The class will be subclassed in the future to support a diversity of geometries.
  • Support some analytical shapes in IntersectionShaper.
  • Support generating shapes in memory (not requiring input files).
  • sidre::View holding array data may now be re-shaped. See sidre::View::reshapeArray.
  • Sina C++ library is now a component of Axom
  • Adds optional dependency on Open Cascade. The initial intention is
    to use Open Cascade's file I/O capabilities in support of Quest applications.
  • Adds primal::NURBSCurve and primal::NURBSPatch classes, supported by primal::KnotVector.
  • Adds a Quest example that reads in a STEP file using Open Cascade and processes its geometry
  • Adds a piecewise method to load external data using sidre::IOManager. This adds new overloaded methods
    of loadExternalData in sidre::IOManager and sidre::Group.
  • Adds intersection routines between primal::Ray objects and primal::NURBSCurve/primal::NURBSPatch objects.
  • Adds LineFileTagCombiner to Lumberjack to allow combining messages if line number, file, and tag are equal.
  • Adds some support for 2D shaping in quest::IntersectionShaper, using STL meshes with zero for z-coordinates or in-memory triangles as input.
  • Adds ability in Lumberjack to own and set communicators.
  • Adds NonCollectiveRootCommunicator to Lumberjack to provide an MPI-based communicator for logging messages non-collectively.

Changed

  • Updates blt submodule to [BLT version 0.7.0][https://github.com/LLNL/blt/releases/tag/v0.7.0]
  • Updates to [MFEM version 4.7.0][https://github.com/mfem/mfem/releases/tag/v4.7]
  • Updates to [Caliper version 2.12.1][https://github.com/LLNL/Caliper/releases/tag/v2.12.1]
  • Updates to [Conduit version 0.9.3][https://github.com/LLNL/conduit/releases/tag/v0.9.3]
  • Updates to [RAJA version 2025.03.0][https://github.com/LLNL/RAJA/releases/tag/v2025.03.0]
  • Updates to [camp version 2025.03.0][https://github.com/LLNL/camp/releases/tag/v2025.03.0]
  • Updates to [Umpire version 2025.03.0][https://github.com/LLNL/Umpire/releases/tag/v2025.03.0]
  • primal::NumericArray has been moved to core. The header is core/NumericArray.hpp.
  • quest::Shaper and quest::IntersectionShaper constructors require a runtime policy.
    Changing the policy after construction is no longer supported.
  • Importing Conduit array data into sidre::View now allocates destination
    data using the View's parent's allocator ID, instead of always using
    host memory. This is consistent with the behavior of deep-copying data
    from Sidre.
  • ItemCollection and its child classes MapCollection, ListCollection, and IndexedCollection were moved from Sidre
    to core. The namespace prefix for these classes is now axom:: instead of axom::sidre. The internal usage of
    these types within Sidre Datastore and Group is unchanged.
  • MFEMSidreDataCollection::LoadExternalData now takes two optional string parameters, one that is a
    filename (defaults to the name member variable) and the other is a Group path relative to the base of
    the Data Collection itself (defaults to the root of the DataStore).
  • SLIC_ASSERT,SLIC_ASSERT_MSG,SLIC_CHECK, and SLIC_CHECK_MSG macros delegate to assert() within HIP device kernels.

Fixed

  • Fixes compilation issue with RAJA@2024.07 on 32-bit Windows configurations.
    This required a RAJA fix to avoid 64-bit intrinsics,
    as well as support for 32-bit Words in Slam's BitSet class.
  • Minor bugfix to primal::intersect(segment, ray) to better handle cases when segment and ray overlap.
  • Fixes a memory leak in axom::Array copy constructor.

Axom-v0.10.1

22 Oct 19:14
6626ee1

Choose a tag to compare

Please download the Axom-v0.10.1.tar.gz tarball below, which includes all of the Axom submodules. The AxomData-v0.10.1.tar.gz tarball contains extra files to put in the data directory only if you want to run certain Axom tests.

Added

  • Constructor to Axom BVH that avoids an unnecessary copy of each bounding box.

Fixed

  • Issue with uninitialized state in axom::Array class was causing host-initialization of device-allocated memory in certain situations. This could cause warnings about uninitialized memory or crashes in the axom::Array constructor.
  • Added a guard for sidre-related mint API usage in a quest example.
  • Removed std::ends usage from SLIC_ASSERT,SLIC_ASSERT_MSG,SLIC_CHECK, and SLIC_CHECK_MSG macros that prevented Lumberjack from combining messages.
  • Some line numbers linking file contents into the Axom Quickstart Guide were incorrect causing the docs to appear incomplete.

Axom-v0.10.0

26 Sep 20:36
ea853a3

Choose a tag to compare

Please download the Axom-v0.10.0.tar.gz tarball below, which includes all of the Axom submodules. The AxomData-v0.10.0.tar.gz tarball contains extra files to put in the data directory only if you want to run certain Axom tests.

Added

  • Added SLIC constructors that take in a std::string for the stream. If string is interpreted as a file name, the file is not opened until SLIC flushes and the stream has at least one message logged.
  • Primal: Adds a clip() operator overload for clipping a 2D polygon against another 2D polygon.
  • Primal: Adds Polygon::reverseOrientation() to reverse orientation of a polygon in-place.
  • Adds StaticArray, a wrapper for StackArray with a size member variable.
  • Multidimenional core::Array supports column-major and arbitrary stride ordering, in addition to the default row-major ordering.
  • Adds new PolygonArray and MAX_VERTS template parameters to primal::Polygon for dynamic or static allocation.
  • Adds support for the optional caliper and adiak dependencies to axom. These dependencies are added through axom's spack package via the new +profiling variant, and are enabled in axom's build system via the CALIPER_DIR and ADIAK_DIR configuration paths.
  • Adds new annotation macros to axom: AXOM_ANNOTATE_{BEGIN,END,SCOPE,METADATA}. These replace the previous annotation macros AXOM_PERF_MARK_{FUNCTION,SECTION}.
  • Adds a RAII-based MPIWrapper utility class to axom's core component. This can help setup/teardown MPI in axom's examples. It can also be used in configurations with MPI.
  • Primal: Adds a closest_point operator for finding the closest point on a Segment
  • Primal: Adds a reflectPoint method to the Plane primitive
  • Primal: Makes several primitive methods available in device code
  • Improves support for axom::Array allocated in unified and pinned memory on GPU platforms. Use of GPU-based operations for Arrays allocated in a unified memory space is controlled with a new method, Array::setDevicePreference().
  • Adds svg2contours script to convert paths in an SVG file to an MFEM NURBS mesh.
  • Quest: Adds an example to query winding numbers on an MFEM NURBS mesh.

Changed

  • Updates to [Conduit version 0.9.2][https://github.com/LLNL/conduit/releases/tag/v0.9.2]
  • Updates to [RAJA version 2024.07.0][https://github.com/LLNL/RAJA/releases/tag/v2024.07.0]
  • Updates to [camp version 2024.07.0][https://github.com/LLNL/camp/releases/tag/v2024.07.0]
  • Updates to [Umpire version 2024.07.0][https://github.com/LLNL/Umpire/releases/tag/v2024.07.0]
  • axom::CLI::ExitCodes::Success has been changed to axom::CLI::ExitCodes::CLI11_Success to avoid conflict when X11 #defines Success.
  • MarchingCubes masking now uses the mask field's integer values instead of converting them to booleans. The new behavior lets you select a value to mask for. If you want to continue the boolean behavior, use only 0 or 1 in your mask field.
  • Primal: Polyhedron::centroid() function changed to return center of mass of the polyhedron. Polyhedron::vertexMean() added to return average of polyhedron's vertices. Polyhedron::moments() returns the volume and centroid of the polyhedron, the 0th and 1st moments respectively.
  • quest::ArrayIndexer is now axom::MDMapping, adopting conventional terminology and moving out of quest.
  • mint::structured_exec is now axom::nested_for_exec, to support nested for loops for all of Axom. See src/axom/core/execution/nested_for_exec.hpp.
  • Set default Umpire allocator id to device instead of unified for CUDA and HIP execution policies.
  • Upgrades vcpkg usage for axom's automated Windows builds to its 2024.03.19 release. Also updates vcpkg port versions for axom dependencies. Temporarily removes umpire from axom's default dependencies on Windows due to incompatibility between umpire's external fmt and axom's vendored copy.
  • Turn off CMake finding dependencies on system paths.
  • axom::Array: trivially-copyable types with a non-trivial constructor are now initialized on the GPU.
  • SLIC no longer outputs the rank count in the RANK format string in parallel loggers. You can access the rank count via new format option RANK_COUNT.

Removed

  • Removes config option AXOM_ENABLE_ANNOTATIONS. Annotations are now provided by caliper (and adiak for metadata) and are available when axom is configured with CALIPER_DIR and ADIAK_DIR config variables.
  • Removes caching of {PACKAGE}_FOUND variables in SetupAxomThirdParty.cmake
  • We no longer test Axom with the XL compiler. So users should consider XL unsupported.

Fixed

  • numerics::eigen_solve() has been corrected to avoid an early return with error state.

Axom-v0.9.0

20 Mar 20:58
5f53159

Choose a tag to compare

Please download the Axom-v0.9.0.tar.gz tarball below, which includes all of the Axom submodules as well. The AxomData-v0.9.0.tar.gz tarball contains extra files to put in the data directory only if you want to run certain Axom tests.

Added

  • Primal: Adds a Quadrilateral primitive
  • Primal: Adds a compute_bounding_box() operator for computing the bounding
    box of a Quadrilateral
  • Primal: Adds a clip() operator for clipping a tetrahedron against the
    half-space defined by a plane
  • Primal: Adds a checkAndFixOrientation() function to primal::Tetrahedron
    that swaps the order of vertices if the signed volume of the Tetrahedron is
    negative, resulting in the signed volume becoming positive.
  • Adds FlatMap, a generic key-value store which aims for drop-in compatibility
    with std::unordered_map, but utilizes an open-addressing design.
  • Adds support for device-side use of Array::push_back() and Array::emplace_back().
  • Adds initial support for using Slic streams with tags
  • Adds an example that finds intersection candidate pairs between two Silo
    hexahedral meshes using either a BVH or Implicit Grid spatial index
  • Quest: Adds setTetPredFromBoundingBox() and setTetPred() functions to
    quest::ProEReader and PProEReader that set a tet predicate, allowing
    user code to read in a subset of a Pro/E ASCII tetrahedron mesh file.

Changed

  • MarchingCubes has optimizations to improve GPU performance, particularly for
    repeated computations. The constructor has changed and a new setMesh method
    is added to set (or change) the mesh. New accessors present output data
    without moving them from device to host. These accessors are an interim
    solution and likely to be updated in the future.
  • DistributedClosestPoint outputs are now controlled by the setOutput method.
  • MarchingCubes allows user to select the underlying data-parallel implementation
    • fullParallel works best on GPUs.
    • hybridParallel reduces the amount of data processed and works best with
      MarchingCubesRuntimePolicy::seq.
    • byPolicy (the default) selects the implementation based on the runtime policy.
  • MarchingCubes and DistributedClosestPoint classes identify domains by their
    state/domain_id parameters if provided, or the local iteration index if not.
  • MarchingCubes and DistributedClosestPoint classes changed from requiring the Blueprint
    coordset name to requiring the Blueprint topology name. The changed interface methods are:
    • DistributedClosestPoint::setObjectMesh
    • DistributedClosestPoint::computeClosestPoints
    • MarchingCubes::MarchingCubes
    • MarchingCubesSingleDomain::MarchingCubesSingleDomain
  • Primal: Polyhedron::volume() function changed from returning a signed
    volume to an unsigned volume. The added Polyhedron::signedVolume() function
    returns the signed volume.
  • Primal: intersection_volume() operators changed from returning a signed
    volume to an unsigned volume.
  • Primal's BoundingBox::contains(BoundingBox) now returns true when the input is empty
  • Renamed axom's bit utility functions to conform to C++20 standard: popCount() -> popcount(),
    trailingZeros() -> countr_zero() and leadingZeros() -> countl_zero()
  • Renamed axom::utilities::swapEndian() -> byteswap() to conform to C++23 standard

Fixed

  • quest's SamplingShaper now properly handles material names containing underscores
  • quest's SamplingShaper can now be used with an mfem that is configured for (GPU) devices
  • primal's Polygon area computation in 3D previously only worked when the polygon was aligned with the XY-plane. It now works for arbitrary polygons.
  • Upgrades our vcpkg usage for automated Windows builds of our TPLs to its 2023.12.12 release
  • Fixed a bug in the bounds checks for primal::clip(Triangle, BoundingBox)
  • Fixed a bug when loading Sidre groups with attributes that already exist
  • Fixed std::locale error when when compiling src/axom/core/utilities/System.cpp using nvcc
  • Include cstdint for higher gcc version support (e.g. gcc-13)
  • Fixed several memory leaks in axom::Array, quest::Shaping and sidre::MFEMSidreDataCollection

Axom-v0.8.1

17 Aug 01:34
0da8a5b

Choose a tag to compare

Please download the Axom-v0.8.1.tar.gz tarball below, which includes all of the Axom submodules as well. The AxomData-v0.8.1.tar.gz tarball contains extra files to put in the data directory only if you want to run certain Axom tests.

Changed

  • Updates to [RAJA version 2023.06.0][https://github.com/LLNL/RAJA/releases/tag/v2023.06.0]
  • Updates to [camp version 2023.06.0][https://github.com/LLNL/camp/releases/tag/v2023.06.0]
  • Updates to [Umpire version 2023.06.0][https://github.com/LLNL/Umpire/releases/tag/v2023.06.0]

Fixed

  • Fixed MFEMSidreDataCollection finite element space bug
  • Various fixes to CMake machinery

Axom-v0.8.0

26 Jul 17:56
71fab32

Choose a tag to compare

Please download the Axom-v0.8.0.tar.gz tarball below, which includes all of the Axom submodules as well. The AxomData-v0.8.0.tar.gz tarball contains extra files to put in the data directory only if you want to run certain Axom tests.

Added

  • Adds MarchingCubes class implementing the marching cubes algorithm for surface detection.
  • Adds the following methods to axom::Array to conform more closely with the std::vector interface:
    • Array::front(): returns a reference to the first element
    • Array::back(): returns a reference to the last element
    • Array::resize(size, T value): resizes the array, and sets any new elements to value.
  • Adds an ArrayView::empty() method to return whether the view is empty or not.
  • Adds an area() function to primal::Polygon
  • Adds initial support for using Slam types on the GPU
  • Adds support for using ArrayViewIndirection indirection policy with slam::Map and slam::BivariateMap
  • Adds const_iterator support to slam::BivariateMap and slam::SubMap
  • Primal: Adds a Hexahedron primitive
  • Primal: Adds a clip() operator for computing the intersection of a Hexahedron and another Tetrahedron as a Polyhedron
  • Primal: Adds an intersection_volume() operator for computing the volume of intersection between a primitive and a Tetrahedron
  • Primal: Adds a primal::Polyhedron::from_primitive() operator that returns a Polyhedron object from a given primitive.
  • Adds DataStore::getBufferInfo() and Group::getDataInfo() methods that insert information into a Conduit Node about buffers in a DataStore object or data in a Group subtree. The information can be accessed from the Node by the caller from specifically named fields in the Node.
  • Quest: Adds a quest::ProEReader for reading in Pro/E tetrahedral meshes
  • Quest: The quest::IntersectionShaper class can now use a percent error to determine whether the revolved volume for a shape is sufficiently accurate or whether the shape must be further refined. This new dynamic method of shaping complements the existing segment-based curve refinement method and it is activated using Shaper::setRefinementType() and by calling Shaper::setPercentError() to set a refinement error percentage.
  • Multimat: adds initial support for fields stored on the GPU. MultiMat::setAllocatorID() or MultiMat::setFieldAllocatorID() can be called to change the memory space in which a field is allocated.
  • Multimat: adds an MultiMat::addExternalField() function to support fields where the memory is managed externally. Fields which are externally-managed cannot be transposed between sparse and dense layouts, or moved between allocator spaces.
  • Multimat: adds a MultiMat::removeField() function to remove fields from the Multimat instance.
  • Multimat: adds an overload of MultiMat::setCellMatRel() that supports setting a multi-material relation in a compressed sparse-row (CSR) representation.
  • Quest: Adds ability to import volume fractions into SamplingShaper before processing Klee input
  • Slam: adds a slam::MappedVariableCardinality policy to accelerate mapping flat indices back to first-set indices when used in a StaticRelation
  • Adds an ArrayView(data, shape, strides) constructor to support column-major and custom striding layouts.
  • Adds an ArrayView::subspan() overload for multi-dimensional subspans
  • Adds an axom::utilities::insertionSort() method.
  • Quest: Adds Pro/E tetrahedral meshes as input to the IntersectionShaper
  • Quest: For sample-based shaping, users can register callback functions to modify the input points before querying the spatial index. This allows, e.g. querying 3D points against 2D surfaces of revolution provided as c2c contour files.
  • Adds an axom::utilities::locale utility function to guard against platforms that do not have the requested locales via the std::locale function. If the system does not have the requested locale (e.g. en_US.UTF8), it returns the user's default locale.
  • Sidre: Add new protocols sidre_layout_json and conduit_layout_json to provide output of DataStore layout in a user-readable format that excludes the numerical arrays held by Views and Buffers.
  • Sidre: Add methods to methods for destroying Groups that will also destroy Buffers if the destruction of a Group and the Views in its subtree cause the Buffer to become detached from all Views.
  • Sidre: Add two Group methods -- one to return a vector of the valid I/O protocols (based on compilation options), and one that returns a default protocol.
  • Klee: Add support in shaping driver and MFEMSidreDataCollection to write Blueprint datasets that contain matset metadata needed for VisIt to treat volume fraction arrays as a material. This enables VisIt plots such as FilledBoundary.

Changed

  • Fixed bug in mint::mesh::UnstructuredMesh constructors, affecting capacity. A missing factor was added. If you worked around this by adding the factor yourself, you may want to undo that work-around.
  • Updates blt submodule to blt@0.5.3
  • Updates uberenv submodule to HEAD of main on 12May2023
  • Updates to conduit version 0.8.6
  • Updates to mfem version 4.5
  • Updates to fmt version 9.1.0
  • Updates to c2c version 1.8.0
  • The Axom library has been broken down into its component libraries (prefixed with axom_). This change requires no change to downstream CMake users who import our targets. The exported CMake target axom includes all components, but users who do not import our targets will need to create the link line themselves. The following replacement can be used: -laxom -> -laxom_quest -laxom_multimat -laxom_slam -laxom_mint -laxom_klee -laxom_inlet -laxom_sidre -laxom_slic -laxom_lumberjack -laxom_core. If you only need a subset of the components, you can now use those targets directly, ie. axom::inlet.
  • IntersectionShaper now implements material replacement rules.
  • axom::Array move constructors are now noexcept.
  • Exported CMake targets, cli11, fmt, sol, and sparsehash, have been prefixed with axom:: to guard against conflicts.
  • DistributedClosestPoint query now supports any blueprint-valid mesh format, including multidomain. Domain underloading and overloading can be expressed using multidomain format. Closest points are identified by cp_rank, cp_domain_index, and cp_index. The new cp_domain_index specifies the domain containing the closest point.
  • DistributedClosestPoint interfacing variable names closest_point and min_distance have been changed to cp_coords and cp_distance, respectively, to match the naming convention of other interfacing variables.
  • Adds vcpkg ports for RAJA, Umpire with optional OpenMP feature for automated Windows build.
  • Reduce size of ArrayView::subspan to prevent accessing invalid memory.
  • Adds vcpkg port for lua as optional dependency on Windows.
  • Adds additional parameters to quest's PointInCell query to control the Newton solve from physical to reference space for a given element.
  • Remove function pointer call in IteratorBase::advance().
  • Slam: IndirectionPolicy::data() now returns a reference to the underlying buffer. Rebinding an indirection to a new buffer is now achieved through IndirectionPolicy::ptr(), which returns a mutable pointer to the buffer.
  • Quest: Shaper::applyTransforms() is no longer a public method.
  • Multimat: fields are now returned as shallow, device-copyable views of a field instead of full copies of field data.
  • Multimat: MultiMat::addField() and MultiMat::setVolfracField() API now use axom::ArrayView to accept data.
  • Multimat: Ported field data/sparsity layout conversion methods to GPU.
  • Multimat: MultiMat::makeOtherRelation() now runs on the GPU with an appropriately-set allocator ID.
  • Multimat: MultiMat::setCellMatRel(counts, indices) now runs on the GPU, and accepts GPU-side data.
  • Renames ArrayView::spacing() to ArrayView::minStride().
  • Klee: A shape's geometry no longer needs a path field when its format is "none"
  • Quest: Shapes without geometry can participate in replacement rules for sample-based shaping. Volume fractions for the associated materials must be supplied before shaping.
  • Primal: Expose Polyhedron::getFaces() as public method.
  • Removed custom Spack package recipes in favor of using the radiuss-spack-configs repository as a submodule.

Fixed

  • Fixed issues with CUDA build in CMake versions 3.14.5 and above. Now require CMake 3.18+ for CUDA and non-gpu builds.
  • Fix to allow Axom to build when using RAJA, but not Umpire.
  • Checks validity of bounding boxes in primal intersection operators against planes and triangles before using the geometry.
  • Improves import logic for lua dependency
  • Improves import logic for mfem dependency in device builds when mfem is configured with caliper
  • Fixes ambiguity when calling Array::resize(size, value) for Array<bool>
  • Sidre: Group methods hasChildView() and hasChildGroup() changed to return false when Group holds items in list format. This fixes an IOManager issue causing failures for multi-domain meshes when writing Blueprint index file.
  • Sidre: Changed Group::copyToConduitNode() method to properly handle Groups using the list format. Previously, it was assumed that all child items in a Group have a name, which is not the case for list format.
  • Sidre: Fixed Group method importConduitTreeExternal() to handle lists with unnamed members the same as importConduitTree().
  • Slic and Lumberjack: Add missing calls to flush() for parallel output log streams.

Deprecated

  • Integer types in src/axom/core/Types.hpp are deprecated because c++11 supports their equivalents.

Axom-v0.7.0

01 Sep 21:39
ea51581

Choose a tag to compare

Please download the Axom-v0.7.0.tar.gz tarball below, which includes all of the Axom submodules as well.

Added

  • Adds a view() method to axom::Array class to simplify creation of a corresponding axom::ArrayView
  • Adds GPU/OpenMP support to spin::ImplicitGrid.
    The following functions run with the user-specified execution space (specified as a template argument
    on ImplicitGrid):
    • ImplicitGrid::insert(nelems, bboxes): insert a batch of bounding boxes into the implicit grid
    • ImplicitGrid::getCandidatesAsArray(nquery, queryObjs, ...): query the implicit grid for a batch of
      query objects, and generate a CSR-format array for the candidates.
      In addition, ImplicitGrid::getQueryObject() returns an object that may be used within a GPU kernel
      to query the implicit grid.
  • Added initial implementation of GPU/OpenMP-accelerated point-in-cell queries
  • Added an alternative surface mesh tester function to Quest, based on ImplicitGrid
  • Add const versions of begin() and end() for Array and ArrayView
  • Add support for passing compatible custom allocator IDs to axom::Array with explicitly specified
    memory space
  • Adds constructor overloads to axom::Array that uses both uninitialized data (ArrayOptions::Uninitialized)
    and custom allocators
  • Adds a comparison operator (operator<()) to StackArray. This allows it to be used as a key for std::map
  • Use compiler intrinsics for axom's bit utility functions: popCount(), trailingZeros() and leadingZeros()
  • Adds a random-access iterator to slam::DynamicSet
  • Adds an overload to ImpicitGrid::getCandidates() from a grid cell of the lattice.
    This makes it easier to iterate over the bins of the spatial index.
  • Defines iterator traits on axom::Array<T>/ArrayView<T> iterators, to allow passing iterator
    pairs to standard library functions
  • Adds full support for calling methods on axom::Array<T> allocated in device-only memory.
  • Adds ability to index into subarrays of a multidimensional axom::Array<T> using
    operator[] and operator()
  • Adds ability to build axom using the hip compiler. Support for running device
    kernels with hip will be added in the future.
  • Adds new host-configs for HIP on LLNL platforms
  • Adds GPU/OpenMP support to spin::UniformGrid.
    The following functions run with a user-specified execution space (specified as a template argument
    on UniformGrid):
    • UniformGrid::initialize(): creates/re-creates a uniform grid with an array of objects and their
      corresponding bounding boxes
    • UniformGrid::getCandidatesAsArray(): query the uniform grid for objects that share a grid
      cell with the query bounding box
      In addition, UniformGrid::getQueryObject() returns an object that may be used within a GPU kernel
      to query the uniform grid.
  • Adds ability to specify a storage policy in UniformGrid. Two policies are provided:
    • DynamicGridStorage stores the bins as an array of arrays (default)
    • FlatGridStorage stores the bins as a flat array of elements, where each bin is a slice of the
      array
  • Adds a templated uniform grid-based surface mesh tester function to Quest
  • Adds an initializer list constructor and assignment operator to axom::Array
  • Adds an overload of axom::Array::resize(ArrayOptions::Uninitialized, dims) to support resizes
    without constructing or initializing new elements
  • Adds examples and tests for using Slic interface in Fortran
  • Adds examples for using the BVH device traversal API
  • Adds a ScatteredInterpolation query to quest, which enables interpolating scalar fields at arbitrary
    points from a given 2D or 3D point mesh in the Mesh Blueprint format. The current implementation
    generates a Deluanay complex over the points and performs linear interpolation over the
    triangle/tetrahedron at the query points.
  • Adds a HIP execution policy for device kernels to run on AMD GPU hardware
  • Adds new Slic macros that allow you to selectively print messages only on root ranks. For example,
    SLIC_ERROR_ROOT(msg) and SLIC_ERROR_ROOT_IF(EXP, msg). This can be set via
    slic::initialize(bool is_root = true) or slic::setIsRoot().
  • Adds forward iterators to the Views and Groups of a sidre::Group.
    These can be accessed via the range-for syntax as for(auto& view: grp.views()){...},
    Or using the iterator syntax as
    for(auto& it = grp.views().begin(), itEnd = grp.views().end(); it ! itEnd ; ++it) {...}, and similarly for the groups of a group.
  • Adds forward iterators to the Attributes and Bufferss of a sidre::DataStore,
    with a similar syntax, e.g. for(auto& buf : datastore.buffers()){...}.
  • Adds an overload of ImplicitGrid::getCandidatesAsArray() to accept query points/bounding boxes
    as an axom::ArrayView.
  • Adds a primal::closest_point(point,sphere) overload to find the closest point on a sphere to a given point
  • Adds an overload to quest's SignedDistance query to return the closest point on the surface
    to the query point and the surface normal at that point. Also exposes this functionality
    in quest's signed_distance C API.
  • Adds utility function for linear interpolation (lerp) of two numbers
  • Adds utility function to compute binomial coefficients
  • Adds a CurvedPolygon class to primal representing a polygon with BezierCurves as edges
  • Adds functions to compute the moments (area, centroid) of a CurvedPolygon
  • Adds functions to evaluate integrals over BezierCurve and CurvedPolygon objects
  • Adds a ArrayViewIndirection storage policy to Slam
  • Adds set accessor methods to slam::DynamicVariableRelation
  • Adds a new component to Axom, multimat, to simplify the handing of multi-material meshes and
    fields.
  • Adds functions to compute winding numbers and in/out queries for Polygon and CurvedPolygon objects.
  • Adds constants.hpp to primal to track geometric constants. Initially includes
    a value for PRIMAL_TINY, a small constant that can be added to
    denominators to avoid division by zero.
  • DistributedClosestPoint query now supports "domain underloading" -- ranks that are passed in can
    have empty object meshes and/or empty query meshes
  • 'BezierCurve' objects now support Rational Bezier curve functionality
  • Primal: Adds a clip() operator for computing the intersection of a Tetrahedron and another Tetrahedron as a Polyhedron
  • Added slic::outputLocalMessages() to output messages from the current rank to the console for MPI-enabled LogStreams.

Changed

  • Axom now requires C++14 and will default to that if not specified via BLT_CXX_STD.
  • Moved bit-twiddling functions to core component
  • axom::Array now default-initializes its data by default. To create an Array with uninitialized
    elements, pass an axom::ArrayOptions::Uninitialized as the first constructor argument.
  • axom::ArrayView<const T> can now be created from a const Array<T>
  • Added new ExecSpace template parameter to spin::ImplicitGrid.
    ExecSpace is now the second template parameter (out of three) and defaults to axom::SEQ_EXEC.
  • Instead of saving the entire DataStore, MFEMSidreDataCollection will now save only
    its domain and global groups
  • When an inlet::Field fails a range or valid value constraint, the provided value and
    corresponding range/set of valid values are now included in the error message
  • IOManager::write now allows the calling code to pass in the full name of
    the root file that it will produce
  • Improved consistency of orientation operations in primal::Plane, primal::Sphere, primal::orientation()
    and primal::in_sphere()
  • Improved efficiency for primal::in_sphere() -- the computations are now based on (D+1)x(D+1) determinants
    instead of (D+2)x(D+2) determinants for D-dimensional spheres
  • Improved efficiency for (signed) area/volume functions of primal::Segment, primal::Triangle and primal::Tetrahedron
  • Updates interface for primal::Sphere to use more of primal, e.g. uses primal::Point instead of T* to represent points
  • Adds circumsphere() functions to primal::Triangle and primal::Tetrahedron to return the Sphere
    that circumscribes the triangle/tetrahedron's vertices
  • Adds operator overloads to subtract a primal::Vector from a primal::Point to yield a new primal::Point
  • Consolidates quest::findTriMeshIntersections*() implementations for BVH and ImplicitGrid
  • BVH::find*() batch functions now return the total number of candidate intersections found
  • Enables empty axom::Array<T> to be iterated over with begin()/end()
  • Removed AXOM_VERSION_EXTRA in favor of axom::gitSHA() and adding the SHA to axom::getVersion() and
    axom::about()
  • Use more specific type trait checks in ArrayOps, to avoid generating unnecessary copies in
    fill/destroy operations on otherwise trivially-copyable/destructible types.
  • axom::Array now consistently propagates the allocator ID on copy, move, and swap operations when possible.
    This is a breaking change; copy-construction of a dynamic array from a device array will no longer automatically
    move the array to host memory, and will instead maintain the same allocator ID as the source array.
  • The device traversal method BVH::TraverserType::traverse_tree() now supports passing in arbitrary query objects
    for BVH traversal.
  • Moved inlet::LuaReader::solState() to be a protected function that now returns a std::shared_ptr<axom::sol::state>.
    This is an advanced feature that could cause users to break an input file state after verification. This also allows us
    to not expose axom/sol.hpp to all users of Inlet. This greatly reduces compile times. Using this feature requires
    both a derived class and including axom/sol.hpp in the user code.
  • Renamed some overloads of function createView of...
Read more

Axom-v0.6.1

16 Nov 23:58
ee240d3

Choose a tag to compare

Please download the Axom-v0.6.1.tar.gz tarball below, which includes all of the Axom submodules as well.

Added

  • Added a config variable, AXOM_DEBUG_DEFINE to control whether the AXOM_DEBUG compiler define is enabled.
    By DEFAULT, it is enabled for Debug and RelWithDebInfo configurations, but this can be overriden
    by setting AXOM_DEBUG_DEFINE to ON or OFF.
  • axom::Array is now GPU-compatible, in particular via a memory space template parameter and via
    extensions to axom::ArrayView that allow for copying into kernels and transfers between memory spaces.
  • Adds some utility arithmetic operators for adding and subracting primal::Points and primal::Vectors

Changed

  • Renamed AXOM_NOT_USED macro to AXOM_UNUSED_PARAM for better consistency with other Axom macros
  • Added explicit to axom::Inlet::InletVector constructors and added a constructor that accepts a double*
  • AXOM_ENABLE_MFEM_SIDRE_DATACOLLECTION configuration option is now ON by default (rather than OFF).
    This option should be disabled if mfem was configured with MFEM_USE_SIDRE.

Fixed

  • The AXOM_DEBUG compiler define is now properly exported via the axom CMake target when it is enabled
  • Added tolerance parameter EPS to primal::closest_point() operator. This effectively snaps
    closest points to the triangle boundaries vertices and edges when they are within EPS,
    improving consistency when, e.g., querying multiple triangles from the same mesh.
  • Fixed regression in SignedDistance queries for query points closest to edges or vertices
    of the input triangle mesh