27#include <alien/kernels/simple_csr/SimpleCSRMatrix.h>
37using namespace Arccore;
44, m_rows_block(nullptr)
45, m_cols_block(nullptr)
52 std::shared_ptr<ISpace> col_space, std::shared_ptr<MatrixDistribution> dist)
53: m_row_space(row_space)
54, m_col_space(col_space)
57, m_rows_block(nullptr)
58, m_cols_block(nullptr)
66, m_row_space(impl.m_row_space)
67, m_col_space(impl.m_col_space)
68, m_distribution(impl.m_distribution)
70, m_rows_block(nullptr)
71, m_cols_block(nullptr)
74 m_block = impl.m_block;
75 if (impl.m_rows_block)
76 m_rows_block = impl.m_rows_block;
77 if (impl.m_cols_block)
78 m_cols_block = impl.m_cols_block;
94 m_block.reset(
new Block(block_size));
102 m_block = blocks->
clone();
110 m_rows_block = blocks->
clone();
118 m_rows_block = blocks->
clone();
126 m_cols_block = blocks->
clone();
134 for (
auto i = m_impls2.begin(); i != m_impls2.end(); ++i) {
146 for (
auto i = m_impls2.begin(); i != m_impls2.end(); ++i) {
157 return m_block.get();
166 return m_rows_block.get();
175 if (m_cols_block.get())
176 return m_cols_block.get();
187 return m_rows_block.get();
204 matrixCloned->setTimestamp(impl, matrixToClone.
timestamp());
206 impl->m_impls2.insert(
226void MultiMatrixImpl::updateImpl(
IMatrixImpl* target)
const
234 for (
auto& impl : m_impls2) {
235 auto* candidate = impl.second;
237 if (candidate->timestamp() !=
timestamp())
242 if (converter ==
nullptr)
245 converter->convert(candidate, target);
251 UniqueArray<IMatrixImpl*> candidates;
252 for (
auto& impl : m_impls2) {
253 auto* candidate = impl.second;
254 if (candidate->timestamp() ==
timestamp())
255 candidates.add(candidate);
257 if (candidates.empty()) {
258 auto msg = String::format(
"Matrix converter to: ", target->
backend(),
259 " internal error: no timestamp matching");
260 throw FatalErrorException(A_FUNCINFO, msg);
267 auto print_error = [&] {
269 cout() <<
"ALIEN FATAL ERROR \n"
270 <<
"Matrix converting to target backend '" << target->
backend() <<
"' :\n"
271 <<
"* no converter available from source backend(s)";
273 for (
auto* candidate : candidates) {
274 cout() <<
" ** '" << candidate->backend() <<
"'";
281 auto* simplecsr = getImpl<SimpleCSRMatrix<Real>>(
"simplecsr");
284 auto* simplecsr_target =
288 if (simplecsr_target ==
nullptr)
292 for (
auto* candidate : candidates) {
294 candidate->backend(), simplecsr->backend());
296 if (candidat_simplecsr !=
nullptr) {
298 candidat_simplecsr->convert(candidate, simplecsr);
299 simplecsr->copyTimestamp(*candidate);
301 simplecsr_target->convert(simplecsr, target);
Block elements for block matrices.
std::shared_ptr< Block > clone() const
Clone this object.
Interface to handle abstract matrices implementation.
virtual BackEndId backend() const
static IMatrixConverter * getConverter(BackEndId from, BackEndId to)
Get the converter from one matrix format to another one.
Multi matrices representation container.
void setColBlockInfos(const VBlock *blocks)
Set variable col block information.
void setRowBlockInfos(const VBlock *blocks)
Set variable row block information.
MultiMatrixImpl * clone() const
Clone this object.
MultiMatrixImpl()
Default constructor.
void clear()
Clear resources.
void free()
Free resources.
virtual ~MultiMatrixImpl()
Free resources.
const Block * block() const
Get uniform block datas.
const VBlock * colBlock() const
Get variable col block datas.
const AlgebraTraits< tag >::matrix_type & get() const
Get a specific matrix implementation.
const VBlock * rowBlock() const
Get variable row block datas.
const VBlock * vblock() const
Get variable block datas.
void setBlockInfos(Arccore::Integer block_size)
Set uniform block information.
Int64 timestamp() const
Valeur du timestamp de référence.
virtual Int64 timestamp() const
Donne la valeur courante du timestamp.
void updateTimestamp()
Met à jour le timestamp.
void copyTimestamp(const Timestamp &v)
Copy un autre timestamp.
Variable size block elements for block matrices.
std::shared_ptr< VBlock > clone() const
Copy this object.
-- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature --