Arcane  4.2.2.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
29TEST(alina_test_alina_lib, basic)
30{
31 using namespace Arcane;
32 std::cout << "Testing AlinaLib\n";
33
34 std::vector<int> ptr;
35 std::vector<int> col;
36 std::vector<double> val;
37 std::vector<double> rhs;
38
39 int n = sample_problem(12, val, col, ptr, rhs);
40
42
43 prm.setInt32("precond.coarse_enough", 1000);
44 prm.setString("precond.coarsening.type", "smoothed_aggregation");
45 prm.setReal("precond.coarsening.aggr.eps_strong", 1e-3f);
46 prm.setString("precond.relax.type", "spai0");
47
48 prm.setString("solver.type", "bicgstabl");
49 prm.setInt32("solver.L", 1);
50 prm.setInt32("solver.maxiter", 100);
51
52 AlinaCSRMatrixView matrix_view(n, ptr.data(), col.data(), val.data());
53 SmallSpan<const double> rhs_view(rhs.data(), rhs.size());
54 AlinaSequentialSolver solver(matrix_view, &prm);
55
57 x.fill(0.0);
58 AlinaConvergenceInfo cnv = solver.solve(rhs_view, x.smallSpan());
59
60 // Solve same problem again, but explicitly provide the matrix this time:
61 std::fill(x.begin(), x.end(), 0);
62 cnv = solver.solveMatrix(matrix_view, rhs_view, x.smallSpan());
63
64 std::cout << "Iterations: " << cnv.iterations << std::endl
65 << "Error: " << cnv.residual << std::endl;
66}
CSR Matrix view used in AlinaLib.
Definition AlinaLib.h:98
Handle parameters for Alina.
Definition AlinaLib.h:60
void setInt32(const char *name, Arcane::Int32 value)
Set Int32 parameter in the parameter list.
Definition AlinaLib.cc:83
void setReal(const char *name, Arcane::Real value)
Set floating point parameter in the parameter list.
Definition AlinaLib.cc:95
void setString(const char *name, const char *value)
Set floating point parameter in the parameter list.
Definition AlinaLib.cc:101
Sequential solver.
Definition AlinaLib.h:182
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 --