Arcane  v4.1.10.0
Documentation développeur
Chargement...
Recherche...
Aucune correspondance
TestComplexErf.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 <gtest/gtest.h>
20
21#include <complex>
22
23#include "arccore/alina/BuiltinBackend.h"
24#include "arccore/alina/AMG.h"
25#include "arccore/alina/PreconditionedSolver.h"
26
27#include "arccore/alina/Coarsening.h"
28#include "arccore/alina/Relaxation.h"
29
30#include "arccore/alina/ConjugateGradientSolver.h"
31#include "arccore/alina/BiCGStabSolver.h"
32#include "arccore/alina/GMRESSolver.h"
33
34#include "arccore/alina/Adapters.h"
35#include "arccore/alina/Profiler.h"
36
37#include "SampleProblemCommon.h"
38
39using namespace Arcane;
40using namespace Arcane::Alina;
41
42TEST(alina_test_complex, complex_matrix_adapter)
43{
44 typedef std::complex<double> complex;
45
46 std::vector<int> ptr;
47 std::vector<int> col;
48 std::vector<complex> val;
49 std::vector<complex> rhs;
50
51 size_t n = sample_problem(32, val, col, ptr, rhs);
52
53 std::vector<complex> x(n, complex(0.0, 0.0));
54
55 typedef Alina::BuiltinBackend<double> Backend;
56
58 prm.put("precond.coarsening.aggr.block_size", 2);
59
62
63 SolverType solve(Alina::adapter::complex_matrix(std::tie(n, ptr, col, val)), prm);
64
65 std::cout << solve.precond() << std::endl;
66
67 auto f_range = Alina::adapter::complex_range<const double>(rhs);
68 auto x_range = Alina::adapter::complex_range<double>(x);
69
70 SolverResult r = solve(f_range, x_range);
71
72 ASSERT_NEAR(r.residual(), 0.0, 1e-8);
73
74 std::cout << "iters: " << r.nbIteration() << std::endl
75 << "resid: " << r.residual() << std::endl;
76}
Algebraic multigrid method.
Definition AMG.h:71
Convenience class that bundles together a preconditioner and an iterative solver.
Result of a solving.
Definition AlinaUtils.h:52
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-