Releases: ddemidov/amgcl
0.8.1
- Implemented LGMRES solver ("Loose" GMRES, [BaJM05]).
- Implemented FGMRES solver (Flexible GMRES, [Saad03]).
- GMRES uses real residual instead of preconditioned one in termination condition.
- Performance improvements in components using QR decomposition (spai1,
aggregation with null-space provided). - Provided python examples.
- Minor bug fixes and improvements.
0.8.0
- Updated two-stage preconditioners
- Replaced SIMPLE preconditioner with Schur complement pressure correction.
- Implemented MPI version of Schur complement pressure correction preconditioner.
- Made CPR preconditioner actually work.
- Breaking changes
- Renamed
amgcl/amgcl.hpp
->amgcl/amg.hpp
- Renamed
- Added support for complex and non-scalar values for coefficients/unknowns.
- Implemented ILU(k) smoother/preconditioner.
- Added MPI block-preconditioner wrapper.
- Introduced
mpi::make_solver
. - Allow using make_solver as preconditioner.
- Improve Matrix-Matrix product performance for many-cored CPUs.
- Provide MatrixMarket format I/O functions.
- Generalize profiler class, provide a couple of custom performance counters.
- Improve coarse solution performance on GPGPU backends.
- Allow checking for consistency of runtime parameters.
- Move documentation to http://amgcl.readthedocs.org.
- Various bugfixes and improvements.
0.7.0
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 toamg::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).
- Provide public type
-
Added
amgcl::as_preconditioner<Backend, Relaxation>
andamgcl::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 unsignedptrdiff_t
. -
Provided wrapper interface for Fortran.
0.6.4
This is the last release before API-breaking 0.7.0
- Implemented two-step preconditioners for Navier-Stokes type
problems (CPR and SIMPLE). - Implemented multicolor Gauss-Seidel smoother
- Get rid of mandatory dependence on std::chrono
- Bug fixes and minor improvements
0.6.3
- Use norm of right-hand side instead of initial error for scaling residuals in
iterative solvers. This yields consistent results when starting with a decent
initial approximation. - Provide an HPX backend.
- Accept near null-space vectors for aggregation-based coarsening.
- Added SPAI(1) smoother (may work better than SPAI(0), but is extremely slow
to setup for larger problems). - Iterative solvers now provide
apply()
methods, so that they may be used as
preconditioners themselves. - Various fixes and improvements.
0.6.2
- Added adapter for ublas types.
Providesamgcl::backend::map()
forublas::compressed_matrix
and allows
to use ublas vectors with builtin backend. - Moved make_solver parameters into single params struct
This is an API breaking change!
This unifies treatment of amg and solver params inamgcl::make_solver
,
amgcl::runtime::make_solver
, andamgcl::mpi::subdmain_deflation
classes.
Now, whenever a class contains both an amg hierarchy and an iterative
solver, the amg parameters may be accessed through the class
params::amg
, and the solver parameters -- throughparams::solver
. - Fixed pyamgcl for use with python3 and arch linux.
0.6.1
0.6.0
This is a rather big release with lots of new features.
- Added
crs_builder
backend. The backend is similar tocrs_tuple
in the sense
that it is only used for initialization of AMG hierarchy. The difference is
thatcrs_builder
does not need fully constructed matrix in CRS format (which
would be copied into AMG anyway), but builds matrix rows as needed. This
results in reduced memory requirements. - Implemented MPI solver with subdomain deflation in collaboration with
@RiccardoRossi. The method allows solution on parallel machines with
distributed memory and has very good scalability. - Implemented BiCGStab(L) iterative solver.
- Added an adapter for
Epetra_CrsMatrix
from Trilinos project. - Added SkylineLU sparse direct solver. This allows for larger coarse levels in
builtin backend, which improves convergence and solve time. Again, thanks to
@RiccardoRossi for help. - Added classes in
amgcl::runtime
namespace that allow for runtime
configuration of multigrid template parameters. This makes AMGCL easy to use
in 3rd party libraries/applications. - Provided Delphi wrapper for AMGCL.
- Provided python wrapper for AMGCL. May be installed by
pip install pyamgcl
- New tests and examples
- Various improvements and bug fixes.
0.5.0 aka v2
This is a major change in the library interface and implementation.
The code base has been rewritten from scratch to decouple various components of
the AMG method, such as backends, coarseners, smoothers, and iterative solvers.
This makes extending the library much easier. See the README for more information.
0.3.2 aka v1
The main purpose of this release is to make a snapshot of the current library API before switching to v2 branch.
Some changes that were made since the last release:
- Added Blaze library backend (https://code.google.com/p/blaze-lib)
- Use Kahan summation in implementation of inner_product for the VexCL backend
- Bug fixes and minor changes