46 #ifndef XPETRA_OPERATOR_HPP
47 #define XPETRA_OPERATOR_HPP
51 #include <Teuchos_Describable.hpp>
52 #include <Teuchos_BLAS_types.hpp>
53 #include <Teuchos_ScalarTraits.hpp>
55 #include "Xpetra_Map.hpp"
56 #include "Xpetra_MultiVector.hpp"
60 template<
class Scalar,
64 class Operator :
virtual public Teuchos::Describable {
89 virtual Teuchos::RCP<const Map>
getDomainMap()
const = 0;
92 virtual Teuchos::RCP<const Map>
getRangeMap()
const = 0;
102 Teuchos::ETransp mode = Teuchos::NO_TRANS,
103 Scalar alpha = Teuchos::ScalarTraits<Scalar>::one(),
104 Scalar beta = Teuchos::ScalarTraits<Scalar>::zero())
const = 0;
127 #define XPETRA_OPERATOR_SHORT
128 #endif // XPETRA_OPERATOR_HPP
virtual void apply(const MultiVector &X, MultiVector &Y, Teuchos::ETransp mode=Teuchos::NO_TRANS, Scalar alpha=Teuchos::ScalarTraits< Scalar >::one(), Scalar beta=Teuchos::ScalarTraits< Scalar >::zero()) const =0
Computes the operator-multivector application.
Scalar scalar_type
The type of the entries of the input and output multivectors.
Xpetra::MultiVector< Scalar, LocalOrdinal, GlobalOrdinal, Node > MultiVector
Node node_type
The Kokkos Node type.
GlobalOrdinal global_ordinal_type
The global index type.
LocalOrdinal local_ordinal_type
The local index type.
Xpetra::Map< LocalOrdinal, GlobalOrdinal, Node > Map
virtual void removeEmptyProcessesInPlace(const RCP< const Map > &)
virtual void residual(const MultiVector &X, const MultiVector &B, MultiVector &R) const =0
Compute a residual R = B - (*this) * X.
virtual Teuchos::RCP< const Map > getRangeMap() const =0
The Map associated with the range of this operator, which must be compatible with Y...
virtual bool hasTransposeApply() const
Whether this operator supports applying the transpose or conjugate transpose.
virtual Teuchos::RCP< const Map > getDomainMap() const =0
The Map associated with the domain of this operator, which must be compatible with X...