42 #ifndef IFPACK2_TRIDICONTAINER_DECL_HPP 43 #define IFPACK2_TRIDICONTAINER_DECL_HPP 50 #include "Ifpack2_Details_LapackSupportsScalar.hpp" 51 #include "Tpetra_MultiVector.hpp" 52 #include "Tpetra_Map.hpp" 53 #include "Tpetra_RowMatrix.hpp" 54 #include "Teuchos_SerialDenseVector.hpp" 55 #include "Teuchos_SerialTriDiMatrix.hpp" 56 #include <type_traits> 105 template<
class MatrixType,
106 class LocalScalarType,
107 const bool supportsLocalScalarType =
113 template<
class MatrixType,
114 class LocalScalarType>
139 static_assert (std::is_same<MatrixType, Tpetra::RowMatrix<scalar_type, local_ordinal_type, global_ordinal_type, node_type> >::value,
140 "Ifpack2::TriDiContainer: MatrixType must be a Tpetra::RowMatrix specialization.");
150 typedef typename Container<MatrixType>::row_matrix_type
row_matrix_type;
169 TriDiContainer (
const Teuchos::RCP<const row_matrix_type>& matrix,
170 const Teuchos::ArrayView<const local_ordinal_type>& localRows);
183 virtual size_t getNumRows()
const;
186 virtual bool isInitialized()
const;
189 virtual bool isComputed()
const;
192 virtual void setParameters(
const Teuchos::ParameterList& List);
199 virtual void initialize ();
202 virtual void compute ();
206 apply (
const Tpetra::MultiVector<scalar_type,local_ordinal_type,global_ordinal_type,node_type>& X,
207 Tpetra::MultiVector<scalar_type,local_ordinal_type,global_ordinal_type,node_type>& Y,
208 Teuchos::ETransp mode=Teuchos::NO_TRANS,
209 scalar_type alpha=Teuchos::ScalarTraits<scalar_type>::one(),
210 scalar_type beta=Teuchos::ScalarTraits<scalar_type>::zero())
const;
214 weightedApply (
const Tpetra::MultiVector<scalar_type,local_ordinal_type,global_ordinal_type,node_type>& X,
215 Tpetra::MultiVector<scalar_type,local_ordinal_type,global_ordinal_type,node_type>& Y,
216 const Tpetra::Vector<scalar_type,local_ordinal_type,global_ordinal_type,node_type>& D,
217 Teuchos::ETransp mode=Teuchos::NO_TRANS,
218 scalar_type alpha=Teuchos::ScalarTraits<scalar_type>::one(),
219 scalar_type beta=Teuchos::ScalarTraits<scalar_type>::zero())
const;
228 virtual std::ostream& print (std::ostream& os)
const;
235 virtual std::string description ()
const;
239 describe (Teuchos::FancyOStream &out,
240 const Teuchos::EVerbosityLevel verbLevel =
241 Teuchos::Describable::verbLevel_default)
const;
249 void extract (
const Teuchos::RCP<const row_matrix_type>& globalMatrix);
256 typedef Tpetra::MultiVector<local_scalar_type, local_ordinal_type,
257 global_ordinal_type, node_type> local_mv_type;
268 applyImpl (
const local_mv_type& X,
270 Teuchos::ETransp mode,
271 const local_scalar_type alpha,
272 const local_scalar_type beta)
const;
278 Teuchos::SerialTriDiMatrix<int, local_scalar_type> diagBlock_;
281 Teuchos::Array<int> ipiv_;
284 Teuchos::RCP<const Tpetra::Map<local_ordinal_type, global_ordinal_type, node_type> > localMap_;
287 mutable Teuchos::RCP<local_mv_type> Y_;
290 mutable Teuchos::RCP<local_mv_type> X_;
302 template<
class MatrixType,
303 class LocalScalarType>
328 static_assert (std::is_same<MatrixType, Tpetra::RowMatrix<scalar_type, local_ordinal_type, global_ordinal_type, node_type> >::value,
329 "Ifpack2::TriDiContainer: MatrixType must be a Tpetra::RowMatrix specialization.");
339 typedef typename Container<MatrixType>::row_matrix_type
row_matrix_type;
358 TriDiContainer (
const Teuchos::RCP<const row_matrix_type>& matrix,
359 const Teuchos::ArrayView<const local_ordinal_type>& localRows);
372 virtual size_t getNumRows()
const;
375 virtual bool isInitialized()
const;
378 virtual bool isComputed()
const;
381 virtual void setParameters(
const Teuchos::ParameterList& List);
388 virtual void initialize ();
391 virtual void compute ();
395 apply (
const Tpetra::MultiVector<scalar_type,local_ordinal_type,global_ordinal_type,node_type>& X,
396 Tpetra::MultiVector<scalar_type,local_ordinal_type,global_ordinal_type,node_type>& Y,
397 Teuchos::ETransp mode=Teuchos::NO_TRANS,
398 scalar_type alpha=Teuchos::ScalarTraits<scalar_type>::one(),
399 scalar_type beta=Teuchos::ScalarTraits<scalar_type>::zero())
const;
403 weightedApply (
const Tpetra::MultiVector<scalar_type,local_ordinal_type,global_ordinal_type,node_type>& X,
404 Tpetra::MultiVector<scalar_type,local_ordinal_type,global_ordinal_type,node_type>& Y,
405 const Tpetra::Vector<scalar_type,local_ordinal_type,global_ordinal_type,node_type>& D,
406 Teuchos::ETransp mode=Teuchos::NO_TRANS,
407 scalar_type alpha=Teuchos::ScalarTraits<scalar_type>::one(),
408 scalar_type beta=Teuchos::ScalarTraits<scalar_type>::zero())
const;
417 virtual std::ostream& print (std::ostream& os)
const;
424 virtual std::string description ()
const;
428 describe (Teuchos::FancyOStream &out,
429 const Teuchos::EVerbosityLevel verbLevel =
430 Teuchos::Describable::verbLevel_default)
const;
438 void extract (
const Teuchos::RCP<const row_matrix_type>& globalMatrix);
445 typedef Tpetra::MultiVector<local_scalar_type, local_ordinal_type,
446 global_ordinal_type, node_type> local_mv_type;
457 applyImpl (
const local_mv_type& X,
459 Teuchos::ETransp mode,
460 const local_scalar_type alpha,
461 const local_scalar_type beta)
const;
467 Teuchos::SerialTriDiMatrix<int, local_scalar_type> diagBlock_;
470 Teuchos::Array<int> ipiv_;
473 Teuchos::RCP<const Tpetra::Map<local_ordinal_type, global_ordinal_type, node_type> > localMap_;
476 mutable Teuchos::RCP<local_mv_type> Y_;
479 mutable Teuchos::RCP<local_mv_type> X_;
490 #endif // IFPACK2_TRIDICONTAINER_DECL_HPP MatrixType::node_type node_type
The Node type of the input (global) matrix.
Definition: Ifpack2_TriDiContainer_decl.hpp:137
LocalScalarType local_scalar_type
The second template parameter of this class.
Definition: Ifpack2_TriDiContainer_decl.hpp:317
Store and solve a local TriDi linear problem.
Definition: Ifpack2_TriDiContainer_decl.hpp:109
MatrixType::local_ordinal_type local_ordinal_type
The type of local indices in the input (global) matrix.
Definition: Ifpack2_TriDiContainer_decl.hpp:322
MatrixType::global_ordinal_type global_ordinal_type
The type of global indices in the input (global) matrix.
Definition: Ifpack2_TriDiContainer_decl.hpp:324
Ifpack2::Container class declaration.
LocalScalarType local_scalar_type
The second template parameter of this class.
Definition: Ifpack2_TriDiContainer_decl.hpp:128
MatrixType::local_ordinal_type local_ordinal_type
The type of local indices in the input (global) matrix.
Definition: Ifpack2_TriDiContainer_decl.hpp:133
MatrixType matrix_type
The first template parameter of this class.
Definition: Ifpack2_TriDiContainer_decl.hpp:315
MatrixType::scalar_type scalar_type
The type of entries in the input (global) matrix.
Definition: Ifpack2_TriDiContainer_decl.hpp:131
Declaration and definition of the Ifpack2::Details::MultiVectorLocalGatherScatter class...
MatrixType::node_type node_type
The Node type of the input (global) matrix.
Definition: Ifpack2_TriDiContainer_decl.hpp:326
MatrixType matrix_type
The first template parameter of this class.
Definition: Ifpack2_TriDiContainer_decl.hpp:126
Container< MatrixType >::row_matrix_type row_matrix_type
The (base class) type of the input matrix.
Definition: Ifpack2_TriDiContainer_decl.hpp:140
Interface for creating and solving a local linear problem.
Definition: Ifpack2_Container.hpp:103
MatrixType::scalar_type scalar_type
The type of entries in the input (global) matrix.
Definition: Ifpack2_TriDiContainer_decl.hpp:320
Preconditioners and smoothers for Tpetra sparse matrices.
Definition: Ifpack2_AdditiveSchwarz_decl.hpp:72
MatrixType::global_ordinal_type global_ordinal_type
The type of global indices in the input (global) matrix.
Definition: Ifpack2_TriDiContainer_decl.hpp:135
Type traits class that says whether Teuchos::LAPACK has a valid implementation for the given ScalarTy...
Definition: Ifpack2_Details_LapackSupportsScalar.hpp:17
Container< MatrixType >::row_matrix_type row_matrix_type
The (base class) type of the input matrix.
Definition: Ifpack2_TriDiContainer_decl.hpp:329