19#include <gtest/gtest.h>
21#include "arccore/base/PlatformUtils.h"
23#include "arccore/alina/Adapters.h"
24#include "arccore/alina/BuiltinBackend.h"
26#include "arccore/alina/CSRMatrixView.h"
27#include "arccore/alina/CSRMatrix.h"
29#include "SampleProblemCommon.h"
32using namespace Arcane::Alina;
36template <
class Val,
class Col,
class Ptr>
45template <
class Val,
class Col,
class Ptr,
class T>
void
48 const ptrdiff_t nb_row = backend::nbRow(A);
50 std::cout <<
"DO_TEST_SCALE1 nb_row=" << nb_row
51 <<
" nb_non_zero=" << A.nbNonZero() <<
"\n";
52 Ptr* row_ptr = &A.ptr[0];
54 for (Int32 z = 0; z < nb_loop; ++z) {
55 for (Int32 i = 0; i < nb_row; ++i) {
56 for (ptrdiff_t j = row_ptr[i], e = row_ptr[i + 1]; j < e; ++j)
61 std::cout <<
"Scale1_Time=" << (t2 - t1) <<
"\n";
64template <
class Val,
class Col,
class Ptr,
class T>
void
67 const ptrdiff_t nb_row = A.
nbRow();
69 std::cout <<
"DO_TEST_SCALE2 nb_row=" << nb_row
70 <<
" nb_non_zero=" << A.
nbNonZero() <<
"\n";
71 const bool is_verbose =
false;
73 for (Int32 i = 0; i < 5; ++i) {
74 for (
auto ci : A.rowRange(i))
75 std::cout <<
"X=" << i <<
" j=" << A.
column(ci) <<
" v=" << A.
value(ci) <<
"\n";
79 auto ptrs = A.rowIndexes();
80 auto values = A.values();
81 for (Int32 z = 0; z < nb_loop; ++z) {
82 for (Int32 i = 0; i < nb_row; ++i) {
83 for (Int32 j = ptrs[i], e = ptrs[i + 1]; j < e; ++j)
88 std::cout <<
"Scale2_Time=" << (t2 - t1) <<
"\n";
90 for (Int32 z = 0; z < nb_loop; ++z) {
91 for (
auto row : A.
rows()) {
97 std::cout <<
"Scale3_Time=" << (t3 - t2) <<
"\n";
101 for (
auto row : A.
rows()) {
102 for ([[maybe_unused]]
auto ci : row) {
110 for (Int32 i = 0; i < 5; ++i) {
111 for (
auto ci : A.rowRange(i))
112 std::cout <<
"I=" << i <<
" v=" << A.
value(ci) <<
"\n";
118TEST(alina_test_csr_matrix_view, basic)
120 std::vector<Int32> ptr;
121 std::vector<Int32> col;
122 std::vector<double> val;
123 std::vector<double> rhs;
125 Int32 nb_square = 64;
126 size_t n = sample_problem(nb_square, val, col, ptr, rhs);
127 std::cout <<
"TEST_VIEW_BASIC\n";
128 auto A = Alina::adapter::zero_copy(n, ptr.data(), col.data(), val.data());
129 auto matrix_view = matrixView(*A);
131 ASSERT_EQ(A->
nbRow(),matrix_view.nbRow());
132 ASSERT_EQ(A->
nbNonZero(),matrix_view.nbNonZero());
137 doTestScale1(*A, 2.0, nb_loop);
138 doTestScale2(matrixView(*A), 2.0, nb_loop);
Sparse matrix stored in CSR (Compressed Sparse Row) format.
constexpr col_type column(CSRRowColumnIndex< RowIndexType > rc_index) const
Value of the matrix for the given RowColumnIndex rc_index.
constexpr CSRRowRange< RowIndexType > rows() const
Range of all rows of the matrix.
constexpr val_type & value(CSRRowColumnIndex< RowIndexType > rc_index) const
Value of the matrix for the given RowColumnIndex rc_index.
constexpr Int32 nbRow() const noexcept
Number of row.
constexpr RowIndexType nbNonZero() const noexcept
Number of non-zero in the matrix.
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
bool arccoreIsDebug()
Vrai si la macro ARCCORE_DEBUG est définie.
Sparse matrix stored in CSR (Compressed Sparse Row) format.