10#ifndef THYRA_TPETRA_THYRA_WRAPPERS_HPP
11#define THYRA_TPETRA_THYRA_WRAPPERS_HPP
14#include "Thyra_TpetraThyraWrappers.hpp"
15#include "Thyra_TpetraVectorSpace.hpp"
16#include "Thyra_TpetraVector.hpp"
17#include "Thyra_TpetraMultiVector.hpp"
18#include "Thyra_TpetraLinearOp.hpp"
24template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
26getOrCreateTpetraVectorSpace(
27 const RCP<
const VectorSpaceBase<Scalar> > space,
28 const RCP<
const Tpetra::Map<LocalOrdinal,GlobalOrdinal,Node> > &tpetraMap
31 using Teuchos::rcp_dynamic_cast;
32 typedef TpetraVectorSpace<Scalar,LocalOrdinal,GlobalOrdinal,Node> TpetraVectorSpace_t;
33 RCP<const TpetraVectorSpace_t> tpetraSpace;
35 tpetraSpace = rcp_dynamic_cast<const TpetraVectorSpace_t>(space,
true);
38 tpetraSpace = tpetraVectorSpace<Scalar>(tpetraMap);
44template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
46getOrCreateLocallyReplicatedTpetraVectorSpace(
47 const RCP<
const VectorSpaceBase<Scalar> > space,
52 using Teuchos::rcp_dynamic_cast;
53 typedef TpetraVectorSpace<Scalar,LocalOrdinal,GlobalOrdinal,Node> TpetraVectorSpace_t;
54 RCP<const TpetraVectorSpace_t> tpetraSpace;
56 tpetraSpace = rcp_dynamic_cast<const TpetraVectorSpace_t>(space,
true);
59 tpetraSpace = tpetraVectorSpace<Scalar>(
60 Tpetra::createLocalMapWithNode<LocalOrdinal,GlobalOrdinal,Node>(
71template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
74 const RCP<
const Tpetra::Map<LocalOrdinal,GlobalOrdinal,Node> > &tpetraMap
77 return tpetraVectorSpace<Scalar>(tpetraMap);
81template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
84 const RCP<Tpetra::Vector<Scalar,LocalOrdinal,GlobalOrdinal,Node> > &tpetraVector_in,
85 const RCP<
const VectorSpaceBase<Scalar> > space_in
89 getOrCreateTpetraVectorSpace(space_in, tpetraVector_in->getMap()),
95template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
98 const RCP<
const Tpetra::Vector<Scalar,LocalOrdinal,GlobalOrdinal,Node> > &tpetraVector_in,
99 const RCP<
const VectorSpaceBase<Scalar> > space
102 return constTpetraVector(
103 getOrCreateTpetraVectorSpace(space, tpetraVector_in->getMap()),
109template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
112 const RCP<Tpetra::MultiVector<Scalar,LocalOrdinal,GlobalOrdinal,Node> > &tpetraMultiVector_in,
113 const RCP<
const VectorSpaceBase<Scalar> > rangeSpace,
114 const RCP<
const VectorSpaceBase<Scalar> > domainSpace
117 return tpetraMultiVector(
118 getOrCreateTpetraVectorSpace(rangeSpace, tpetraMultiVector_in->getMap()),
119 getOrCreateLocallyReplicatedTpetraVectorSpace<Scalar, LocalOrdinal, GlobalOrdinal, Node>(
120 domainSpace, tpetraMultiVector_in->getMap()->getComm(),
121 tpetraMultiVector_in->getNumVectors()
128template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
131 const RCP<
const Tpetra::MultiVector<Scalar,LocalOrdinal,GlobalOrdinal,Node> > &tpetraMultiVector_in,
132 const RCP<
const VectorSpaceBase<Scalar> > rangeSpace,
133 const RCP<
const VectorSpaceBase<Scalar> > domainSpace
136 return constTpetraMultiVector(
137 getOrCreateTpetraVectorSpace(rangeSpace, tpetraMultiVector_in->getMap()),
138 getOrCreateLocallyReplicatedTpetraVectorSpace<Scalar, LocalOrdinal, GlobalOrdinal, Node>(
139 domainSpace, tpetraMultiVector_in->getMap()->getComm(),
140 tpetraMultiVector_in->getNumVectors()
147template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
150 const RCP<Tpetra::Operator<Scalar,LocalOrdinal,GlobalOrdinal,Node> > &tpetraOperator_in,
151 const RCP<
const VectorSpaceBase<Scalar> > rangeSpace,
152 const RCP<
const VectorSpaceBase<Scalar> > domainSpace
158 return tpetraLinearOp<Scalar,LocalOrdinal,GlobalOrdinal,Node>(
166template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
169 const RCP<
const Tpetra::Operator<Scalar,LocalOrdinal,GlobalOrdinal,Node> > &tpetraOperator_in,
170 const RCP<
const VectorSpaceBase<Scalar> > rangeSpace,
171 const RCP<
const VectorSpaceBase<Scalar> > domainSpace
176 return constTpetraLinearOp<Scalar,LocalOrdinal,GlobalOrdinal,Node>(
186template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
187RCP<const Tpetra::Map<LocalOrdinal,GlobalOrdinal,Node> >
196template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
206template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
216template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
226 using Teuchos::rcp_dynamic_cast;
229 ThyraTpetraMultiVector_t;
231 rcp_dynamic_cast<ThyraTpetraMultiVector_t>(mv);
233 return tmv->getTpetraMultiVector();
239 rcp_dynamic_cast<ThyraTpetraVector_t>(mv);
241 return tv->getTpetraVector();
245 "Error, the input mv = " << mv->description() <<
" does not support the"
246 " Thyra::TpetraMultiVector or the Thyra::TpetraVector interfaces!");
253template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
263 using Teuchos::rcp_dynamic_cast;
266 ThyraTpetraMultiVector_t;
268 rcp_dynamic_cast<const ThyraTpetraMultiVector_t>(mv);
270 return tmv->getConstTpetraMultiVector();
276 rcp_dynamic_cast<const ThyraTpetraVector_t>(mv);
278 return tv->getConstTpetraVector();
282 "Error, the input mv = " << mv->description() <<
" does not support the"
283 " Thyra::TpetraMultiVector or the Thyra::TpetraVector interfaces!");
290template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
300template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
Base class for all linear operators.
Interface for a collection of column vectors called a multi-vector.
Concrete Thyra::LinearOpBase subclass for Tpetra::Operator.
RCP< const Tpetra::Operator< Scalar, LocalOrdinal, GlobalOrdinal, Node > > getConstTpetraOperator() const
Get embedded const Tpetra::Operator.
RCP< Tpetra::Operator< Scalar, LocalOrdinal, GlobalOrdinal, Node > > getTpetraOperator()
Get embedded non-const Tpetra::Operator.
Concrete implementation of Thyra::MultiVector in terms of Tpetra::MultiVector.
Concrete implementation of an SPMD vector space for Tpetra.
RCP< const Tpetra::Map< LocalOrdinal, GlobalOrdinal, Node > > getTpetraMap() const
Get the embedded Tpetra::Map.
Concrete Thyra::SpmdVectorBase using Tpetra::Vector.
RCP< Tpetra::Vector< Scalar, LocalOrdinal, GlobalOrdinal, Node > > getTpetraVector()
Get the embedded non-const Tpetra::Vector.
RCP< const Tpetra::Vector< Scalar, LocalOrdinal, GlobalOrdinal, Node > > getConstTpetraVector() const
Get the embedded non-const Tpetra::Vector.
Abstract interface for finite-dimensional dense vectors.
Abstract interface for objects that represent a space for vectors.
#define TEUCHOS_ASSERT(assertion_test)
#define TEUCHOS_TEST_FOR_EXCEPTION(throw_exception_test, Exception, msg)
bool nonnull(const std::shared_ptr< T > &p)
RCP< const VectorBase< Scalar > > createConstVector(const RCP< const Tpetra::Vector< Scalar, LocalOrdinal, GlobalOrdinal, Node > > &tpetraVector, const RCP< const VectorSpaceBase< Scalar > > space=Teuchos::null)
RCP< const MultiVectorBase< Scalar > > createConstMultiVector(const RCP< const Tpetra::MultiVector< Scalar, LocalOrdinal, GlobalOrdinal, Node > > &tpetraMultiVector, const RCP< const VectorSpaceBase< Scalar > > rangeSpace=Teuchos::null, const RCP< const VectorSpaceBase< Scalar > > domainSpace=Teuchos::null)
RCP< const VectorSpaceBase< Scalar > > createVectorSpace(const RCP< const Tpetra::Map< LocalOrdinal, GlobalOrdinal, Node > > &tpetraMap)
Create a Thyra::VectorSpaceBase object given a Tpetra::Map.
RCP< VectorBase< Scalar > > createVector(const RCP< Tpetra::Vector< Scalar, LocalOrdinal, GlobalOrdinal, Node > > &tpetraVector, const RCP< const VectorSpaceBase< Scalar > > space=Teuchos::null)
RCP< MultiVectorBase< Scalar > > createMultiVector(const RCP< Tpetra::MultiVector< Scalar, LocalOrdinal, GlobalOrdinal, Node > > &tpetraMultiVector, const RCP< const VectorSpaceBase< Scalar > > rangeSpace=Teuchos::null, const RCP< const VectorSpaceBase< Scalar > > domainSpace=Teuchos::null)
RCP< LinearOpBase< Scalar > > createLinearOp(const RCP< Tpetra::Operator< Scalar, LocalOrdinal, GlobalOrdinal, Node > > &tpetraOperator, const RCP< const VectorSpaceBase< Scalar > > rangeSpace=Teuchos::null, const RCP< const VectorSpaceBase< Scalar > > domainSpace=Teuchos::null)
RCP< const LinearOpBase< Scalar > > createConstLinearOp(const RCP< const Tpetra::Operator< Scalar, LocalOrdinal, GlobalOrdinal, Node > > &tpetraOperator, const RCP< const VectorSpaceBase< Scalar > > rangeSpace=Teuchos::null, const RCP< const VectorSpaceBase< Scalar > > domainSpace=Teuchos::null)
#define TEUCHOS_UNREACHABLE_RETURN(dummyReturnVal)
T_To & dyn_cast(T_From &from)