Loading...
Searching...
No Matches
SparsityPattern Class Reference

`#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)
| SparsityPattern (const SparsityPattern &pattern)=delete
| SparsityPattern (SparsityPattern &&pattern)=default
| Move constructor.
| ~SparsityPattern ()=default
| Destructor.
SparsityPattern & | operator= (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::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.
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,
|  | std::array< std::shared_ptr< const common::IndexMap >, 2 > | maps,
|  | std::array< int, 2 > | bs )

Create an empty sparsity pattern with specified dimensions.

Parameters

  [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() [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] | comm | Communicator that the pattern is defined on.
  [in] | patterns | Rectangular array of sparsity pattern. The patterns must not be finalised. Null block 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/

## 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] | dim | Requested 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] | row | local row index
  [in] | col | local 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] | rows | list of the local row indices
  [in] | cols | list 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] | rows | Rows 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:

- /build/fenics-dolfinx-Vk5o25/fenics-dolfinx-0.10.0.post5/cpp/dolfinx/la/SparsityPattern.h
- /build/fenics-dolfinx-Vk5o25/fenics-dolfinx-0.10.0.post5/cpp/dolfinx/la/SparsityPattern.cpp