deal.II version GIT relicensing-6839-g338455934c 2026-10-02 12:10:01+00:00
\(\newcommand{\dealvcentcolon}{\mathrel{\mathop{:}}}\) \(\newcommand{\dealcoloneq}{\dealvcentcolon\mathrel{\mkern-1.2mu}=}\) \(\newcommand{\jump}[1]{\left[\!\left[ #1 \right]\!\right]}\) \(\newcommand{\average}[1]{\left\{\!\left\{ #1 \right\}\!\right\}}\)
Loading...
Searching...
No Matches
trilinos_linear_operator.h
Go to the documentation of this file.
1// -----------------------------------------------------------------------------
2//
3// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception OR LGPL-2.1-or-later
4// Copyright (C) 2017 - 2026 by the deal.II authors
5//
6// This file is part of the deal.II library.
7//
8// Detailed license information governing the source code and contributions
9// can be found in LICENSE.md and CONTRIBUTING.md at the top level directory.
10//
11// -----------------------------------------------------------------------------
12
13#ifndef dealii_trilinos_linear_operator_h
14#define dealii_trilinos_linear_operator_h
15
16#include <deal.II/base/config.h>
17
18#ifdef DEAL_II_WITH_TRILINOS
19
23
24#endif // DEAL_II_WITH_TRILINOS
25
27
28#ifdef DEAL_II_WITH_TRILINOS
29namespace TrilinosWrappers
30{
31 // Forward declarations:
32# ifndef DOXYGEN
33 namespace internal
34 {
35 namespace LinearOperatorImplementation
36 {
37 class TrilinosPayload;
38 }
39
40 namespace BlockLinearOperatorImplementation
41 {
42 template <typename PayloadBlockType>
43 class TrilinosBlockPayload;
44 }
45 } // namespace internal
46# endif
47
68 template <typename Range, typename Domain = Range, typename Matrix>
69 inline LinearOperator<
70 Range,
71 Domain,
74 const Matrix &matrix)
75 {
76 using OperatorExemplar = TrilinosWrappers::SparseMatrix;
77 using Payload =
79 return ::
80 linear_operator<Range, Domain, Payload, OperatorExemplar, Matrix>(
81 operator_exemplar, matrix);
82 }
83
84
98 template <typename Range, typename Domain = Range>
99 inline LinearOperator<
100 Range,
101 Domain,
104 {
105 using Matrix = TrilinosWrappers::SparseMatrix;
106 using Payload =
108 return ::linear_operator<Range, Domain, Payload, Matrix, Matrix>(
109 matrix, matrix);
110 }
111
112
127 template <typename Range, typename Domain, typename Matrix>
128 inline LinearOperator<
129 Range,
130 Domain,
133 const LinearOperator<
134 Range,
135 Domain,
137 &operator_exemplar,
138 const Matrix &matrix)
139 {
140 using Payload =
142 using OperatorExemplar = LinearOperator<Range, Domain, Payload>;
143 return ::
144 linear_operator<Range, Domain, Payload, OperatorExemplar, Matrix>(
145 operator_exemplar, matrix);
146 }
147
148
168 template <typename Range, typename Domain = Range>
169 inline BlockLinearOperator<
170 Range,
171 Domain,
172 TrilinosWrappers::internal::BlockLinearOperatorImplementation::
173 TrilinosBlockPayload<TrilinosWrappers::internal::
174 LinearOperatorImplementation::TrilinosPayload>>
176 {
177 using BlockMatrix = TrilinosWrappers::BlockSparseMatrix;
178 using PayloadBlockType =
180 using BlockPayload = TrilinosWrappers::internal::
181 BlockLinearOperatorImplementation::TrilinosBlockPayload<PayloadBlockType>;
182 return ::block_operator<Range, Domain, BlockPayload, BlockMatrix>(
183 block_matrix);
184 }
185
186
201 template <std::size_t m,
202 std::size_t n,
203 typename Range,
204 typename Domain = Range>
205 inline BlockLinearOperator<
206 Range,
207 Domain,
208 TrilinosWrappers::internal::BlockLinearOperatorImplementation::
209 TrilinosBlockPayload<TrilinosWrappers::internal::
210 LinearOperatorImplementation::TrilinosPayload>>
212 const std::array<
213 std::array<
214 LinearOperator<typename Range::BlockType,
215 typename Domain::BlockType,
217 LinearOperatorImplementation::TrilinosPayload>,
218 n>,
219 m> &ops)
220 {
221 using PayloadBlockType =
223 using BlockPayload = TrilinosWrappers::internal::
224 BlockLinearOperatorImplementation::TrilinosBlockPayload<PayloadBlockType>;
225 return ::block_operator<m, n, Range, Domain, BlockPayload>(ops);
226 }
227
228
245 template <typename Range, typename Domain = Range>
246 inline BlockLinearOperator<
247 Range,
248 Domain,
249 TrilinosWrappers::internal::BlockLinearOperatorImplementation::
250 TrilinosBlockPayload<TrilinosWrappers::internal::
251 LinearOperatorImplementation::TrilinosPayload>>
253 const TrilinosWrappers::BlockSparseMatrix &block_matrix)
254 {
255 using BlockMatrix = TrilinosWrappers::BlockSparseMatrix;
256 using PayloadBlockType =
258 using BlockPayload = TrilinosWrappers::internal::
259 BlockLinearOperatorImplementation::TrilinosBlockPayload<PayloadBlockType>;
260 return ::
261 block_diagonal_operator<Range, Domain, BlockPayload, BlockMatrix>(
262 block_matrix);
263 }
264
265
280 template <std::size_t m, typename Range, typename Domain = Range>
281 inline BlockLinearOperator<
282 Range,
283 Domain,
284 TrilinosWrappers::internal::BlockLinearOperatorImplementation::
285 TrilinosBlockPayload<TrilinosWrappers::internal::
286 LinearOperatorImplementation::TrilinosPayload>>
288 const std::array<
289 LinearOperator<typename Range::BlockType,
290 typename Domain::BlockType,
292 TrilinosPayload>,
293 m> &ops)
294 {
295 using PayloadBlockType =
297 using BlockPayload = TrilinosWrappers::internal::
298 BlockLinearOperatorImplementation::TrilinosBlockPayload<PayloadBlockType>;
299 return ::block_diagonal_operator<m, Range, Domain, BlockPayload>(ops);
300 }
301
304} // namespace TrilinosWrappers
305
306#endif // DEAL_II_WITH_TRILINOS
307
309#endif
#define DEAL_II_NAMESPACE_OPEN
Definition config.h:38
#define DEAL_II_NAMESPACE_CLOSE
Definition config.h:39
BlockLinearOperator< Range, Domain, TrilinosWrappers::internal::BlockLinearOperatorImplementation::TrilinosBlockPayload< TrilinosWrappers::internal::LinearOperatorImplementation::TrilinosPayload > > block_operator(const TrilinosWrappers::BlockSparseMatrix &block_matrix)
BlockLinearOperator< Range, Domain, TrilinosWrappers::internal::BlockLinearOperatorImplementation::TrilinosBlockPayload< TrilinosWrappers::internal::LinearOperatorImplementation::TrilinosPayload > > block_operator(const std::array< std::array< LinearOperator< typename Range::BlockType, typename Domain::BlockType, TrilinosWrappers::internal::LinearOperatorImplementation::TrilinosPayload >, n >, m > &ops)
LinearOperator< Range, Domain, TrilinosWrappers::internal::LinearOperatorImplementation::TrilinosPayload > linear_operator(const LinearOperator< Range, Domain, TrilinosWrappers::internal::LinearOperatorImplementation::TrilinosPayload > &operator_exemplar, const Matrix &matrix)
LinearOperator< Range, Domain, TrilinosWrappers::internal::LinearOperatorImplementation::TrilinosPayload > linear_operator(const TrilinosWrappers::SparseMatrix &matrix)
BlockLinearOperator< Range, Domain, TrilinosWrappers::internal::BlockLinearOperatorImplementation::TrilinosBlockPayload< TrilinosWrappers::internal::LinearOperatorImplementation::TrilinosPayload > > block_diagonal_operator(const TrilinosWrappers::BlockSparseMatrix &block_matrix)
BlockLinearOperator< Range, Domain, TrilinosWrappers::internal::BlockLinearOperatorImplementation::TrilinosBlockPayload< TrilinosWrappers::internal::LinearOperatorImplementation::TrilinosPayload > > block_diagonal_operator(const std::array< LinearOperator< typename Range::BlockType, typename Domain::BlockType, TrilinosWrappers::internal::LinearOperatorImplementation::TrilinosPayload >, m > &ops)
LinearOperator< Range, Domain, TrilinosWrappers::internal::LinearOperatorImplementation::TrilinosPayload > linear_operator(const TrilinosWrappers::SparseMatrix &operator_exemplar, const Matrix &matrix)