Releases: aboria/Aboria
Releases · aboria/Aboria
Release v0.5
New Features
- new neighbourhood data structures, can be a cell list, kd-tree or hyper oct-tree.
Aboria::init_neighbour_search
no longer accepts a search radius, but an average/maximum number of particles per bucket. New neighbourhood search queries can now take any distance to search over.- more flexible neighbourhood queries that can use any integer p-norm distance measure for p > 0 (p == 1: Manhattan distance, p == 2: Euclidean distance, ... , p -> inf: Chebyshev distance)
- more efficient neighbourhood queries that trim buckets that cannot be within the search radius
- black box fast multipole method (FMM)
- can store the FMM as a H2 hierarchical matrix for repeated evaluations
- RASM-based preconditioner that can be used with Eigen iterative solvers
- OpenMP or CUDA parallelism (when using Thrust) for particle set updating, and neighbourhood searching (not yet for FMM-based methods). Note that this is not yet optimised, the performance of CUDA in particular will improve in subsequent versions)
- can update single particles within a set, for example for Monte Carlo methods, using the
Aboria::update_particles
function
Breaking Changes
Aboria::double2
,Aboria::float3
,Aboria::bool4
etc. becomeAboria::vdouble2
,Aboria::vfloat3
,Aboria::vbool4
because CUDA already use the formerAboria::delete_particles
no longer exists, instead, set particle's alive variable tofalse
and callAboria::update_particles
Release v0.4
This release:
- provides a number of improvements to radial search performance
- changes the matrix-free Eigen operators significantly. These now take generic C++ function objects, rather than symbolic expressions.
- adds a matrix-free operator using Chebyshev interpolation to speed up its operation on a vector (at a cost to accuracy).
- adds a few more bug fixes and documentation. Its goal is to accompany the paper "Particle-based and meshless methods with Aboria", submitted to the SoftwareX journal
Release v0.3
This release:
- creates a base neighbour search class that different neighbour search classes can derive from
- re-adds the serial bucket search algorithm and sets it as the default.
- reworks some of the backend to support Thrust CUDA as a vector class (This is still not fully working)
Release 0.2
This release:
- allows particle containers of any dimension (greater than 0)
- reworks the internal storage of the container class to model a set of zipped vectors. Currently uses std::vectors, but other vector types will be added in the future (e.g. CUDA Thrust vectors) using a Traits pattern.
- adds meta-functions for determining if expressions are constant, univariate or bivariate
- adds more compile-time checking of expression correctness
- updates the bucket-search neighbourhood searching algorithm to use Thrust algorithms only (via the STL library), in preparation for addition of CUDA vectors
- adds matrix-free linear algebra capabilities. Expressions can be wrapped with a matrix replacement class that implements Eigen's http://eigen.tuxfamily.org sparse matrix concept. This can be used in matrix-vector products and linear algebra solvers.
- adds examples for Radial Basis Function interpolation and solving pde's via Kansa Method
Known issues:
- compile times are slower, due to the use of Boost MPL and Fusion libraries. Boost v1.61 has seen the introduction of Boost Hana, a C++11 metaprogramming library meant to replace Fusion, which promotes significantly reduced compile-time. It is envisioned that this will eventually replace MPL and Fusion in Aboria.
- The neighbourhood searching is no longer optimised for serial use, so might be slower for small number of particles in serial.
Initial Release
Thank you for your interest in Aboria, a C++ expression template library for particle-based numerical software. It provides a container for dynamic particle sets, as well as a symbolic expression API for defining operations over each particle set.
WARNING: the API is currently still being worked out and may change in the future.