Skip to content

Changelog

Paul Kuberry edited this page Jan 10, 2023 · 12 revisions

Changelog

Changes in version 1.5.5 (changes from 1.5.0)

Minimum requirements

  • C++ 14 or greater compliant compiler
  • Python >= 3.6 (if setting Compadre_USE_PYTHON:BOOL=ON)
  • CMake >= 3.16

Updates

  • Updated vendored pybind11 to version 2.9.2
  • Updated vendored Kokkos and Kokkos-Kernels to version 3.7
  • Refactor of KokkosParser class to remove initialize and finalize member functions

Changes in version 1.5.0 (changes from 1.4.1)

Minimum requirements

  • C++ 14 or greater compliant compiler
  • Python >= 3 (if setting Compadre_USE_PYTHON:BOOL=ON)
  • CMake >= 3.16

New features

  • Added BernsteinPolynomial basis as ReconstructionSpace option

  • In pycompadre:

    • ParticleHelper, GMLS, and SamplingFunctional objects are now pickleable
    • Added get* functionality to GMLS class and NeighborLists class
    • applyStencil and applyStencilSingleTarget now supports additional evaluation sites
    • Added Quadrature class
  • Cleaned up GMLS class member variables

Changes to vendored packages

  • Updated Kokkos and Kokkos-Kernels to 3.6.01

