MueLu Version of the Day
Loading...
Searching...
No Matches
Thyra_XpetraLinearOp_decl.hpp
Go to the documentation of this file.
1// @HEADER
2// *****************************************************************************
3// MueLu: A package for multigrid based preconditioning
4//
5// Copyright 2012 NTESS and the MueLu contributors.
6// SPDX-License-Identifier: BSD-3-Clause
7// *****************************************************************************
8// @HEADER
9
10#ifndef THYRA_XPETRA_LINEAR_OP_DECL_HPP
11#define THYRA_XPETRA_LINEAR_OP_DECL_HPP
12
13#include "Thyra_LinearOpDefaultBase.hpp"
14#include "Xpetra_Operator.hpp"
15#include "Teuchos_ConstNonconstObjectContainer.hpp"
16
17namespace Thyra {
18
25template <class Scalar, class LocalOrdinal, class GlobalOrdinal = LocalOrdinal,
26 class Node = Tpetra::KokkosClassic::DefaultNode::DefaultNodeType>
28 : virtual public Thyra::LinearOpDefaultBase<Scalar> {
29 public:
32
35
37
39 void initialize(
40 const RCP<const VectorSpaceBase<Scalar> > &rangeSpace,
41 const RCP<const VectorSpaceBase<Scalar> > &domainSpace,
42 const RCP<Xpetra::Operator<Scalar, LocalOrdinal, GlobalOrdinal, Node> > &xpetraOperator);
43
45 void constInitialize(
46 const RCP<const VectorSpaceBase<Scalar> > &rangeSpace,
47 const RCP<const VectorSpaceBase<Scalar> > &domainSpace,
48 const RCP<const Xpetra::Operator<Scalar, LocalOrdinal, GlobalOrdinal, Node> > &xpetraOperator);
49
51 RCP<Xpetra::Operator<Scalar, LocalOrdinal, GlobalOrdinal, Node> >
53
55 RCP<const Xpetra::Operator<Scalar, LocalOrdinal, GlobalOrdinal, Node> >
57
59
62
64 RCP<const Thyra::VectorSpaceBase<Scalar> > range() const;
65
67 RCP<const Thyra::VectorSpaceBase<Scalar> > domain() const;
68
70
71 protected:
74
76 bool opSupportedImpl(Thyra::EOpTransp M_trans) const;
77
79 void applyImpl(
80 const Thyra::EOpTransp M_trans,
81 const Thyra::MultiVectorBase<Scalar> &X_in,
82 const Teuchos::Ptr<Thyra::MultiVectorBase<Scalar> > &Y_inout,
83 const Scalar alpha,
84 const Scalar beta) const;
85
87
88 private:
89 RCP<const VectorSpaceBase<Scalar> >
91
92 RCP<const VectorSpaceBase<Scalar> >
94
95 Teuchos::ConstNonconstObjectContainer<Xpetra::Operator<Scalar, LocalOrdinal, GlobalOrdinal, Node> >
97
98 template <class XpetraOperator_t>
99 void initializeImpl(
100 const RCP<const VectorSpaceBase<Scalar> > &rangeSpace,
101 const RCP<const VectorSpaceBase<Scalar> > &domainSpace,
102 const RCP<XpetraOperator_t> &xpetraOperator);
103};
104
109template <class Scalar, class LocalOrdinal, class GlobalOrdinal, class Node>
110RCP<XpetraLinearOp<Scalar, LocalOrdinal, GlobalOrdinal, Node> >
112 const RCP<const VectorSpaceBase<Scalar> > &rangeSpace,
113 const RCP<const VectorSpaceBase<Scalar> > &domainSpace,
114 const RCP<Xpetra::Operator<Scalar, LocalOrdinal, GlobalOrdinal, Node> > &xpetraOperator) {
115 const RCP<XpetraLinearOp<Scalar, LocalOrdinal, GlobalOrdinal, Node> > op =
117 op->initialize(rangeSpace, domainSpace, xpetraOperator);
118 return op;
119}
120
125template <class Scalar, class LocalOrdinal, class GlobalOrdinal, class Node>
126RCP<const XpetraLinearOp<Scalar, LocalOrdinal, GlobalOrdinal, Node> >
128 const RCP<const VectorSpaceBase<Scalar> > &rangeSpace,
129 const RCP<const VectorSpaceBase<Scalar> > &domainSpace,
130 const RCP<const Xpetra::Operator<Scalar, LocalOrdinal, GlobalOrdinal, Node> > &xpetraOperator) {
131 const RCP<XpetraLinearOp<Scalar, LocalOrdinal, GlobalOrdinal, Node> > op =
133 op->constInitialize(rangeSpace, domainSpace, xpetraOperator);
134 return op;
135}
136
137} // namespace Thyra
138
139#endif // THYRA_XPETRA_LINEAR_OP_DECL_HPP
MueLu::DefaultLocalOrdinal LocalOrdinal
MueLu::DefaultScalar Scalar
MueLu::DefaultGlobalOrdinal GlobalOrdinal
MueLu::DefaultNode Node
Concrete Thyra::LinearOpBase subclass for Xpetra::Operator.
void applyImpl(const Thyra::EOpTransp M_trans, const Thyra::MultiVectorBase< Scalar > &X_in, const Teuchos::Ptr< Thyra::MultiVectorBase< Scalar > > &Y_inout, const Scalar alpha, const Scalar beta) const
void constInitialize(const RCP< const VectorSpaceBase< Scalar > > &rangeSpace, const RCP< const VectorSpaceBase< Scalar > > &domainSpace, const RCP< const Xpetra::Operator< Scalar, LocalOrdinal, GlobalOrdinal, Node > > &xpetraOperator)
Initialize.
RCP< const VectorSpaceBase< Scalar > > domainSpace_
RCP< const XpetraLinearOp< Scalar, LocalOrdinal, GlobalOrdinal, Node > > constXpetraLinearOp(const RCP< const VectorSpaceBase< Scalar > > &rangeSpace, const RCP< const VectorSpaceBase< Scalar > > &domainSpace, const RCP< const Xpetra::Operator< Scalar, LocalOrdinal, GlobalOrdinal, Node > > &xpetraOperator)
Nonmmeber constructor for XpetraLinearOp.
Teuchos::ConstNonconstObjectContainer< Xpetra::Operator< Scalar, LocalOrdinal, GlobalOrdinal, Node > > xpetraOperator_
RCP< const Thyra::VectorSpaceBase< Scalar > > range() const
RCP< const Thyra::VectorSpaceBase< Scalar > > domain() const
RCP< const Xpetra::Operator< Scalar, LocalOrdinal, GlobalOrdinal, Node > > getConstXpetraOperator() const
Get embedded const Xpetra::Operator.
RCP< XpetraLinearOp< Scalar, LocalOrdinal, GlobalOrdinal, Node > > xpetraLinearOp(const RCP< const VectorSpaceBase< Scalar > > &rangeSpace, const RCP< const VectorSpaceBase< Scalar > > &domainSpace, const RCP< Xpetra::Operator< Scalar, LocalOrdinal, GlobalOrdinal, Node > > &xpetraOperator)
Nonmmeber constructor for XpetraLinearOp.
void initialize(const RCP< const VectorSpaceBase< Scalar > > &rangeSpace, const RCP< const VectorSpaceBase< Scalar > > &domainSpace, const RCP< Xpetra::Operator< Scalar, LocalOrdinal, GlobalOrdinal, Node > > &xpetraOperator)
Initialize.
RCP< Xpetra::Operator< Scalar, LocalOrdinal, GlobalOrdinal, Node > > getXpetraOperator()
Get embedded non-const Xpetra::Operator.
void initializeImpl(const RCP< const VectorSpaceBase< Scalar > > &rangeSpace, const RCP< const VectorSpaceBase< Scalar > > &domainSpace, const RCP< XpetraOperator_t > &xpetraOperator)
bool opSupportedImpl(Thyra::EOpTransp M_trans) const
RCP< const VectorSpaceBase< Scalar > > rangeSpace_
XpetraLinearOp()
Construct to uninitialized.