Skip to content

1.4.0

Compare
Choose a tag to compare
@ddemidov ddemidov released this 26 Nov 12:26
· 140 commits to master since this release
5f8d497
  • The codebase uses C++11 standard.
  • amgcl::mpi::amg preconditioner is implemented! This works much better than subdomain deflation which is now considered deprecated. See examples/mpi/mpi_amg.cpp and some benchmarks in https://doi.org/10.1134/S1995080219050056 (https://arxiv.org/abs/1811.05704).
  • Added wrappers for Scotch and ParMetis partitioning libraries.
  • Runtime interface has been refactored. Instead of doing
    typedef amgcl::make_solver<
        amgcl::runtime::amg<Backend>,
        amgcl::runtime::iterative_solver<Backend>
        > Solver;
    one should now
    typedef amgcl::make_solver<
        amgcl::amg<
            Backend,
            amgcl::runtime::coarsening::wrapper,
            amgcl::runtime::relaxation::wrapper
            >,
        amgcl::runtime::solver::wrapper<Backend>
        > Solver;
    This allows to reuse the same amgcl::amg implementation both for compile-time and runtime interfaces and greatly reduces compilation time and memory requirements for the library.
  • Got rid of as many Boost dependencies as possible in favor of C++11. Currently, only the runtime interface depends on Boost , as it uses boost::property_tree::ptree for defining runtime parameters.
    It should be possible to use the compile-time interface completely Boost-free. This also means that one should replace all uses of boost::tie and boost::make_tuple in amgcl-related code with std::tie and std::make_tuple. For example:
    Solver solve(std::tie(n, ptr, col, val));
    std::tie(iters, error) = solve(f, x);
  • Provide amgcl::backend::bytes() function that returns (sometimes approximately) the amount of memory allocated for an amgcl object. std::string amgcl::backend::human_readable_memory(size_t) converts bytes to a human-readable size string (e.g. 1024 is converted to 1 K).
  • Support for mixed-precision computations (where iterative solver and preconditioner use different precisions).
  • MPI versions of CPR preconditioners. Support for statically-sized matrices in global preconditioners of CPR. Support for mixed-precision in global and pressure-specific parts of CPR.
  • Helper functions for the computation of rigid body modes (for use as near null space vectors in structural problems) from 2D or 3D coordinates.
  • Improvements for the Schur pressure correction preconditioner.
  • Added Richardson and PreOnly (only apply the preconditioner once) iterative solvers. The latter is intended for use as a nested solver in composite preconditioners, such as Schur pressure correction.
  • epetra_map was moved to the adapter namespace.
  • Eigen backend was split into adapter and backend part.
  • amgcl::make_scaling_solver has been replaced with amgcl::scaled_problem adapter.
  • Added tutorials to the documentation.
  • Many bug fixes and minor improvements.