Arcane  4.2.3.0
Developer documentation
Loading...
Searching...
No Matches
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 * 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 "arccore/alina/AlinaLib.h"
20#include "arccore/common/Array.h"
21
22#include "./SampleProblemCommon.h"
23
24#include <iostream>
25#include <vector>
26
27#include <gtest/gtest.h>
28
29using namespace Arcane;
30
31using namespace Arcane::AlinaLib;
32void _doTest(eAlinaSolverType solver_type)
33{
34 std::cout << "Testing AlinaLib\n";
35
36 std::vector<int> ptr;
37 std::vector<int> col;
38 std::vector<double> val;
39 std::vector<double> rhs;
40
41 int n = Alina::PoissonProblemGenerator::createSequentialMatrix(12, val, col, ptr, rhs);
42
44
45 prm.setSolverType(solver_type);
46
47 prm.setInt32("precond.coarse_enough", 1000);
48 prm.setString("precond.coarsening.type", "smoothed_aggregation");
49 prm.setReal("precond.coarsening.aggr.eps_strong", 1e-3f);
50 prm.setString("precond.relax.type", "spai0");
51
52 //prm.setString("solver.type", "bicgstabl");
53 //prm.setInt32("solver.L", 1);
54 prm.setSolverMaxIteration(100);
55
56 AlinaCSRMatrixView matrix_view(n, ptr.data(), col.data(), val.data());
57 SmallSpan<const double> rhs_view(rhs.data(), rhs.size());
58 AlinaSequentialSolver solver(prm, matrix_view);
59
61 x.fill(0.0);
62 AlinaConvergenceInfo cnv = solver.solve(rhs_view, x.smallSpan());
63
64 // Solve same problem again, but explicitly provide the matrix this time:
65 std::fill(x.begin(), x.end(), 0);
66 cnv = solver.solveMatrix(matrix_view, rhs_view, x.smallSpan());
67
68 std::cout << "Iterations: " << cnv.iterations << std::endl
69 << "Error: " << cnv.residual << std::endl;
70
71 ASSERT_NEAR(cnv.residual, 0.0, 1e-7);
72}
73
74TEST(alina_test_alina_lib, basic_cg)
75{
76 _doTest(eAlinaSolverType::ConjugateGradient);
77}
78
79TEST(alina_test_alina_lib, basic_bicgstab)
80{
81 _doTest(eAlinaSolverType::BiCGStab);
82}
83
84TEST(alina_test_alina_lib, basic_gmres)
85{
86 _doTest(eAlinaSolverType::GMRES);
87}
CSR Matrix view used in AlinaLib.
Definition AlinaLib.h:192
Handle parameters for solvers.
Definition AlinaLib.h:130
void setString(const char *name, const char *value)
Set floating point parameter in the parameter list.
Definition AlinaLib.cc:234
void setInt32(const char *name, Int32 value)
Set Int32 parameter in the parameter list.
Definition AlinaLib.cc:216
void setReal(const char *name, Real value)
Set floating point parameter in the parameter list.
Definition AlinaLib.cc:228
View of an array of elements of type T.
Definition Span.h:803
1D data vector with value semantics (STL style).
-- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature --