Arcane  v4.1.10.0
Documentation développeur
Chargement...
Recherche...
Aucune correspondance
AlinaLibraryUsage.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 * This file is based on the work on AMGCL library (version march 2026)
11 * which can be found at 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 <iostream>
20#include <vector>
21
22#include <../AlinaLib.h>
23#include "SampleProblemCommon.h"
24
25int main()
26{
27 std::vector<int> ptr;
28 std::vector<int> col;
29 std::vector<double> val;
30 std::vector<double> rhs;
31
32 int n = sample_problem(12l, val, col, ptr, rhs);
33
34 AlinaParameters* prm = AlinaLib::params_create();
35
36 AlinaLib::params_set_int(prm, "precond.coarse_enough", 1000);
37 AlinaLib::params_set_string(prm, "precond.coarsening.type", "smoothed_aggregation");
38 AlinaLib::params_set_float(prm, "precond.coarsening.aggr.eps_strong", 1e-3f);
39 AlinaLib::params_set_string(prm, "precond.relax.type", "spai0");
40
41 AlinaLib::params_set_string(prm, "solver.type", "bicgstabl");
42 AlinaLib::params_set_int(prm, "solver.L", 1);
43 AlinaLib::params_set_int(prm, "solver.maxiter", 100);
44
45 AlinaSequentialSolver* solver = AlinaLib::solver_create(n, ptr.data(), col.data(), val.data(), prm);
46
47 AlinaLib::params_destroy(prm);
48
49 std::vector<double> x(n, 0);
50 AlinaConvergenceInfo cnv = AlinaLib::solver_solve(solver, rhs.data(), x.data());
51
52 // Solve same problem again, but explicitly provide the matrix this time:
53 std::fill(x.begin(), x.end(), 0);
54 cnv = AlinaLib::solver_solve_matrix(
55 solver, ptr.data(), col.data(), val.data(),
56 rhs.data(), x.data());
57
58 std::cout << "Iterations: " << cnv.iterations << std::endl
59 << "Error: " << cnv.residual << std::endl;
60
61 AlinaLib::solver_destroy(solver);
62}