Arcane  4.2.1.0
Documentation développeur
Chargement...
Recherche...
Aucune correspondance
TestAlinaLib.cc
1// -*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
2//-----------------------------------------------------------------------------
3// Copyright 2000-2026 CEA (www.cea.fr) IFPEN (www.ifpenergiesnouvelles.com)
4// See the top-level COPYRIGHT file for details.
5// SPDX-License-Identifier: Apache-2.0
6//-----------------------------------------------------------------------------
7/*---------------------------------------------------------------------------*/
8/*---------------------------------------------------------------------------*/
9/*
10 * Ce fichier est basé sur le travail effectué sur la bibliothèque AMGCL (version mars 2026)
11 * qui peut être trouvé à https://github.com/ddemidov/amgcl.
12 *
13 * Copyright (c) 2012-2022 Denis Demidov <dennis.demidov@gmail.com>
14 * SPDX-License-Identifier: MIT
15 */
16/*---------------------------------------------------------------------------*/
17/*---------------------------------------------------------------------------*/
18
19#include "arccore/alina/AlinaLib.h"
20#include "./SampleProblemCommon.h"
21
22#include <iostream>
23#include <vector>
24
25#include <gtest/gtest.h>
26
27TEST(alina_test_alina_lib, basic)
28{
29 std::cout << "Testing AlinaLib\n";
30
31 std::vector<int> ptr;
32 std::vector<int> col;
33 std::vector<double> val;
34 std::vector<double> rhs;
35
36 int n = sample_problem(12l, val, col, ptr, rhs);
37
38 AlinaParameters* prm = AlinaLib::params_create();
39
40 AlinaLib::params_set_int(prm, "precond.coarse_enough", 1000);
41 AlinaLib::params_set_string(prm, "precond.coarsening.type", "smoothed_aggregation");
42 AlinaLib::params_set_float(prm, "precond.coarsening.aggr.eps_strong", 1e-3f);
43 AlinaLib::params_set_string(prm, "precond.relax.type", "spai0");
44
45 AlinaLib::params_set_string(prm, "solver.type", "bicgstabl");
46 AlinaLib::params_set_int(prm, "solver.L", 1);
47 AlinaLib::params_set_int(prm, "solver.maxiter", 100);
48
49 AlinaSequentialSolver* solver = AlinaLib::solver_create(n, ptr.data(), col.data(), val.data(), prm);
50
51 AlinaLib::params_destroy(prm);
52
53 std::vector<double> x(n, 0);
54 AlinaConvergenceInfo cnv = AlinaLib::solver_solve(solver, rhs.data(), x.data());
55
56 // Résoudre le même problème à nouveau, mais fournir explicitement la matrice cette fois-ci:
57 std::fill(x.begin(), x.end(), 0);
58 cnv = AlinaLib::solver_solve_matrix(solver, ptr.data(), col.data(), val.data(),
59 rhs.data(), x.data());
60
61 std::cout << "Iterations: " << cnv.iterations << std::endl
62 << "Error: " << cnv.residual << std::endl;
63
64 AlinaLib::solver_destroy(solver);
65}