Axom-v0.7.0
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 toaxom::Array
class to simplify creation of a correspondingaxom::ArrayView
- Adds GPU/OpenMP support to
spin::ImplicitGrid
.
The following functions run with the user-specified execution space (specified as a template argument
onImplicitGrid
):ImplicitGrid::insert(nelems, bboxes)
: insert a batch of bounding boxes into the implicit gridImplicitGrid::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 ofbegin()
andend()
forArray
andArrayView
- 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<()
) toStackArray
. This allows it to be used as a key forstd::map
- Use compiler intrinsics for axom's bit utility functions:
popCount()
,trailingZeros()
andleadingZeros()
- 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[]
andoperator()
- 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
onUniformGrid
):UniformGrid::initialize()
: creates/re-creates a uniform grid with an array of objects and their
corresponding bounding boxesUniformGrid::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)
andSLIC_ERROR_ROOT_IF(EXP, msg)
. This can be set via
slic::initialize(bool is_root = true)
orslic::setIsRoot()
. - Adds forward iterators to the
View
s andGroup
s of asidre::Group
.
These can be accessed via the range-for syntax asfor(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
Attribute
s andBuffers
s of asidre::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 anaxom::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 withBezierCurve
s as edges - Adds functions to compute the moments (area, centroid) of a
CurvedPolygon
- Adds functions to evaluate integrals over
BezierCurve
andCurvedPolygon
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
andCurvedPolygon
objects. - Adds
constants.hpp
to primal to track geometric constants. Initially includes
a value forPRIMAL_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 aTetrahedron
and anotherTetrahedron
as aPolyhedron
- 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 anaxom::ArrayOptions::Uninitialized
as the first constructor argument.axom::ArrayView<const T>
can now be created from aconst Array<T>
- Added new
ExecSpace
template parameter tospin::ImplicitGrid
.
ExecSpace
is now the second template parameter (out of three) and defaults toaxom::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()
andprimal::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 forD
-dimensional spheres - Improved efficiency for (signed) area/volume functions of
primal::Segment
,primal::Triangle
andprimal::Tetrahedron
- Updates interface for
primal::Sphere
to use more ofprimal
, e.g. usesprimal::Point
instead ofT*
to represent points - Adds
circumsphere()
functions toprimal::Triangle
andprimal::Tetrahedron
to return theSphere
that circumscribes the triangle/tetrahedron's vertices - Adds operator overloads to subtract a
primal::Vector
from aprimal::Point
to yield a newprimal::Point
- Consolidates
quest::findTriMeshIntersections*()
implementations forBVH
andImplicitGrid
BVH::find*()
batch functions now return the total number of candidate intersections found- Enables empty
axom::Array<T>
to be iterated over withbegin()/end()
- Removed
AXOM_VERSION_EXTRA
in favor ofaxom::gitSHA()
and adding the SHA toaxom::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 astd::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 exposeaxom/sol.hpp
to all users of Inlet. This greatly reduces compile times. Using this feature requires
both a derived class and includingaxom/sol.hpp
in the user code. - Renamed some overloads of function
createView
of
axom::sidre::Group
which acceptint ndims, IndexType *shape
arguments to becreateViewWithShape
orcreateViewWithShapeAndAllocate
. - 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 fileaxom/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 classsidre::IndexedCollection
- Spin:
BVH::findPoints/Rays/BoundingBoxes()
candidate search methods now accept anaxom::ArrayView<IndexType>
for theoffsets
andcounts
output arrays, and returncandidates
as anaxom::Array<IndexType>
. - Renamed
primal::Polygon::centroid()
toprimal::Polygon::vertexMean()
because it was not actually computing the centroid. axom:sidre:IndexType
is now the same type as
axom:IndexType
. Before, Sidre always usedint64_t
. Now it
respects the defineAXOM_USE_64BIT_INDEXTYPE
.- Mint now depends on the Slam component.
- Renames indirection policies in slam: The c-array indirection policy was renamed from
ArrayIndirection
toCArrayIndirection
and the axom::Array-based indirection policy was renamed fromCoreArrayIndirection
toArrayIndirection
. - Mfem dependency updated to 4.4
primal::detail::intersect_ray
now correctly identifies intersections between collinearSegment
andRay
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::Array
s - Fixed over-eager caching of restored
mfem::FiniteElementSpaces
insidre::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 typesT
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)
withnew_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 whenT
is a non-trivial type - Replaced
using
statement inSidreDataTypesIds.h
withtypedef
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