Arcane  v4.1.10.0
Documentation développeur
Chargement...
Recherche...
Aucune correspondance
BinaryToMatrixMarket.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/*---------------------------------------------------------------------------*/
9/*
10 * This file is based on the work on AMGCL library (version march 2026)
11 * which can be found at https://github.com/ddemidov/amgcl.
12 *
13 * Copyright (c) 2012-2022 Denis Demidov <dennis.demidov@gmail.com>
14 * SPDX-License-Identifier: MIT
15 */
16/*---------------------------------------------------------------------------*/
17/*---------------------------------------------------------------------------*/
18
19#include <iostream>
20#include <string>
21
22#include <boost/program_options.hpp>
23#include "arccore/alina/AlinaUtils.h"
24#include "arccore/alina/Adapters.h"
25#include "arccore/alina/IO.h"
26
27int main(int argc, char* argv[])
28{
29 namespace po = boost::program_options;
30 namespace io = Arcane::Alina::IO;
31
32 using Arcane::Alina::precondition;
33
34 po::options_description desc("Options");
35
36 desc.add_options()("help,h", "Show this help.")("dense,d", po::bool_switch()->default_value(false),
37 "Matrix is dense.")("input,i", po::value<std::string>()->required(),
38 "Input binary file.")("output,o", po::value<std::string>()->required(),
39 "Ouput matrix in the MatrixMarket format.");
40
41 po::variables_map vm;
42 po::store(po::parse_command_line(argc, argv, desc), vm);
43
44 if (vm.count("help")) {
45 std::cout << desc << std::endl;
46 return 0;
47 }
48
49 po::notify(vm);
50
51 if (vm["dense"].as<bool>()) {
52 size_t n, m;
53 std::vector<double> v;
54
55 io::read_dense(vm["input"].as<std::string>(), n, m, v);
56 io::mm_write(vm["output"].as<std::string>(), v.data(), n, m);
57
58 std::cout
59 << "Wrote " << n << " by " << m << " dense matrix"
60 << std::endl;
61 }
62 else {
63 size_t n;
64 std::vector<ptrdiff_t> ptr, col;
65 std::vector<double> val;
66
67 io::read_crs(vm["input"].as<std::string>(), n, ptr, col, val);
68 io::mm_write(vm["output"].as<std::string>(), std::tie(n, ptr, col, val));
69
70 std::cout
71 << "Wrote " << n << " by " << n << " sparse matrix, "
72 << ptr.back() << " nonzeros" << std::endl;
73 }
74}