Note: this is documentation for an old release. View the latest documentation at docs.fenicsproject.org/dolfinx/v0.9.0/cpp/doxygen/d6/df3/SparsityPattern_8h_source.html
DOLFINx 0.7.3
DOLFINx C++ interface
Loading...
Searching...
No Matches
SparsityPattern.h
1// Copyright (C) 2007-2020 Garth N. Wells
2//
3// This file is part of DOLFINx (https://www.fenicsproject.org)
4//
5// SPDX-License-Identifier: LGPL-3.0-or-later
6
7#pragma once
8
9#include <dolfinx/common/MPI.h>
10#include <memory>
11#include <span>
12#include <utility>
13#include <vector>
14
15namespace dolfinx::common
16{
17class IndexMap;
18}
19
20namespace dolfinx::la
21{
26{
27public:
34 MPI_Comm comm,
35 const std::array<std::shared_ptr<const common::IndexMap>, 2>& maps,
36 const std::array<int, 2>& bs);
37
49 MPI_Comm comm,
50 const std::vector<std::vector<const SparsityPattern*>>& patterns,
51 const std::array<
52 std::vector<
53 std::pair<std::reference_wrapper<const common::IndexMap>, int>>,
54 2>& maps,
55 const std::array<std::vector<int>, 2>& bs);
56
57 SparsityPattern(const SparsityPattern& pattern) = delete;
58
60 SparsityPattern(SparsityPattern&& pattern) = default;
61
63 ~SparsityPattern() = default;
64
67
69 void insert(const std::span<const std::int32_t>& rows,
70 const std::span<const std::int32_t>& cols);
71
75 void insert_diagonal(std::span<const std::int32_t> rows);
76
78 void finalize();
79
84 std::shared_ptr<const common::IndexMap> index_map(int dim) const;
85
92 std::vector<std::int64_t> column_indices() const;
93
101
103 int block_size(int dim) const;
104
107 std::int64_t num_nonzeros() const;
108
112 std::int32_t nnz_diag(std::int32_t row) const;
113
117 std::int32_t nnz_off_diag(std::int32_t row) const;
118
125 std::pair<std::span<const std::int32_t>, std::span<const std::int64_t>>
126 graph() const;
127
131 std::span<const std::int32_t> off_diagonal_offsets() const;
132
134 MPI_Comm comm() const;
135
136private:
137 // MPI communicator
138 dolfinx::MPI::Comm _comm;
139
140 // Index maps for each dimension
141 std::array<std::shared_ptr<const common::IndexMap>, 2> _index_maps;
142
143 // Block size
144 std::array<int, 2> _bs;
145
146 // Non-zero ghost columns in owned rows
147 std::vector<std::int64_t> _col_ghosts;
148
149 // Owning process of ghost columns in owned rows
150 std::vector<std::int32_t> _col_ghost_owners;
151
152 // Cache for unassembled entries on owned and unowned (ghost) rows
153 std::vector<std::vector<std::int32_t>> _row_cache;
154
155 // Sparsity pattern adjacency data (computed once pattern is
156 // finalised). _edges holds the edges (connected dofs). The edges for
157 // node i are in the range [_offsets[i], _offsets[i + 1]).
158 std::vector<std::int32_t> _edges;
159 std::vector<std::int64_t> _offsets;
160
161 // Start of off-diagonal (unowned columns) on each row (row-wise)
162 std::vector<std::int32_t> _off_diagonal_offsets;
163};
164} // namespace dolfinx::la
A duplicate MPI communicator and manage lifetime of the communicator.
Definition MPI.h:43
This class represents the distribution index arrays across processes. An index array is a contiguous ...
Definition IndexMap.h:64
Sparsity pattern data structure that can be used to initialize sparse matrices. After assembly,...
Definition SparsityPattern.h:26
SparsityPattern(SparsityPattern &&pattern)=default
Move constructor.
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 ...
Definition SparsityPattern.cpp:193
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.
Definition SparsityPattern.cpp:402
void finalize()
Finalize sparsity pattern and communicate off-process entries.
Definition SparsityPattern.cpp:226
int block_size(int dim) const
Return index map block size for dimension dim.
Definition SparsityPattern.cpp:224
std::int32_t nnz_diag(std::int32_t row) const
Number of non-zeros in owned columns (diagonal block) on a given row.
Definition SparsityPattern.cpp:395
void insert_diagonal(std::span< const std::int32_t > rows)
Insert non-zero locations on the diagonal.
Definition SparsityPattern.cpp:168
std::int64_t num_nonzeros() const
Number of nonzeros on this rank after assembly, including ghost rows.
Definition SparsityPattern.cpp:388
void insert(const std::span< const std::int32_t > &rows, const std::span< const std::int32_t > &cols)
Insert non-zero locations using local (process-wise) indices.
Definition SparsityPattern.cpp:143
std::span< const std::int32_t > off_diagonal_offsets() const
Row-wise start of off-diagonals (unowned columns) for each row.
Definition SparsityPattern.cpp:417
std::vector< std::int64_t > column_indices() const
Global indices of non-zero columns on owned rows.
Definition SparsityPattern.cpp:198
common::IndexMap column_index_map() const
Builds the index map for columns after assembly of the sparsity pattern.
Definition SparsityPattern.cpp:213
MPI_Comm comm() const
Return MPI communicator.
Definition SparsityPattern.cpp:424
SparsityPattern & operator=(SparsityPattern &&pattern)=default
Move assignment.
~SparsityPattern()=default
Destructor.
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.
Definition SparsityPattern.cpp:410
Miscellaneous classes, functions and types.
Definition dolfinx_common.h:8
Linear algebra interface.
Definition sparsitybuild.h:15