Releases: ddemidov/amgcl
Releases · ddemidov/amgcl
1.4.5
1.4.4
1.4.3
- Fast rebuild of the MPI AMG hierarchy in case the system matrix structure has not changed.
- Support block valued backends with smoothed aggregation coarsening when user provides near nullspace components. This is implemented with help of hybrid backends,
relaxation::as_block, andcoarsening::as_scalar. See the "Using near null-space components" tutorial for more details. - Implement
backend::reinterpret_as_rhs()helper function for easy reinterpretation of scalar vectors as block-valued. - Support complex types in MPI solvers.
- Minor improvements and bug fixes.
1.4.2
- Improved documentation
- Partial rebuild of the AMG hierarchy using new matrix, and reusing
prolongation and restriction operators. - Allow to use null-space vectors with MPI aggregation
- Implemented ILUP(k). The non-zero pattern of A^k is used to determine
the fill-in, which may be beneficial for non-symmetric systems - Implementation of experimental deflated solver
prm.solver.ns_search=trueignores trivial solution for zero RHS.
Useful in search of the null-space vectors of the system- Published Docker image with compiled examples
- Removed SIMPLE preconditioner, which may be replaced with SchurPC
- Minor fixes and improvements.
1.4.0
- The codebase uses C++11 standard.
amgcl::mpi::amgpreconditioner is implemented! This works much better than subdomain deflation which is now considered deprecated. Seeexamples/mpi/mpi_amg.cppand 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
one should now
typedef amgcl::make_solver< amgcl::runtime::amg<Backend>, amgcl::runtime::iterative_solver<Backend> > Solver;This allows to reuse the sametypedef amgcl::make_solver< amgcl::amg< Backend, amgcl::runtime::coarsening::wrapper, amgcl::runtime::relaxation::wrapper >, amgcl::runtime::solver::wrapper<Backend> > Solver;amgcl::amgimplementation 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::ptreefor 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 ofboost::tieandboost::make_tuplein amgcl-related code withstd::tieandstd::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 to1 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_mapwas moved to theadapternamespace.- Eigen backend was split into adapter and backend part.
amgcl::make_scaling_solverhas been replaced withamgcl::scaled_problemadapter.- Added tutorials to the documentation.
- Many bug fixes and minor improvements.
1.3.99
- The code base uses C++11 standard.
amgcl::mpi::amgpreconditioner is implemented! This works much better than subdomain deflation which is now considered deprecated. Seeexamples/mpi/mpi_amg.cppand 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
one should now
typedef amgcl::make_solver< amgcl::runtime::amg<Backend>, amgcl::runtime::iterative_solver<Backend> > Solver;This allows to reuse the sametypedef amgcl::make_solver< amgcl::amg< Backend, amgcl::runtime::coarsening::wrapper, amgcl::runtime::relaxation::wrapper >, amgcl::runtime::solver::wrapper<Backend> > Solver;amgcl::amgimplementation both for compile-time and runtime interfaces, and greately 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::ptreefor 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 ofboost::tieandboost::make_tuplein amgcl-related code withstd::tieandstd::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 to1 K). - Initial 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.
epetra_mapwas moved toadapternamespace.- Eigen backend was split into adapter and backend part.
amgcl::make_scaling_solverhas been replaced withamgcl::scaled_problemadapter.
This is marked as pre-release, because the documentation still needs to be updated.
1.2.0
- Change default value of
smoothed_aggregation.aggr.eps_strong
from 0 to 0.08. This should work better for anisotropic cases. - Pressure mask may be set with a pattern in Schur pressure correction
preconditioner. - When using async_setup, allow to exit initialization thread early in
case the solution has already converged. - Stable implementation of inner product in OpenMP backend. This makes
the solution deterministic for a fixed number of OpenMP threads. - Support non-zero initial condition in BiCGStab(L).
- Switch implementation of BiCGStab(L) to Fokkema's version [1].
- Support both left and right preconditioning in BiCGStab, BiCGStab(L),
GMGES, CG. - Improve performance/scalability of
mpi::subdomain_deflation. - Minor bug fixes and improvements.
[1] Fokkema, Diederik R. Enhanced implementation of BiCGstab (l) for
solving linear systems of equations. Universiteit Utrecht.
Mathematisch Instituut, 1996.
1.1.0
- Improve profiling: allow users to configure profiling operations.
- Implement
adapter::reorderfor matrices and vectors. Allows to
transparently apply Cuthill-McKee reordering to the system matrix and
RHS before solution. - Improve performance of Schur pressure correction preconditioner by
(optionally) approximating inverse ofKuumatrix with its inverted
diagonal. - Use power iteration to estimate spectral radius in
smoothed_aggregation.
This improves convergence rate at the cost of setup time.
The total time is usually improved, but may suffer on GPGPU backends. - Adding IDR(s) iterative solver (http://ta.twi.tudelft.nl/nw/users/gijzen/IDR.html).
- Improve performance and scalability of
mpi::subdomain_deflation
preconditioner. - Support matrix-free solution with
mpi::subdomain_deflation. - Provide
amgcl::put(ptree p, string s)whereshaskey=valueformat.
This makes parsing of command line parameters easier. - Add shared and distributed memory benchmarks to the documentation.
- Add Clang and OSX tests on Travis-CI.
- Minor bug fixes and improvements.
1.0.0
- Implemented OpenMP versions of incomplete LU smoothers (
ilu0,iluk,ilut), and got rid of now obsoleteparallel_ilu0smoother. Parallel algorithm is based on level scheduling approach and is automatically selected when there are four or more OpenMP threads. - Reimplemented multicolor Gauss-Seidel smoother, merged the new implementation with
gauss_seidel, and got rid of obsoletemulticolor_gauss_seidelsmoother. Parallel algorithm is based on level scheduling approach and is automatically selected when there are four or more OpenMP threads. - Code cleanup, minor improvements and bug fixes.