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 <<
"World size: " << comm.size << std::endl;
91 namespace po = Arcane::ProgramOptions;
94 desc.add_options()(
"help,h",
"show help");
95 desc.add_options()(
"size,n", po::value<ptrdiff_t>()->default_value(128),
"domain size");
96 desc.add_options()(
"prm-file,P", po::value<std::string>(),
"Parameter file in json format. ");
97 desc.add_options()(
"prm,p", po::value<std::vector<std::string>>()->multitoken(),
98 "Parameters specified as name=value pairs. "
99 "May be provided multiple times. Examples:\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.
Class to store parameters as a hierarchical key/value tree.
static Ref< IMessagePassingMng > createAndInitializeMPI(int *argc, char **argv[], int wanted_thread_level)
Initialize MPI and creates a manager associated with the MPI_WORLD_COMM communicator.
Fluent command-line parser builder.
Describes a set of command-line options.
Describes positional (non-option) arguments.
Stores parsed option values.
Reference to an instance.
-- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature --
Convenience wrapper around MPI_Comm.