Skip to content

0.7.0

Compare
Choose a tag to compare
@ddemidov ddemidov released this 19 Nov 12:49
· 1009 commits to master since this release

This is rather big and an API breaking release!

  • All runtime parameters (namely, coarsening type, relaxation type, and solver
    type) were moved to the generic parameter structure (stored in
    boost::property_tree). So the following code:
boost::property_tree::ptree prm;
typedef amgcl::runtime::make_solver< amgcl::backend::builtin<double> > Solver;
Solver S(amgcl::runtime::coarsening::smoothed_aggregation,
     amgcl::runtime::relaxation::spai0,
     amgcl::runtime::solver::bicgstab,
     A, prm);

would have to be changed to

boost::property_tree::ptree prm;
typedef amgcl::runtime::make_solver< amgcl::backend::builtin<double> > Solver;
prm.put("precond.coarsening.type", amgcl::runtime::coarsening::smoothed_aggregation);
prm.put("precond.relaxation.type", amgcl::runtime::relaxation::spai0);
prm.put("solver.type",     amgcl::runtime::solver::bicgstab);
Solver S(A, prm);

This is done as part of the effort to generalize use of preconditioners
in the library, so that any preconditioner supported by AMGCL could be
uniformly constructed with the system matrix and the parameters.

  • amg::top_matrix() method was renamed to amg::system_matrix() for the same reason.

  • The use of preconditioners in AMGCL was generalized. A class that may be used
    as a preconditioner should have the following properties:

    • Provide public type backend_type for its backend.
    • Provide public type params containing its parameters.
    • Have constructor that takes three arguments:
    • System matrix
    • Parameters
    • Backend parameters
    • Export the system matrix in the backend format through system_matrix()
      method.

    A preconditioner may be used in the following contexts:

    • As a parameter to an iterative solver.
    • As a template parameter to make_solver class.
    • As a template parameter to a two-step preconditioner (CPR and SIMPLE).
    • As a template parameter to subdomain deflation class (as a local preconditioner).
  • Added amgcl::as_preconditioner<Backend, Relaxation> and amgcl::runtime::as_preconditioner<Backend>
    wrapper classes that allow to use smoothers as preconditioners.

  • Added ILUT(p,tau) smoother/preconditioner.

  • Implemented Chow and Patel version of parallel ILU. This allowed to enable
    ILU-type smoothers on all backends, but may not work as well as serial version
    for some problems.

  • Provided a wrapper for cuSPARSE implementation of ILU0 on CUDA backend.

  • Added adapter for complex-valued matrices. This uses an equivalent real
    formulation (ERF) for the matrix so that it may be solved with AMGCL.

  • Added zero copy matrix adapter for CRS matrices. The adapter allows to skip
    copy and thus save some memory for matrices that are binary compatible with
    internal AMGCL storage. Basically, that means that row pointer and column
    number arrays should be either signed or unsigned ptrdiff_t.

  • Provided wrapper interface for Fortran.