Alien  1.3.0
Developer documentation
Loading...
Searching...
No Matches
StreamMatrixBuilder.h
1// -*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
2//-----------------------------------------------------------------------------
3// Copyright 2000-2025 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#pragma once
8
10
11#include <alien/ref/data/block/BlockMatrix.h>
12#include <alien/ref/data/scalar/Matrix.h>
13
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
17namespace Alien
18{
19
20/*---------------------------------------------------------------------------*/
21/*---------------------------------------------------------------------------*/
22
23template <typename Scalar>
24class SimpleCSRMatrix;
25
26/*---------------------------------------------------------------------------*/
27/*---------------------------------------------------------------------------*/
28
29template <typename ValueT = Real>
31{
32 public:
33 class Inserter;
34 class BaseInserter;
35 class Profiler;
36 class Filler;
37
38 typedef Alien::Matrix MatrixType;
39 using Matrix = Alien::Matrix;
40 using BlockMatrix = Alien::BlockMatrix;
41
42 enum eColOrdering
43 {
44 eUndef,
45 eOwnAndGhost,
46 eFull
47 };
48
49 public:
51 StreamMatrixBuilderT(Matrix& matrix, bool init_and_start = true);
52 StreamMatrixBuilderT(BlockMatrix& matrix, bool init_and_start = true);
53 StreamMatrixBuilderT(IMatrix& matrix, bool init_and_start = true);
54
57
58 void setOrderRowColsOpt(bool value) { m_order_row_cols_opt = value; }
59
60 void setTraceMng(ITraceMng* trace_mng)
61 {
62 m_trace = trace_mng;
63 if (m_matrix_impl)
64 m_matrix_impl->setTraceMng(m_trace);
65 }
66
67 public:
68 void init();
69
70 void start();
71
72 Inserter& getNewInserter();
73
74 Inserter& getInserter(Integer id);
75
76 void allocate(); // allocate includes fillZero ?
77
78 void fillZero();
79
80 void finalize();
81
82 void end();
83
84 private:
85 UniqueArray<Inserter*> m_inserters;
86
87 private:
88 void _freeInserters();
90
91 protected:
92 IMatrix& m_matrix;
93 SimpleCSRMatrix<ValueT>* m_matrix_impl;
94
95 Integer m_local_size = 0;
96 Integer m_global_size = 0;
97 Integer m_local_offset = 0;
98
99 UniqueArray<Integer> m_ghost_row_size;
100 Integer m_ghost_size = 0;
101 UniqueArray<Integer> m_offset;
102 Integer m_matrix_size = 0;
103 UniqueArray<Integer> m_row_size;
104 Integer m_myrank = 0;
105 Integer m_nproc = 1;
106
107 UniqueArray<Integer> m_ordered_idx;
108 eColOrdering m_col_ordering;
109 bool m_order_row_cols_opt = false;
110
111 IMessagePassingMng* m_parallel_mng = nullptr;
112 ITraceMng* m_trace = nullptr;
113
114 enum State
115 {
116 eNone,
117 eInit,
118 ePrepared,
119 eStart
120 };
121 State m_state;
122};
123
124/*---------------------------------------------------------------------------*/
125/*---------------------------------------------------------------------------*/
126
127typedef StreamMatrixBuilderT<double> StreamMatrixBuilder;
128
129/*---------------------------------------------------------------------------*/
130/*---------------------------------------------------------------------------*/
131
132} // namespace Alien
133
134/*---------------------------------------------------------------------------*/
135/*---------------------------------------------------------------------------*/
136
137#include "StreamMatrixBuilderInserter.h"
138
139/*---------------------------------------------------------------------------*/
140/*---------------------------------------------------------------------------*/
141
142#include "StreamMatrixBuilderInserterT.h"
143#include "StreamMatrixBuilderT.h"
144
145/*---------------------------------------------------------------------------*/
146/*---------------------------------------------------------------------------*/
IMatrix.h.
Interface for all matrices.
Definition IMatrix.h:51
StreamMatrixBuilderT(Matrix &matrix, bool init_and_start=true)
-- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature --
Definition BackEnd.h:17