Changes in version 1.4.1 (changes from 1.3.0)

  • Added .test() to pycompadre package
  • Changed Github organization from github.com/SNLComputation to github.com/sandialabs
  • Added Sphinx documentation for pycompadre (https://sandialabs.github.io/compadre/pycompadre/)
  • Added new weighting kernels Sigmoid and Cosine
  • Added second parameter to Power weighting kernel and to Sigmoid (making it a Logistic)
  • Added 1D and 2D pycompadre examples
    • in pycompadre/examples/pycompadre_*.py
      • *={example_1d, example_2d, kernels}
  • Refactor of GMLS class:
    • Functors extracted from GMLS class and made standalone
    • Smaller const data structs passed to standalone functors
    • Reuse of team policy from functor call to functor call (overhead savings)
    • Applying coefficients to evaluation of target operations on basis sped up significantly (>4x)
    • All solution access through GMLS->getAlphas(...) is now accessed through
      GMLS->getSolutionSetHost()->getAlphas(...) or GMLS->getSolutionSetDevice()->getAlphas(...)
      • If device!=host, getSolutionSetHost() will cause deep_copy of alphas if not already copied
  • Added PointConnections class that contains source and target coordinates as well as neighbor lists
  • Update pybind11 to v2.7
  • Added applyStencilAllTargetsAllAdditionalEvaluationSites for pycompadre
  • Added additional evaluation site option for applyStencilSingleTarget in pycompadre
  • Added computeMinNumNeighbors and getMinNumNeighbors to NeighorLists in pycompadre
  • Added getAlpha and setAdditionalEvaluationSitesData to pycompadre
  • Bug fix for uninitialized values in thread scratch space
  • Bug fix CUDA
  • Bug fix for initialize flag in KokkosParser
  • Added Compadre_UnitTests.cpp using gtest
  • Added Compadre_USE_MPI as a settable option in CMake
  • Added Compadre_COVERAGE CMake variable (default OFF)

Changes in version 1.3.0 (changes from 1.2.0)

  • Replaced QR, SVD, and LU with QR+Pivoting algorithm:
    • Removes reliance on LAPACK, CUBLAS, and DNSOLVER
    • Refactored RHS storage space for when QR or SVD are specified as DenseSolverType to only store 1D array (diagonal of RHS which was diagonal matrix to begin with). Huge memory savings here. Also, computational savings as well since U'T * B in algorithm is actual just a scaling of U rather than a matrix-matrix multiply
    • For LU case, full RHS matrix is still stored
    • Reliance on Kokkos + KokkosKernels 3.3+ in order to get rectangular QR+Pivoting solutions going forward
    • As a result of Kokkos version requirement, requires Trilinos version that will require C++14 support
    • If building toolkit in a way that builds Kokkos+KokkosKernels for the user, still using an older version (with rectangular QR+Pivoting support) that only requires C++11. If in the past Compadre built Kokkos+KokkosKernels for you, then you still only require C++11
  • Fix of variable type (int was temporarily storing a long unsigned value)
  • Fixed bug for case with no target sites specified (now does nothing)
  • Various fixes to NeighborLists class use
  • In pycompadre, added access to setTangentBundle, getTangentBundle, setReferenceOutwardNormalDirection, getReferenceOutwardNormalDirection, and NeighborLists class
  • Adding sampling functional specification to ApplyStencil function in pycompadre
  • Added ApplyStencilSingleTarget for scenario where there is always one target site in order to prevent allocation of memory from heap and extra interior loops where the is only a double value returned

Changes in version 1.2.0 (changes from 1.1.0)

  • Modified GMLS class to support the new NeighborsLists class
  • Switched NeighborLists and alphas storage from the assumption of equal number of neighbors per target site to an offset type indexing similar to a compressed row storage. Significant memory savings for non-uniform point clouds.
  • Added Python nose test to examples folder
  • Assertions for checking neighborhood sizes in GMLS
  • Added WeightingFunctionType::CubicSpline

Changes in version 1.1.0 (changes from 1.0.3)

  • Fix to batches when calling generateAlphas(). Now accepts two arguments, (# of batches, and bool keep_coefficients). Bug for certain size batches has been fixed.
  • Divergence-free basis added in a way that supports evaluation at locations other than just target sites, and arbitrary polynomial order.
  • Python module for Compadre renamed from 'compadre' to 'pycompadre'.
  • pycompadre now based on pybind11 rather than SWIG.
  • Compadre is now integrated into Trilinos.
  • Updates in Changelog will now be given at the version minor increment.

Changes in version 1.0.3 (changes from 1.0.2)

  • Kokkos Kernels source code now packaged in the toolkit, in addition to Kokkos. Users are still able to provide their own pre-built Kokkos and Kokkos Kernels install by specifying KokkosCore_PREFIX and KokkosKernels_PREFIX in CMake.
  • Configuration options now propagate seamlessly into Kokkos and Kokkos Kernels. For instance, Kokkos_ENABLE_OPENMP can be specified directly (rather than Compadre_USE_OPENMP).
  • All LAPACK, BLAS, MKL, and CUDA linking is found/performed via Kokkos Kernels.
  • Compadre Toolkit can now be configured during "pip install compadre" by adding "--install-option='--cmake-file=/absolute/path/to/some/cmake/file.txt'" where file.txt contains the definition of all needed CMake variables, one per line.
  • Now checks whether solves were successful (previously no check).
  • Added 2D support (edges of 2D triangles) for Raviart-Thomas and Nedelec type sampling functionals.
  • Added 2D support for cell-averaged sampling functionals.
  • 'problem type'={'standard','manifold'} and 'dense solver type'={'LU','QR','SVD'} can now be specified for GMLS problems.

Changes in version 1.0.2 (changes from 1.0.1)

  • Kokkos source code now packaged in the toolkit, which is automatically configured and built. Users are still able to provide their own pre-built Kokkos install by specifying KokkosCore_PREFIX in CMake.
  • Added support for additional evaluation sites, which are sites that a polynomial reconstruction is to be evaluated, but is not the target site about which the polynomial reconstruction was made.
  • Exposed polynomial coefficients from the GMLS class through the Python interface.
  • Fixed Pthread detection from Kokkos configuration.
  • Added Python functions that generate neighbors lists and set the result in the GMLS class.
  • Defined a global ordinal (long long int) and cast to it before doing any pointer arithmetic for tiled matrix starting locations.
  • Added specification of a reference outward normal direction that is used to keep calculated outward normal vectors consistent [only relevant to manifold problems].
  • Made memory usage more efficient by calculating the maximum number of neighbors rather than using the neighbor list matrix dimension size.
  • Changed SamplingFunctionals from an ENUM with associated constexpr int arrays for characteristics to a constexpr struct that can be more easily extended by users.

Changes in version 1.0.1 (changes from 1.0.0)

  • Fixed README.md and added installation instructions as their own .md file

  • Updated Python scripts to be compliant with Python 3.x

Changes in version 1.0.0 (changes from 0.0.1)

  • Added documentation for GMLS class.

  • Added storage of a batch of matrices in GMLS, which when combined with tags for functors, allowed for large code blocks to be broken up into smaller and more readable functions.

  • Use CuBLAS and CuSolverDN when on the GPU for QR and SVD factorizations via a batched dgels and a batched SVD. We now use dgels and dgelsd when on the CPU using LAPACK. This allowed for a significant reduction in the amount of code we need to support in GMLS_LinearAlgebra.

  • Separated member functions of the GMLS class into GMLS.cpp, GMLS_ApplyTargetEvaluations.hpp, GMLS_Basis.hpp, GMLS_Misc.hpp, GMLS_Operators.hpp, GMLS_Quadrature.hpp, and GMLS_Targets.hpp.

  • Removed all BOOST dependencies from the toolkit. Now, either building using Kokkos on the GPU (Cuda) or providing LAPACK is required.