Releases: ddemidov/amgcl
Releases · ddemidov/amgcl
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=true
ignores 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::amg
preconditioner is implemented! This works much better than subdomain deflation which is now considered deprecated. Seeexamples/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
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::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 ofboost::tie
andboost::make_tuple
in amgcl-related code withstd::tie
andstd::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_map
was moved to theadapter
namespace.- Eigen backend was split into adapter and backend part.
amgcl::make_scaling_solver
has been replaced withamgcl::scaled_problem
adapter.- Added tutorials to the documentation.
- Many bug fixes and minor improvements.
1.3.99
- The code base uses C++11 standard.
amgcl::mpi::amg
preconditioner is implemented! This works much better than subdomain deflation which is now considered deprecated. Seeexamples/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
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::amg
implementation 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::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 ofboost::tie
andboost::make_tuple
in amgcl-related code withstd::tie
andstd::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_map
was moved toadapter
namespace.- Eigen backend was split into adapter and backend part.
amgcl::make_scaling_solver
has been replaced withamgcl::scaled_problem
adapter.
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::reorder
for 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 ofKuu
matrix 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)
wheres
haskey=value
format.
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_ilu0
smoother. 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_seidel
smoother. 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.
0.9.1
0.9.0
- Use NUMA-friendly internal data structures.
This shows measurable speed-up on NUMA systems. - Allow asynchronous amg setup.
amgcl::amg
constructor starts the setup process in a new thread. As soon
as constructor returns, the instance is ready to be used as a
preconditioner. Initially its just a single-level smoother, but when as
the new (coarser) levels are constructed, they are put to use.
In case of GPGPU backends, this should allow to overlap work between
host CPU doing setup and the compute device doing the solution. In some
cases a 2x speedup of the overall solution has been achieved. - Allow limiting number of amg levels, thus supporting using relaxation
for coarse solves. - Rewrite lgmres and fgmres in terms of Givens rotations, which should
work better with complex problems, see #34. - Use new, more effective, sparse matrix format in VexCL backend and
allow to use non-scalar values with the backend. - Modernize cmake scripts.
Provideamgcl::amgcl
imported target, so that users may justto build a program using amgcl. The imported target brings necessaryfind_package(amgcl) add_executable(myprogram myprogram.cpp) target_link_libraries(myprogram amgcl::amgcl)
compile and link options automatically. - Replace boost.python with pybind11 and
improve python interface. - Unify example codes for different backends.
- Minor improvements and bug fixes