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;
45 const std::vector<ptrdiff_t>& ptr,
46 const std::vector<ptrdiff_t>& col,
47 const std::vector<std::complex<double>>& val,
49 const std::vector<std::complex<double>>& rhs)
51 auto& prof = Alina::Profiler::globalProfiler();
58 Solver solve(comm, std::tie(chunk, ptr, col, val), prm);
62 std::cout << solve << std::endl;
65 std::vector<std::complex<double>> x(chunk);
72 std::cout <<
"Iterations: " << r.nbIteration() << std::endl
73 <<
"Error: " << r.residual() << std::endl
79int main(
int argc,
char* argv[])
81 auto& prof = Alina::Profiler::globalProfiler();
86 std::cout <<
"World size: " << comm.size << std::endl;
89 namespace po = Arcane::ProgramOptions;
92 desc.add_options()(
"help,h",
"show help");
93 desc.add_options()(
"size,n", po::value<ptrdiff_t>()->default_value(128),
"domain size");
94 desc.add_options()(
"prm-file,P", po::value<std::string>(),
"Parameter file in json format. ");
95 desc.add_options()(
"prm,p", po::value<std::vector<std::string>>()->multitoken(),
96 "Parameters specified as name=value pairs. "
97 "May be provided multiple times. Examples:\n"
98 " -p solver.tol=1e-3\n"
99 " -p precond.coarse_enough=300");
108 if (vm.count(
"help")) {
110 std::cout << desc << std::endl;
115 if (vm.count(
"prm-file")) {
116 prm.read_json(vm[
"prm-file"].as<std::string>());
119 if (vm.count(
"prm")) {
120 for (
const std::string& v : vm[
"prm"].as<std::vector<std::string>>()) {
126 std::vector<ptrdiff_t> ptr;
127 std::vector<ptrdiff_t> col;
128 std::vector<std::complex<double>> val;
129 std::vector<std::complex<double>> rhs;
131 prof.tic(
"assemble");
132 n = sample_problem_distributed(comm.rank, comm.size, vm[
"size"].as<ptrdiff_t>(), 1, ptr, col, val, rhs);
133 prof.toc(
"assemble");
135 solve_scalar(comm, n, ptr, col, val, prm, rhs);
Iterative solver wrapper for distributed linear systems.
Class to store parameters as a hierarchical key/value tree.
Fluent command-line parser builder.
Describes a set of command-line options.
Describes positional (non-option) arguments.
Stores parsed option values.
-- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature --
Convenience wrapper around MPI_Comm.
Convenience wrapper around MPI_Init_threads/MPI_Finalize.