22#include "arccore/base/PlatformUtils.h"
23#include "arccore/base/String.h"
24#include "arccore/base/Convert.h"
26#include "arccore/alina/BuiltinBackend.h"
27#include "arccore/alina/StaticMatrix.h"
28#include "arccore/alina/Adapters.h"
29#include "arccore/alina/Relaxation.h"
30#include "arccore/alina/Coarsening.h"
31#include "arccore/alina/BiCGStabSolver.h"
32#include "arccore/alina/PreconditionedSolver.h"
33#include "arccore/alina/AMG.h"
34#include "arccore/alina/Adapters.h"
35#include "arccore/alina/IO.h"
37#include "arccore/alina/SolverRuntime.h"
38#include "arccore/alina/PreconditionerRuntime.h"
40#include "arccore/alina/Profiler.h"
42#include "arccore/common/internal/ProgramOptions.h"
44#include "arccore/trace/ITraceMng.h"
46#include "./AlinaSamplesCommon.h"
47#include "./HypreComparer.h"
49#include "SampleProblemCommon.h"
52using Alina::precondition;
67 std::vector<ptrdiff_t>
const& ptr,
68 std::vector<ptrdiff_t>
const& col,
69 std::vector<double>
const& val,
70 std::vector<double>
const& rhs,
71 std::vector<double>& x)
73 std::cout <<
"Using scalar solve ptr_size=" <<
sizeof(ptrdiff_t)
74 <<
" ptr_type_size=" <<
sizeof(Backend::ptr_type)
75 <<
" col_type_size=" <<
sizeof(Backend::col_type)
76 <<
" value_type_size=" <<
sizeof(Backend::value_type)
78 auto& prof = Alina::Profiler::globalProfiler();
91 Solver solve(context, std::tie(rows, ptr, col, val), prm, bprm);
94 std::cout <<
"Printing solver infos\n";
95 std::cout << solve << std::endl;
98 std::cout <<
"SOLVER PARAMS: " << ptree <<
"\n";
100 auto f_b = Backend::copy_vector(rhs, bprm);
101 auto x_b = Backend::copy_vector(x, bprm);
104 info = solve(*f_b, *x_b);
117 auto& prof = Alina::Profiler::globalProfiler();
118 namespace po = Arcane::ProgramOptions;
127 desc.add_options()(
"help,h",
"Affiche cette aide.");
128 desc.add_options()(
"prm-file,P", po::value<string>(),
129 "Fichier de paramètres au format json. ");
130 desc.add_options()(
"prm,p", po::value<vector<string>>()->multitoken(),
131 "Paramètres spécifiés sous forme de paires nom=valeur. "
132 "Peut être fourni plusieurs fois. Exemples:\n"
133 " -p solver.tol=1e-3\n"
134 " -p precond.coarse_enough=300");
136 desc.add_options()(
"size,n",
137 po::value<int>()->default_value(32),
138 "La taille du problème de Poisson à résoudre lorsqu'aucune matrice de système n'est donnée. "
139 "Spécifié comme le nombre de nœuds de grille le long de chaque dimension d'un cube unité. "
140 "Le système résultant aura n*n*n inconnues. ");
142 desc.add_options()(
"anisotropy,a",
143 po::value<double>()->default_value(1.0),
144 "La valeur d'anisotropie pour la valeur de Poisson générée. "
145 "Utilisée pour déterminer la mise à l'échelle du problème le long des axes X, Y et Z : "
146 "hy = hx * a, hz = hy * a.");
155 if (vm.count(
"help")) {
160 for (
int i = 0; i < argc; ++i) {
163 std::cout << argv[i];
165 std::cout << std::endl;
168 if (vm.count(
"prm-file")) {
169 prm.read_json(vm[
"prm-file"].as<string>());
172 if (vm.count(
"prm")) {
173 for (
const string& v : vm[
"prm"].as<vector<string>>()) {
178 size_t rows = vm[
"size"].as<
int>();
179 vector<ptrdiff_t> ptr, col;
180 vector<double> val, rhs, null, x;
181 std::cout <<
"ROWS=" << rows <<
"\n";
183 auto t = prof.scoped_tic(
"assembling");
184 rows = Alina::PoissonProblemGenerator::createSequentialMatrix(rows, val, col, ptr, rhs, vm[
"anisotropy"].as<double>());
190 bool do_hypre =
false;
192 do_hypre = v.value();
197 hypre_comparer.solve(rows, ptr, col, val, rhs, x, argc, argv);
201 solver_result = solve(context, prm, rows, ptr, col, val, rhs, x);
203 if (vm.count(
"output")) {
204 auto t = prof.scoped_tic(
"write");
205 Alina::IO::mm_write(vm[
"output"].as<string>(), &x[0], x.size());
208 std::cout <<
"Iterations: " << solver_result.nbIteration() << std::endl
209 <<
"Error: " << solver_result.residual() << std::endl
210 << prof << std::endl;
217int main(
int argc,
char* argv[])
219 return Arcane::Alina::SampleMainContext::execMain(main2, argc, argv);
Algebraic multigrid method.
Convenience class that bundles together a preconditioner and an iterative solver.
Classe pour stocker les paramètres sous forme d'arbre hiérarchique clé/valeur.
Classe template pour convertir un type.
Interface du gestionnaire de traces.
virtual TraceMessage info()=0
Flot pour un message d'information.
Constructeur d'analyseur d'arguments en ligne de commande fluide.
Décrit un ensemble d'options en ligne de commande.
Décrit les arguments positionnels (non-options).
Stocke les valeurs d'options analysées.
Chaîne de caractères unicode.
-- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature --
Alina::detail::empty_params params