Skip to content

Axom-v0.7.0

Compare
Choose a tag to compare
@bmhan12 bmhan12 released this 01 Sep 21:39
· 2148 commits to main since this release
ea51581

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
    axom::sidre::Group which accept int ndims, IndexType *shape
    arguments to be createViewWithShape or createViewWithShapeAndAllocate.
  • Replaced an unused older incarnation of iterators in sidre with a new std-compliant
    implementation
  • Removed an out-of-date manually-generated header file in sidre sidre/core/sidre.hpp.
    We recommend using the automatically generated header file axom/sidre.hpp to include
    sidre functionality.
  • Removed functions from sidre::ItemCollection base class that were not common to all derived classes
    and added a new derived class sidre::IndexedCollection
  • Spin: BVH::findPoints/Rays/BoundingBoxes() candidate search methods now accept an axom::ArrayView<IndexType>
    for the offsets and counts output arrays, and return candidates as an axom::Array<IndexType>.
  • Renamed primal::Polygon::centroid() to primal::Polygon::vertexMean() because it was not actually computing the centroid.
  • axom:sidre:IndexType is now the same type as
    axom:IndexType. Before, Sidre always used int64_t. Now it
    respects the define AXOM_USE_64BIT_INDEXTYPE.
  • Mint now depends on the Slam component.
  • Renames indirection policies in slam: The c-array indirection policy was renamed from ArrayIndirection to CArrayIndirection
    and the axom::Array-based indirection policy was renamed from CoreArrayIndirection to ArrayIndirection.
  • Mfem dependency updated to 4.4
  • primal::detail::intersect_ray now correctly identifies intersections between collinear Segment and Ray objects.
  • Improved efficiency and robustness of barycentric coordinate
    and circumsphere computation for Triangles and Tetrahedra.

Fixed

  • Fixed a bug relating to swap and assignment operations for multidimensional axom::Arrays
  • Fixed over-eager caching of restored mfem::FiniteElementSpaces in sidre::MFEMSidreDataCollection
  • Fixed a bug in which Inlet verification bails out on the first failure, which resulted in
    incomplete error lists
  • Fixed a bug in quest::PointInCell when not using RAJA
  • Fixed a potential memory leak in axom::Array<T> for non-trivial types T which allocate memory
  • Added a guard in axom::ArrayList for axom configurations without Umpire to fix a compiler error (XL compiler)
  • Inlined some fully specialized functions in quest::Delaunay to avoid "multiply-defined" linker errors
  • Fixed axom::Array<T> fill operations on uninitialized memory
  • Fixed behavior of axom::Array<T>::resize(new_size) with new_size < curr_size
  • Fixed computation of signs in quest::SignedDistance when closest point is along an edge
    with a sharp dihedral angle and the adjacent triangles have significantly different areas
  • Fixed bug in axom::Path that ignored the leading delimiter character if one was present
  • Fixed gcc compiler errors in configurations without RAJA or Umpire
  • Fixed axom::Array<T> behavior on copy-construction when T is a non-trivial type
  • Replaced using statement in SidreDataTypesIds.h with typedef
    since C syntax is required in this file.
  • Fixed bug on two-dimensional sidre::Array<T> construction where the size is set to the underlying buffer
    capacity, instead of the actual number of elements
  • Fixed axom::Array<T>::insert behavior with non-trivial types.
  • Fixed bug in Slic macros for MPI-based LogStreams not aborting when using collective Error or Warning
    macros