|
DOLFINx 0.12.0.0
DOLFINx C++
|
#include <SparsityPattern.h>
Public Member Functions | |
| SparsityPattern (MPI_Comm comm, std::array< std::shared_ptr< const common::IndexMap >, 2 > maps, std::array< int, 2 > bs) | |
| Create an empty sparsity pattern with specified dimensions. | |
| SparsityPattern (MPI_Comm comm, const std::vector< std::vector< const SparsityPattern * > > &patterns, const std::array< std::vector< std::pair< std::reference_wrapper< const common::IndexMap >, int > >, 2 > &maps, const std::array< std::vector< int >, 2 > &bs) | |
| Create a new sparsity pattern by concatenating sub-patterns, e.g. pattern =[ pattern00 ][ pattern 01] [ pattern10 ][ pattern 11]. | |
| SparsityPattern (const SparsityPattern &pattern)=delete | |
| SparsityPattern (SparsityPattern &&pattern)=default | |
| Move constructor. | |
| ~SparsityPattern ()=default | |
| Destructor. | |
| SparsityPattern & | operator= (SparsityPattern &&pattern)=default |
| Move assignment. | |
| void | reserve_blocks (std::size_t num_blocks, std::size_t num_rows, std::size_t num_cols) |
| Reserve storage for additional insert(rows, cols) calls. | |
| void | insert (std::int32_t row, std::int32_t col) |
| Insert non-zero locations using local (process-wise) indices. | |
| void | insert (std::span< const std::int32_t > rows, std::span< const std::int32_t > cols) |
| Insert non-zero locations using local (process-wise) indices. | |
| void | insert_diagonal (std::span< const std::int32_t > rows) |
| Insert non-zero locations on the diagonal. | |
| void | finalize () |
| Finalize sparsity pattern and communicate off-process entries. | |
| std::shared_ptr< const common::IndexMap > | index_map (int dim) const |
| Index map for the rows and columns that will be set by the current MPI rank. | |
| std::shared_ptr< const common::IndexMap > | input_index_map (int dim) const |
| Input index map for the rows and columns used to construct the pattern. | |
| std::vector< std::int64_t > | column_indices () const |
| Global column indices corresponding to the local column indices used by SparsityPattern::graph. | |
| int | block_size (int dim) const |
| Return index map block size for dimension dim. | |
| std::int64_t | num_nonzeros () const |
| Number of nonzeros on this rank after assembly, including ghost rows. | |
| std::int32_t | nnz_diag (std::int32_t row) const |
| Number of non-zeros in owned columns (diagonal block) on a given row. | |
| std::int32_t | nnz_off_diag (std::int32_t row) const |
| Number of non-zeros in unowned columns (off-diagonal block) on a given row. | |
| std::pair< std::span< const std::int32_t >, std::span< const std::int64_t > > | graph () const |
| Sparsity pattern graph after assembly. Uses local indices for the columns. | |
| std::span< const std::int32_t > | off_diagonal_offsets () const |
| Row-wise start of off-diagonals (unowned columns) for each row. | |
| MPI_Comm | comm () const |
| Return MPI communicator. | |
Sparsity pattern data structure that can be used to initialize sparse matrices. After assembly, column indices are always sorted in increasing order. Ghost entries are kept after assembly.
| SparsityPattern | ( | MPI_Comm | comm, |
| std::array< std::shared_ptr< const common::IndexMap >, 2 > | maps, | ||
| std::array< int, 2 > | bs ) |
Create an empty sparsity pattern with specified dimensions.
| [in] | comm | Communicator that the pattern is defined on. |
| [in] | maps | Index maps describing the [0] row and [1] column index ranges (up to a block size). |
| [in] | bs | Block sizes for the [0] row and [1] column maps. |
| SparsityPattern | ( | MPI_Comm | comm, |
| const std::vector< std::vector< const SparsityPattern * > > & | patterns, | ||
| const std::array< std::vector< std::pair< std::reference_wrapper< const common::IndexMap >, int > >, 2 > & | maps, | ||
| const std::array< std::vector< int >, 2 > & | bs ) |
Create a new sparsity pattern by concatenating sub-patterns, e.g. pattern =[ pattern00 ][ pattern 01] [ pattern10 ][ pattern 11].
| [in] | comm | Communicator that the pattern is defined on. |
| [in] | patterns | Rectangular array of sparsity pattern. The patterns must not be finalised. Null blocks are permitted. |
| [in] | maps | Pairs of (index map, block size) for each row block (maps[0]) and column blocks (maps[1]). |
| [in] | bs | Block sizes for the sparsity pattern entries. |
| std::vector< std::int64_t > column_indices | ( | ) | const |
Global column indices corresponding to the local column indices used by SparsityPattern::graph.
Entry i of the returned vector is the global index of local column i: for i in the owned range this is every owned column (whether or not it holds a non-zero entry), and for i beyond the owned range it is the ghost column, i.e. a column with at least one non-zero entry owned by another rank.
| std::pair< std::span< const std::int32_t >, std::span< const std::int64_t > > graph | ( | ) | const |
Sparsity pattern graph after assembly. Uses local indices for the columns.
| std::shared_ptr< const common::IndexMap > index_map | ( | int | dim | ) | const |
Index map for the rows and columns that will be set by the current MPI rank.
| [in] | dim | Requested map, row (0) or column (1). |
| std::shared_ptr< const common::IndexMap > input_index_map | ( | int | dim | ) | const |
Input index map for the rows and columns used to construct the pattern.
| [in] | dim | Requested map, row (0) or column (1). |
| void insert | ( | std::int32_t | row, |
| std::int32_t | col ) |
Insert non-zero locations using local (process-wise) indices.
| [in] | row | local row index |
| [in] | col | local column index |
| void insert | ( | std::span< const std::int32_t > | rows, |
| std::span< const std::int32_t > | cols ) |
Insert non-zero locations using local (process-wise) indices.
This routine inserts non-zero locations at the outer product of rows and cols into the sparsity pattern, i.e. adds the matrix entries at A[row[i], col[j]] for all i, j.
| [in] | rows | list of the local row indices |
| [in] | cols | list of the local column indices |
| void insert_diagonal | ( | std::span< const std::int32_t > | rows | ) |
Insert non-zero locations on the diagonal.
| [in] | rows | Rows in local (process-wise) indices. The indices must exist in the row IndexMap. |
| std::int32_t nnz_diag | ( | std::int32_t | row | ) | const |
Number of non-zeros in owned columns (diagonal block) on a given row.
| std::int32_t nnz_off_diag | ( | std::int32_t | row | ) | const |
Number of non-zeros in unowned columns (off-diagonal block) on a given row.
| std::span< const std::int32_t > off_diagonal_offsets | ( | ) | const |
Row-wise start of off-diagonals (unowned columns) for each row.
| void reserve_blocks | ( | std::size_t | num_blocks, |
| std::size_t | num_rows, | ||
| std::size_t | num_cols ) |
Reserve storage for additional insert(rows, cols) calls.
Blocks are cached in the form they are inserted in, so the number of calls and the total number of row and column indices are needed rather than the number of (row, column) entries.
| [in] | num_blocks | Number of insert(rows, cols) calls. |
| [in] | num_rows | Total number of row indices over those calls. |
| [in] | num_cols | Total number of column indices over those calls. |