35#include "arccore/alina/BuiltinBackend.h"
36#include "arccore/alina/Adapters.h"
37#include "arccore/alina/PreconditionedSolver.h"
38#include "arccore/alina/AMG.h"
39#include "arccore/alina/Coarsening.h"
40#include "arccore/alina/Relaxation.h"
41#include "arccore/alina/ConjugateGradientSolver.h"
42#include "arccore/alina/StaticMatrix.h"
43#include "arccore/alina/Adapters.h"
45#include "arccore/alina/IO.h"
46#include "arccore/alina/Profiler.h"
50int main(
int argc,
char *argv[]) {
53 std::cerr <<
"Usage: " << argv[0] <<
" <matrix.mtx>" << std::endl;
57 auto& prof = Alina::Profiler::globalProfiler();
61 std::vector<ptrdiff_t> ptr, col;
62 std::vector<double> val;
66 std::cout <<
"Matrix " << argv[1] <<
": " << rows <<
"x" << cols << std::endl;
70 std::vector<double> f(rows, 1.0);
74 std::vector<double> D(rows, 1.0);
75 for(ptrdiff_t i = 0; i < rows; ++i) {
76 for(ptrdiff_t j = ptr[i], e = ptr[i+1]; j < e; ++j) {
78 D[i] = 1 /
sqrt(val[j]);
85 for(ptrdiff_t i = 0; i < rows; ++i) {
86 for(ptrdiff_t j = ptr[i], e = ptr[i+1]; j < e; ++j) {
87 val[j] *= D[i] * D[col[j]];
95 auto A = std::tie(rows, ptr, col, val);
116 prm.solver.maxiter = 500;
122 auto Ab = Alina::adapter::block_matrix<dmat_type>(A);
123 Solver solve(Ab, prm);
127 std::cout << solve << std::endl;
130 std::vector<double> x(rows, 0.0);
133 auto f_ptr =
reinterpret_cast<dvec_type*
>(f.data());
134 auto x_ptr =
reinterpret_cast<dvec_type*
>(x.data());
144 std::cout <<
"Iters: " << r.nbIteration() << std::endl
145 <<
"Error: " << r.residual() << std::endl
146 << prof << std::endl;
Algebraic multigrid method.
Conjugate Gradients solver.
Convenience class that bundles together a preconditioner and an iterative solver.
Vue d'un tableau d'éléments de type T.
__host__ __device__ double sqrt(double v)
Racine carrée de v.
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
Sparse approximate interface smoother.
Smoothed aggregation coarsening.