30#include <alien/utils/Trace.h>
38using namespace Arccore;
39using namespace Arccore::MessagePassing;
57 const ISpace& row_space,
const ISpace& col_space, IMessagePassingMng* parallel_mng);
66 std::shared_ptr<IMessagePassingMng> parallel_mng);
75 Integer global_row_size, Integer global_col_size, IMessagePassingMng* parallel_mng);
83 Internal(Integer global_row_size, Integer global_col_size,
84 std::shared_ptr<IMessagePassingMng> parallel_mng);
94 IMessagePassingMng* parallel_mng);
105 Integer local_col_size, IMessagePassingMng* parallel_mng);
115 std::shared_ptr<IMessagePassingMng> parallel_mng);
126 Integer local_col_size, std::shared_ptr<IMessagePassingMng> parallel_mng);
135 Internal(Integer global_row_size, Integer global_col_size, Integer local_row_size,
136 IMessagePassingMng* parallel_mng);
146 Internal(Integer global_row_size, Integer global_col_size, Integer local_row_size,
147 Integer local_col_size, IMessagePassingMng* parallel_mng);
156 Internal(Integer global_row_size, Integer global_col_size, Integer local_row_size,
157 std::shared_ptr<IMessagePassingMng> parallel_mng);
167 Internal(Integer global_row_size, Integer global_col_size, Integer local_row_size,
168 Integer local_col_size, std::shared_ptr<IMessagePassingMng> parallel_mng);
194const ISpace& row_space,
const ISpace& col_space, IMessagePassingMng* parallel_mng)
203 std::shared_ptr<IMessagePassingMng> parallel_mng)
212Integer global_row_size, Integer global_col_size, IMessagePassingMng* parallel_mng)
213: Internal(Space(global_row_size), Space(global_col_size), parallel_mng)
220 std::shared_ptr<IMessagePassingMng> parallel_mng)
221:
Internal(Space(global_row_size), Space(global_col_size), parallel_mng)
228 Integer local_row_size, IMessagePassingMng* parallel_mng)
230 std::make_shared<VectorDistribution>(row_space, local_row_size, parallel_mng))
231, m_col_distribution(std::make_shared<VectorDistribution>(col_space, parallel_mng))
238 Integer local_row_size, Integer local_col_size, IMessagePassingMng* parallel_mng)
240 std::make_shared<VectorDistribution>(row_space, local_row_size, parallel_mng))
242 std::make_shared<VectorDistribution>(col_space, local_col_size, parallel_mng))
249 Integer local_row_size, std::shared_ptr<IMessagePassingMng> parallel_mng)
251 std::make_shared<VectorDistribution>(row_space, local_row_size, parallel_mng))
252, m_col_distribution(std::make_shared<VectorDistribution>(col_space, parallel_mng))
259 Integer local_row_size, Integer local_col_size,
260 std::shared_ptr<IMessagePassingMng> parallel_mng)
262 std::make_shared<VectorDistribution>(row_space, local_row_size, parallel_mng))
264 std::make_shared<VectorDistribution>(col_space, local_col_size, parallel_mng))
271 Integer local_row_size, IMessagePassingMng* parallel_mng)
272:
Internal(Space(global_row_size), Space(global_col_size), local_row_size, parallel_mng)
279 Integer local_row_size, Integer local_col_size, IMessagePassingMng* parallel_mng)
280:
Internal(Space(global_row_size), Space(global_col_size), local_row_size, local_col_size,
288 Integer local_row_size, std::shared_ptr<IMessagePassingMng> parallel_mng)
289:
Internal(Space(global_row_size), Space(global_col_size), local_row_size, parallel_mng)
296 Integer local_row_size, Integer local_col_size,
297 std::shared_ptr<IMessagePassingMng> parallel_mng)
298:
Internal(Space(global_row_size), Space(global_col_size), local_row_size, local_col_size,
316 alien_debug([&] { cout() <<
"Create Empty MatrixDistribution"; });
323const ISpace& row_space,
const ISpace& col_space, IMessagePassingMng* parallel_mng)
324: m_internal(std::make_shared<Internal>(row_space, col_space, parallel_mng))
327 cout() <<
"Create MatrixDistribution(rowglobal=" << row_space.
size()
328 <<
",colglobal=" << col_space.
size() <<
")";
336Integer global_row_size, Integer global_col_size, IMessagePassingMng* parallel_mng)
337: m_internal(std::make_shared<Internal>(global_row_size, global_col_size, parallel_mng))
340 cout() <<
"Create MatrixDistribution(rowglobal=" << global_row_size
341 <<
",colglobal=" << global_col_size <<
")";
349 std::shared_ptr<IMessagePassingMng> parallel_mng)
350: m_internal(std::make_shared<Internal>(global_row_size, global_col_size, parallel_mng))
353 cout() <<
"Create MatrixDistribution(rowglobal=" << global_row_size
354 <<
",colglobal=" << global_col_size <<
")";
362 Integer local_row_size, IMessagePassingMng* parallel_mng)
364 std::make_shared<
Internal>(row_space, col_space, local_row_size, parallel_mng))
367 cout() <<
"Create MatrixDistribution(global_row=" << row_space.
size()
368 <<
",global_col=" << col_space.
size() <<
",local_row=" << local_row_size
377 Integer local_row_size, Integer local_col_size, IMessagePassingMng* parallel_mng)
379 row_space, col_space, local_row_size, local_col_size, parallel_mng))
382 cout() <<
"Create MatrixDistribution(global_row=" << row_space.
size()
383 <<
",global_col=" << col_space.
size() <<
",local_row=" << local_row_size
384 <<
",local_col=" << local_col_size <<
")";
392 Integer local_row_size, IMessagePassingMng* parallel_mng)
393: m_internal(std::make_shared<Internal>(
394 global_row_size, global_col_size, local_row_size, parallel_mng))
397 cout() <<
"Create MatrixDistribution(global_row=" << global_row_size
398 <<
",global_col=" << global_col_size <<
",local_row=" << local_row_size <<
")";
406 Integer local_row_size, Integer local_col_size, IMessagePassingMng* parallel_mng)
407: m_internal(std::make_shared<Internal>(
408 global_row_size, global_col_size, local_row_size, local_col_size, parallel_mng))
411 cout() <<
"Create MatrixDistribution(global_row=" << global_row_size
412 <<
",global_col=" << global_col_size <<
",local_row=" << local_row_size
413 <<
",local_col=" << local_col_size <<
")";
421 Integer local_row_size, std::shared_ptr<IMessagePassingMng> parallel_mng)
422: m_internal(std::make_shared<Internal>(
423 global_row_size, global_col_size, local_row_size, parallel_mng))
426 cout() <<
"Create MatrixDistribution(global_row=" << global_row_size
427 <<
",global_col=" << global_col_size <<
",local_row=" << local_row_size <<
")";
435 Integer local_row_size, Integer local_col_size,
436 std::shared_ptr<IMessagePassingMng> parallel_mng)
437: m_internal(std::make_shared<Internal>(
438 global_row_size, global_col_size, local_row_size, local_col_size, parallel_mng))
441 cout() <<
"Create MatrixDistribution(global_row=" << global_row_size
442 <<
",global_col=" << global_col_size <<
",local_row=" << local_row_size
443 <<
",local_col=" << local_col_size <<
")";
477 return m_internal->m_row_distribution->space();
524 return m_internal->m_row_distribution->isParallel();
533 return m_internal->m_row_distribution->parallelMng();
542 return m_internal->m_row_distribution->localSize();
552 return m_internal->m_col_distribution->localSize();
554 return m_internal->m_row_distribution->localSize();
563 return m_internal->m_row_distribution->globalSize();
573 return m_internal->m_col_distribution->globalSize();
575 return m_internal->m_row_distribution->globalSize();
584 return m_internal->m_row_distribution->offset();
593 return m_internal->m_row_distribution->offset(p);
603 return m_internal->m_col_distribution->offset();
605 return m_internal->m_row_distribution->offset();
615 return m_internal->m_col_distribution->offset(p);
617 return m_internal->m_row_distribution->offset(p);
623std::shared_ptr<MatrixDistribution>
626 return std::make_shared<MatrixDistribution>(*
this);
635 return m_internal->m_row_distribution->globalToLocal(i);
644 return m_internal->m_row_distribution->globalToLocal(i, p);
653 return m_internal->m_row_distribution->localToGlobal(i);
662 return m_internal->m_row_distribution->localToGlobal(i, p);
672 return m_internal->m_col_distribution->globalToLocal(i);
674 return m_internal->m_row_distribution->globalToLocal(i);
684 return m_internal->m_col_distribution->globalToLocal(i, p);
686 return m_internal->m_row_distribution->globalToLocal(i, p);
696 return m_internal->m_col_distribution->localToGlobal(i);
698 return m_internal->m_row_distribution->localToGlobal(i);
708 return m_internal->m_row_distribution->localToGlobal(i, p);
710 return m_internal->m_col_distribution->localToGlobal(i, p);
719 return m_internal->m_row_distribution->owner(i);
728 nout <<
"row distributed";
730 nout <<
", parallel";
735 nout <<
", row offset=" << dist.
rowOffset();
Interface for algebraic space objects.
virtual Arccore::Integer size() const =0
Get space size.
Computes a matrix distribution.
const VectorDistribution & rowDistribution() const
Get the row distribution.
bool isParallel() const
Whether or not the run is parallel.
Arccore::Integer rowGlobalToLocal(Arccore::Integer i) const
Get the local id of a row with its global id.
Arccore::Integer globalColSize() const
Get the global col size.
Arccore::Integer colGlobalToLocal(Arccore::Integer i) const
Get the local id of a col with its global id.
Arccore::Integer localColSize() const
Get the local col size.
Arccore::Integer rowLocalToGlobal(Arccore::Integer i) const
Get the global id of a row with its local id.
Arccore::Integer localRowSize() const
Get the local row size.
MatrixDistribution & operator=(const MatrixDistribution &dist)
Operator equal.
const ISpace & rowSpace() const
Get the row space.
std::shared_ptr< Internal > m_internal
Internal implementation of the matrix distribution.
Arccore::Integer globalRowSize() const
Get the global row size.
bool operator==(const MatrixDistribution &dist) const
Comparison operator.
std::shared_ptr< MatrixDistribution > clone() const
Clone the distribution.
const ISpace & colSpace() const
Get the col space.
MatrixDistribution()
Constructor.
Arccore::Integer colLocalToGlobal(Arccore::Integer i) const
Get the global id of a col with its local id.
const VectorDistribution & colDistribution() const
Get the col distribution.
Arccore::Integer colOffset() const
Get the col offset.
Arccore::Integer rowOffset() const
Get the row offset.
Arccore::MessagePassing::IMessagePassingMng * parallelMng() const
Get the parallel manager.
Arccore::Integer owner(Arccore::Integer i, Arccore::Integer j) const
Get the owner of an entry.
~MatrixDistribution()
Free resources.
Computes a vector distribution.
const ISpace & space() const
Get the space.
-- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature --
std::ostream & operator<<(std::ostream &nout, const MatrixDistribution &dist)
Print the distribution.
Internal implementation of the matrix distribution.
std::shared_ptr< VectorDistribution > m_row_distribution
Row distribution.
bool operator==(const Internal &dist) const
Comparison operator.
std::shared_ptr< VectorDistribution > m_col_distribution
Col distribution.