35#include "arccore/alina/BuiltinBackend.h"
36#include "arccore/alina/Adapters.h"
37#include "arccore/alina/StaticMatrix.h"
38#include "arccore/alina/SchurPressureCorrectionPreconditioner.h"
39#include "arccore/alina/PreconditionedSolver.h"
40#include "arccore/alina/make_block_solver.h"
41#include "arccore/alina/AMG.h"
42#include "arccore/alina/ConjugateGradientSolver.h"
43#include "arccore/alina/PreconditionerOnlySolver.h"
44#include "arccore/alina/Coarsening.h"
45#include "arccore/alina/Relaxation.h"
47#include "arccore/alina/IO.h"
48#include "arccore/alina/Profiler.h"
53int main(
int argc,
char* argv[])
58 std::cerr <<
"Usage: " << argv[0] <<
" <matrix.bin> <rhs.bin> <nu>" << std::endl;
63 auto& prof = Alina::Profiler::globalProfiler();
67 std::vector<ptrdiff_t> ptr, col;
68 std::vector<double> val, rhs;
71 Alina::IO::read_crs(argv[1], rows, ptr, col, val);
72 Alina::IO::read_dense(argv[2], rows, cols, rhs);
73 std::cout <<
"Matrix " << argv[1] <<
": " << rows <<
"x" << rows << std::endl;
74 std::cout <<
"RHS " << argv[2] <<
": " << rows <<
"x" << cols << std::endl;
78 ptrdiff_t nu = std::stoi(argv[3]);
83 auto A = std::tie(rows, ptr, col, val);
106 prm.precond.simplec_dia =
false;
107 prm.precond.pmask.resize(rows);
108 for (ptrdiff_t i = 0; i < rows; ++i)
109 prm.precond.pmask[i] = (i >= nu);
113 Solver solve(A, prm);
117 std::cout << solve << std::endl;
120 std::vector<double> x(rows, 0.0);
127 std::cout <<
"Iters: " << r.nbIteration() << std::endl
128 <<
"Error: " << r.residual() << std::endl
129 << prof << std::endl;
Algebraic multigrid method.
Conjugate Gradients solver.
Convenience class that bundles together a preconditioner and an iterative solver.
Solver which only apply preconditioner once.
Allows to use an AMG smoother as standalone preconditioner.
Schur-complement pressure correction preconditioner.
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
Non-smoothed aggregation.
Sparse approximate interface smoother.