Arcane  v4.1.10.0
Documentation développeur
Chargement...
Recherche...
Aucune correspondance
RelaxationRuntime.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/* RelaxationRuntime.cc (C) 2000-2026 */
9/* */
10/*---------------------------------------------------------------------------*/
11/*---------------------------------------------------------------------------*/
12
13/*
14 * This file is based on the work on AMGCL library (version march 2026)
15 * which can be found at https://github.com/ddemidov/amgcl.
16 *
17 * Copyright (c) 2012-2022 Denis Demidov <dennis.demidov@gmail.com>
18 * SPDX-License-Identifier: MIT
19 */
20
21/*---------------------------------------------------------------------------*/
22/*---------------------------------------------------------------------------*/
23
24#include "arccore/alina/AlinaUtils.h"
25#include "arccore/alina/RelaxationRuntime.h"
26
27/*---------------------------------------------------------------------------*/
28/*---------------------------------------------------------------------------*/
29
30namespace Arcane::Alina
31{
32
33/*---------------------------------------------------------------------------*/
34/*---------------------------------------------------------------------------*/
35
36std::ostream& operator<<(std::ostream& os, eRelaxationType r)
37{
38 switch (r) {
39 case eRelaxationType::gauss_seidel:
40 return os << "gauss_seidel";
41 case eRelaxationType::ilu0:
42 return os << "ilu0";
43 case eRelaxationType::iluk:
44 return os << "iluk";
45 case eRelaxationType::ilup:
46 return os << "ilup";
47 case eRelaxationType::ilut:
48 return os << "ilut";
49 case eRelaxationType::damped_jacobi:
50 return os << "damped_jacobi";
51 case eRelaxationType::spai0:
52 return os << "spai0";
53 case eRelaxationType::spai1:
54 return os << "spai1";
55 case eRelaxationType::chebyshev:
56 return os << "chebyshev";
57 default:
58 return os << "???";
59 }
60}
61
62/*---------------------------------------------------------------------------*/
63/*---------------------------------------------------------------------------*/
64
65std::istream& operator>>(std::istream& in, eRelaxationType& r)
66{
67 std::string val;
68 in >> val;
69
70 if (val == "gauss_seidel")
71 r = eRelaxationType::gauss_seidel;
72 else if (val == "ilu0")
73 r = eRelaxationType::ilu0;
74 else if (val == "iluk")
75 r = eRelaxationType::iluk;
76 else if (val == "ilup")
77 r = eRelaxationType::ilup;
78 else if (val == "ilut")
79 r = eRelaxationType::ilut;
80 else if (val == "damped_jacobi")
81 r = eRelaxationType::damped_jacobi;
82 else if (val == "spai0")
83 r = eRelaxationType::spai0;
84 else if (val == "spai1")
85 r = eRelaxationType::spai1;
86 else if (val == "chebyshev")
87 r = eRelaxationType::chebyshev;
88 else
89 throw std::invalid_argument("Invalid relaxation value. Valid choices are:"
90 "gauss_seidel, ilu0, iluk, ilup, ilut, damped_jacobi, spai0, spai1, chebyshev.");
91
92 return in;
93}
94
95/*---------------------------------------------------------------------------*/
96/*---------------------------------------------------------------------------*/
97
98} // namespace Arcane::Alina
99
100/*---------------------------------------------------------------------------*/
101/*---------------------------------------------------------------------------*/