Reference documentation for deal.II version 9.1.0-pre
trilinos_linear_operator.h
1 // ---------------------------------------------------------------------
2 //
3 // Copyright (C) 2016 - 2018 by the deal.II authors
4 //
5 // This file is part of the deal.II library.
6 //
7 // The deal.II library is free software; you can use it, redistribute
8 // it, and/or modify it under the terms of the GNU Lesser General
9 // Public License as published by the Free Software Foundation; either
10 // version 2.1 of the License, or (at your option) any later version.
11 // The full text of the license can be found in the file LICENSE.md at
12 // the top level directory of deal.II.
13 //
14 // ---------------------------------------------------------------------
15 
16 #ifndef dealii_trilinos_linear_operator_h
17 #define dealii_trilinos_linear_operator_h
18 
19 #include <deal.II/base/config.h>
20 
21 #if defined(DEAL_II_WITH_TRILINOS)
22 
23 # include <deal.II/lac/block_linear_operator.h>
24 # include <deal.II/lac/linear_operator.h>
25 
26 DEAL_II_NAMESPACE_OPEN
27 
28 namespace TrilinosWrappers
29 {
30  // Forward declarations:
31  class SparseMatrix;
32  class PreconditionBase;
33  class BlockSparseMatrix;
34 
35  namespace internal
36  {
37  namespace LinearOperatorImplementation
38  {
39  class TrilinosPayload;
40  }
41 
42  namespace BlockLinearOperatorImplementation
43  {
44  template <typename PayloadBlockType>
45  class TrilinosBlockPayload;
46  }
47  } // namespace internal
48 
49 
54 
55 
71  template <typename Range, typename Domain = Range, typename Matrix>
72  inline LinearOperator<
73  Range,
74  Domain,
77  const Matrix & matrix)
78  {
79  using OperatorExemplar = TrilinosWrappers::SparseMatrix;
80  using Payload =
82  return ::
83  linear_operator<Range, Domain, Payload, OperatorExemplar, Matrix>(
84  operator_exemplar, matrix);
85  }
86 
87 
102  template <typename Range, typename Domain = Range>
103  inline LinearOperator<
104  Range,
105  Domain,
108  {
109  using Matrix = TrilinosWrappers::SparseMatrix;
110  using Payload =
112  return ::linear_operator<Range, Domain, Payload, Matrix, Matrix>(
113  matrix, matrix);
114  }
115 
116 
118 
122 
123 
137  template <typename Range, typename Domain = Range>
138  inline BlockLinearOperator<
139  Range,
140  Domain,
145  {
146  using BlockMatrix = TrilinosWrappers::BlockSparseMatrix;
147  using PayloadBlockType =
149  using BlockPayload = TrilinosWrappers::internal::
151  return ::block_operator<Range, Domain, BlockPayload, BlockMatrix>(
152  block_matrix);
153  }
154 
155 
171  template <size_t m, size_t n, typename Range, typename Domain = Range>
172  inline BlockLinearOperator<
173  Range,
174  Domain,
179  const std::array<
180  std::array<
181  LinearOperator<typename Range::BlockType,
182  typename Domain::BlockType,
184  LinearOperatorImplementation::TrilinosPayload>,
185  n>,
186  m> &ops)
187  {
188  using PayloadBlockType =
190  using BlockPayload = TrilinosWrappers::internal::
192  return ::block_operator<m, n, Range, Domain, BlockPayload>(ops);
193  }
194 
195 
213  template <typename Range, typename Domain = Range>
214  inline BlockLinearOperator<
215  Range,
216  Domain,
221  const TrilinosWrappers::BlockSparseMatrix &block_matrix)
222  {
223  using BlockMatrix = TrilinosWrappers::BlockSparseMatrix;
224  using PayloadBlockType =
226  using BlockPayload = TrilinosWrappers::internal::
228  return ::
229  block_diagonal_operator<Range, Domain, BlockPayload, BlockMatrix>(
230  block_matrix);
231  }
232 
233 
249  template <size_t m, typename Range, typename Domain = Range>
250  inline BlockLinearOperator<
251  Range,
252  Domain,
257  const std::array<
258  LinearOperator<typename Range::BlockType,
259  typename Domain::BlockType,
261  TrilinosPayload>,
262  m> &ops)
263  {
264  using PayloadBlockType =
266  using BlockPayload = TrilinosWrappers::internal::
268  return ::block_diagonal_operator<m, Range, Domain, BlockPayload>(ops);
269  }
270 
272 
273 } // namespace TrilinosWrappers
274 
275 DEAL_II_NAMESPACE_CLOSE
276 
277 #endif // DEAL_II_WITH_TRILINOS
278 #endif
LinearOperator< Range, Domain, TrilinosWrappers::internal::LinearOperatorImplementation::TrilinosPayload > linear_operator(const TrilinosWrappers::SparseMatrix &operator_exemplar, const Matrix &matrix)
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_diagonal_operator(const TrilinosWrappers::BlockSparseMatrix &block_matrix)