DOLFINx 0.9.0
DOLFINx C++ interface
Loading...
Searching...
No Matches
SparsityPattern Class Reference

#include <SparsityPattern.h>

Public Member Functions

 SparsityPattern (MPI_Comm comm, const std::array< std::shared_ptr< const common::IndexMap >, 2 > &maps, const 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)
 
 SparsityPattern (const SparsityPattern &pattern)=delete
 
 SparsityPattern (SparsityPattern &&pattern)=default
 Move constructor.
 
 ~SparsityPattern ()=default
 Destructor.
 
SparsityPatternoperator= (SparsityPattern &&pattern)=default
 Move assignment.
 
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::IndexMapindex_map (int dim) const
 Index map for given dimension dimension. Returns the index map for rows and columns that will be set by the current MPI rank.
 
std::vector< std::int64_t > column_indices () const
 Global indices of non-zero columns on owned rows.
 
common::IndexMap column_index_map () const
 Builds the index map for columns after assembly of the sparsity pattern.
 
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.
 

Detailed Description

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.

Constructor & Destructor Documentation

◆ SparsityPattern() [1/2]

SparsityPattern ( MPI_Comm comm,
const std::array< std::shared_ptr< const common::IndexMap >, 2 > & maps,
const std::array< int, 2 > & bs )

Create an empty sparsity pattern with specified dimensions.

Parameters
[in]commCommunicator that the pattern is defined on.
[in]mapsIndex maps describing the [0] row and [1] column index ranges (up to a block size).
[in]bsBlock sizes for the [0] row and [1] column maps.

◆ SparsityPattern() [2/2]

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]

Parameters
[in]commCommunicator that the pattern is defined on.
[in]patternsRectangular array of sparsity pattern. The patterns must not be finalised. Null block are permitted/
[in]mapsPairs of (index map, block size) for each row block (maps[0]) and column blocks (maps[1])/
[in]bsBlock sizes for the sparsity pattern entries/

Member Function Documentation

◆ column_index_map()

common::IndexMap column_index_map ( ) const

Builds the index map for columns after assembly of the sparsity pattern.

Returns
Map for all non-zero columns on this process, including ghosts
Todo
Should this be compted and stored when finalising the SparsityPattern?

◆ column_indices()

std::vector< std::int64_t > column_indices ( ) const

Global indices of non-zero columns on owned rows.

Note
The ghosts are computed only once SparsityPattern::finalize has been called.
Returns
Global index non-zero columns on this process, including ghosts.

◆ graph()

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.

Note
Column global indices can be obtained from SparsityPattern::column_index_map()
Includes ghost rows
Returns
Adjacency list edges and offsets

◆ index_map()

std::shared_ptr< const common::IndexMap > index_map ( int dim) const

Index map for given dimension dimension. Returns the index map for rows and columns that will be set by the current MPI rank.

Parameters
[in]dimRequested map, row (0) or column (1).
Returns
The index map.

◆ insert() [1/2]

void insert ( std::int32_t row,
std::int32_t col )

Insert non-zero locations using local (process-wise) indices.

Parameters
[in]rowlocal row index
[in]collocal column index

◆ insert() [2/2]

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.

Parameters
[in]rowslist of the local row indices
[in]colslist of the local column indices

◆ insert_diagonal()

void insert_diagonal ( std::span< const std::int32_t > rows)

Insert non-zero locations on the diagonal.

Parameters
[in]rowsRows in local (process-wise) indices. The indices must exist in the row IndexMap.

◆ nnz_diag()

std::int32_t nnz_diag ( std::int32_t row) const

Number of non-zeros in owned columns (diagonal block) on a given row.

Note
Can also be used on ghost rows

◆ nnz_off_diag()

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.

Note
Can also be used on ghost rows

◆ off_diagonal_offsets()

std::span< const std::int32_t > off_diagonal_offsets ( ) const

Row-wise start of off-diagonals (unowned columns) for each row.

Note
Includes ghost rows

The documentation for this class was generated from the following files: