24#include "arccore/alina/BuiltinBackend.h"
25#include "arccore/alina/ValueTypeComplex.h"
26#include "arccore/alina/Adapters.h"
28#include "arccore/alina/DistributedPreconditionedSolver.h"
29#include "arccore/alina/DistributedPreconditioner.h"
30#include "arccore/alina/DistributedSolverRuntime.h"
32#include "arccore/alina/IO.h"
33#include "arccore/alina/Profiler.h"
35#include "arccore/common/internal/ProgramOptions.h"
37#include "SampleProblemCommon.h"
40using namespace Arcane::Alina;
46 const std::vector<ptrdiff_t>& ptr,
47 const std::vector<ptrdiff_t>& col,
48 const std::vector<std::complex<double>>& val,
50 const std::vector<std::complex<double>>& rhs)
52 auto& prof = Alina::Profiler::globalProfiler();
59 Solver solve(context, comm, std::tie(chunk, ptr, col, val), prm);
63 std::cout << solve << std::endl;
66 std::vector<std::complex<double>> x(chunk);
73 std::cout <<
"Iterations: " << r.nbIteration() << std::endl
74 <<
"Error: " << r.residual() << std::endl
80int main(
int argc,
char* argv[])
82 auto& prof = Alina::Profiler::globalProfiler();
87 std::cout <<
"Taille du monde: " << comm.size << std::endl;
91 namespace po = Arcane::ProgramOptions;
94 desc.add_options()(
"help,h",
"afficher l'aide");
95 desc.add_options()(
"size,n", po::value<ptrdiff_t>()->default_value(128),
"taille du domaine");
96 desc.add_options()(
"prm-file,P", po::value<std::string>(),
"Fichier de paramètres au format json. ");
97 desc.add_options()(
"prm,p", po::value<std::vector<std::string>>()->multitoken(),
98 "Paramètres spécifiés sous forme de paires nom=valeur. "
99 "Peut être fourni plusieurs fois. Exemples:\n"
100 " -p solver.tol=1e-3\n"
101 " -p precond.coarse_enough=300");
110 if (vm.count(
"help")) {
112 std::cout << desc << std::endl;
117 if (vm.count(
"prm-file")) {
118 prm.read_json(vm[
"prm-file"].as<std::string>());
121 if (vm.count(
"prm")) {
122 for (
const std::string& v : vm[
"prm"].as<std::vector<std::string>>()) {
128 std::vector<ptrdiff_t> ptr;
129 std::vector<ptrdiff_t> col;
130 std::vector<std::complex<double>> val;
131 std::vector<std::complex<double>> rhs;
133 prof.tic(
"assemble");
134 n = Alina::PoissonProblemGenerator::createDistributedMatrix(comm.rank, comm.size, vm[
"size"].as<ptrdiff_t>(), 1, ptr, col, val, rhs);
135 prof.toc(
"assemble");
137 solve_scalar(context, comm, n, ptr, col, val, prm, rhs);
Iterative solver wrapper for distributed linear systems.
Classe pour stocker les paramètres sous forme d'arbre hiérarchique clé/valeur.
static Ref< IMessagePassingMng > createAndInitializeMPI(int *argc, char **argv[], int wanted_thread_level)
Initialise MPI et créé un gestionnaire associé au communicateur MPI_WORLD_COMM.
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.
Référence à une instance.
-- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature --
Wrapper de commodité autour de MPI_Comm.