Ifpack2 Templated Preconditioning Package Version 1.0
Loading...
Searching...
No Matches
Ifpack2_BorderedOperator_def.hpp
1// @HEADER
2// *****************************************************************************
3// Ifpack2: Templated Object-Oriented Algebraic Preconditioner Package
4//
5// Copyright 2009 NTESS and the Ifpack2 contributors.
6// SPDX-License-Identifier: BSD-3-Clause
7// *****************************************************************************
8// @HEADER
9
10#ifndef IFPACK2_BORDEREDOPERATOR_DEF_HPP
11#define IFPACK2_BORDEREDOPERATOR_DEF_HPP
12
13#include "Ifpack2_BorderedOperator_decl.hpp"
14#include "Tpetra_MultiVector.hpp"
15#include "Teuchos_TestForException.hpp"
16
17namespace Ifpack2 {
18
19template <class Scalar, class LocalOrdinal, class GlobalOrdinal, class Node>
21 BorderedOperator(const Teuchos::RCP<const Tpetra::Operator<Scalar, LocalOrdinal, GlobalOrdinal, Node> >& A)
22 : A_(A) {
23 TEUCHOS_TEST_FOR_EXCEPTION(
24 A_.is_null(), std::runtime_error,
25 Teuchos::typeName(*this) << "::BorderedOperator constructor: "
26 "The input Operator A is null.");
27}
28
29template <class Scalar, class LocalOrdinal, class GlobalOrdinal, class Node>
30Teuchos::RCP<const Tpetra::Map<LocalOrdinal, GlobalOrdinal, Node> >
34
35template <class Scalar, class LocalOrdinal, class GlobalOrdinal, class Node>
36Teuchos::RCP<const Tpetra::Map<LocalOrdinal, GlobalOrdinal, Node> >
40
41template <class Scalar, class LocalOrdinal, class GlobalOrdinal, class Node>
43 return A_->hasTransposeApply();
44}
45
46template <class Scalar, class LocalOrdinal, class GlobalOrdinal, class Node>
48 apply(const Tpetra::MultiVector<Scalar, LocalOrdinal, GlobalOrdinal, Node>& X,
49 Tpetra::MultiVector<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Y,
50 Teuchos::ETransp mode,
51 Scalar coefAx,
52 Scalar coefY) const {
53 TEUCHOS_TEST_FOR_EXCEPTION(
54 X.getNumVectors() != Y.getNumVectors(), std::runtime_error,
55 "Ifpack2::BorderedOperator::apply(): X.getNumVectors() = "
56 << X.getNumVectors() << " != Y.getNumVectors() = "
57 << Y.getNumVectors() << ".");
58 A_->apply(X, Y, mode, coefAx, coefY);
59}
60
61} // namespace Ifpack2
62
63#define IFPACK2_BORDEREDOPERATOR_INSTANT(S, LO, GO, N) \
64 template class Ifpack2::BorderedOperator<S, LO, GO, N>;
65
66#endif /* IFPACK2_BorderedOperator_DEF_HPP */
virtual Teuchos::RCP< const Tpetra::Map< LocalOrdinal, GlobalOrdinal, Node > > getRangeMap() const
The range Map of this operator. It must be compatible with Y.getMap().
Definition Ifpack2_BorderedOperator_def.hpp:37
bool hasTransposeApply() const
Whether this operator can apply the transpose or conjugate transpose.
Definition Ifpack2_BorderedOperator_def.hpp:42
BorderedOperator(const Teuchos::RCP< const Tpetra::Operator< Scalar, LocalOrdinal, GlobalOrdinal, Node > > &A)
Constructor with Tpetra::Operator input.
Definition Ifpack2_BorderedOperator_def.hpp:21
void apply(const Tpetra::MultiVector< Scalar, LocalOrdinal, GlobalOrdinal, Node > &X, Tpetra::MultiVector< Scalar, LocalOrdinal, GlobalOrdinal, Node > &Y, Teuchos::ETransp mode=Teuchos::NO_TRANS, Scalar alpha=Teuchos::ScalarTraits< Scalar >::one(), Scalar beta=Teuchos::ScalarTraits< Scalar >::zero()) const
Apply the bordered operator.
Definition Ifpack2_BorderedOperator_def.hpp:48
virtual Teuchos::RCP< const Tpetra::Map< LocalOrdinal, GlobalOrdinal, Node > > getDomainMap() const
The domain Map of this operator. It must be compatible with X.getMap().
Definition Ifpack2_BorderedOperator_def.hpp:31
Preconditioners and smoothers for Tpetra sparse matrices.
Definition Ifpack2_AdditiveSchwarz_decl.hpp:40