42 #ifndef THYRA_TPETRA_THYRA_WRAPPERS_HPP 43 #define THYRA_TPETRA_THYRA_WRAPPERS_HPP 46 #include "Thyra_TpetraThyraWrappers.hpp" 47 #include "Thyra_TpetraVectorSpace.hpp" 48 #include "Thyra_TpetraVector.hpp" 49 #include "Thyra_TpetraMultiVector.hpp" 50 #include "Thyra_TpetraLinearOp.hpp" 56 template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
57 Teuchos::RCP<const TpetraVectorSpace<Scalar,LocalOrdinal,GlobalOrdinal,Node> >
58 getOrCreateTpetraVectorSpace(
59 const RCP<
const VectorSpaceBase<Scalar> > space,
60 const RCP<
const Tpetra::Map<LocalOrdinal,GlobalOrdinal,Node> > &tpetraMap
63 using Teuchos::rcp_dynamic_cast;
64 typedef TpetraVectorSpace<Scalar,LocalOrdinal,GlobalOrdinal,Node> TpetraVectorSpace_t;
65 RCP<const TpetraVectorSpace_t> tpetraSpace;
67 tpetraSpace = rcp_dynamic_cast<
const TpetraVectorSpace_t>(space,
true);
70 tpetraSpace = tpetraVectorSpace<Scalar>(tpetraMap);
76 template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
77 Teuchos::RCP<const ScalarProdVectorSpaceBase<Scalar> >
78 getOrCreateLocallyReplicatedTpetraVectorSpace(
79 const RCP<
const VectorSpaceBase<Scalar> > space,
80 const RCP<
const Teuchos::Comm<int> > &tpetraComm,
81 const RCP<Node> &tpetraNode,
85 using Teuchos::rcp_dynamic_cast;
86 typedef TpetraVectorSpace<Scalar,LocalOrdinal,GlobalOrdinal,Node> TpetraVectorSpace_t;
87 RCP<const TpetraVectorSpace_t> tpetraSpace;
89 tpetraSpace = rcp_dynamic_cast<
const TpetraVectorSpace_t>(space,
true);
92 tpetraSpace = tpetraVectorSpace<Scalar>(
93 Tpetra::createLocalMapWithNode<LocalOrdinal,GlobalOrdinal>(
94 numCols, tpetraComm, tpetraNode
105 template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
106 Teuchos::RCP<const Thyra::VectorSpaceBase<Scalar> >
108 const RCP<
const Tpetra::Map<LocalOrdinal,GlobalOrdinal,Node> > &tpetraMap
111 return tpetraVectorSpace<Scalar>(tpetraMap);
115 template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
116 Teuchos::RCP<Thyra::VectorBase<Scalar> >
118 const RCP<Tpetra::Vector<Scalar,LocalOrdinal,GlobalOrdinal,Node> > &tpetraVector_in,
119 const RCP<
const VectorSpaceBase<Scalar> > space_in
123 getOrCreateTpetraVectorSpace(space_in, tpetraVector_in->getMap()),
129 template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
130 Teuchos::RCP<const Thyra::VectorBase<Scalar> >
132 const RCP<
const Tpetra::Vector<Scalar,LocalOrdinal,GlobalOrdinal,Node> > &tpetraVector_in,
133 const RCP<
const VectorSpaceBase<Scalar> > space
137 getOrCreateTpetraVectorSpace(space, tpetraVector_in->getMap()),
143 template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
144 Teuchos::RCP<Thyra::MultiVectorBase<Scalar> >
146 const RCP<Tpetra::MultiVector<Scalar,LocalOrdinal,GlobalOrdinal,Node> > &tpetraMultiVector_in,
147 const RCP<
const VectorSpaceBase<Scalar> > rangeSpace,
148 const RCP<
const VectorSpaceBase<Scalar> > domainSpace
152 getOrCreateTpetraVectorSpace(rangeSpace, tpetraMultiVector_in->getMap()),
153 getOrCreateLocallyReplicatedTpetraVectorSpace<Scalar, LocalOrdinal, GlobalOrdinal, Node>(
154 domainSpace, tpetraMultiVector_in->getMap()->getComm(),
155 tpetraMultiVector_in->getMap()->getNode(),
156 tpetraMultiVector_in->getNumVectors()
163 template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
164 Teuchos::RCP<const Thyra::MultiVectorBase<Scalar> >
166 const RCP<
const Tpetra::MultiVector<Scalar,LocalOrdinal,GlobalOrdinal,Node> > &tpetraMultiVector_in,
167 const RCP<
const VectorSpaceBase<Scalar> > rangeSpace,
168 const RCP<
const VectorSpaceBase<Scalar> > domainSpace
172 getOrCreateTpetraVectorSpace(rangeSpace, tpetraMultiVector_in->getMap()),
173 getOrCreateLocallyReplicatedTpetraVectorSpace<Scalar, LocalOrdinal, GlobalOrdinal, Node>(
174 domainSpace, tpetraMultiVector_in->getMap()->getComm(),
175 tpetraMultiVector_in->getMap()->getNode(),
176 tpetraMultiVector_in->getNumVectors()
183 template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
184 Teuchos::RCP<Thyra::LinearOpBase<Scalar> >
186 const RCP<Tpetra::Operator<Scalar,LocalOrdinal,GlobalOrdinal,Node> > &tpetraOperator_in,
187 const RCP<
const VectorSpaceBase<Scalar> > rangeSpace,
188 const RCP<
const VectorSpaceBase<Scalar> > domainSpace
191 return tpetraLinearOp<Scalar,LocalOrdinal,GlobalOrdinal,Node>(
192 getOrCreateTpetraVectorSpace(rangeSpace, tpetraOperator_in->getRangeMap()),
193 getOrCreateTpetraVectorSpace(domainSpace, tpetraOperator_in->getDomainMap()),
199 template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
200 Teuchos::RCP<const Thyra::LinearOpBase<Scalar> >
202 const RCP<
const Tpetra::Operator<Scalar,LocalOrdinal,GlobalOrdinal,Node> > &tpetraOperator_in,
203 const RCP<
const VectorSpaceBase<Scalar> > rangeSpace,
204 const RCP<
const VectorSpaceBase<Scalar> > domainSpace
207 return constTpetraLinearOp<Scalar,LocalOrdinal,GlobalOrdinal,Node>(
208 getOrCreateTpetraVectorSpace(rangeSpace, tpetraOperator_in->getRangeMap()),
209 getOrCreateTpetraVectorSpace(domainSpace, tpetraOperator_in->getDomainMap()),
218 template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
219 RCP<Tpetra::Vector<Scalar,LocalOrdinal,GlobalOrdinal,Node> >
224 return Teuchos::rcp_dynamic_cast<TpetraVector_t>(v,
true)->getTpetraVector();
228 template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
229 RCP<const Tpetra::Vector<Scalar,LocalOrdinal,GlobalOrdinal,Node> >
234 return Teuchos::rcp_dynamic_cast<
const TpetraVector_t>(v,
true)->getConstTpetraVector();
238 template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
239 RCP<Tpetra::MultiVector<Scalar,LocalOrdinal,GlobalOrdinal,Node> >
245 TEUCHOS_ASSERT(nonnull(mv));
248 using Teuchos::rcp_dynamic_cast;
251 ThyraTpetraMultiVector_t;
252 const RCP<ThyraTpetraMultiVector_t> tmv =
253 rcp_dynamic_cast<ThyraTpetraMultiVector_t>(mv);
260 const RCP<ThyraTpetraVector_t> tv =
261 rcp_dynamic_cast<ThyraTpetraVector_t>(mv);
266 TEUCHOS_TEST_FOR_EXCEPTION(
true, std::logic_error,
267 "Error, the input mv = " << mv->description() <<
" does not support the" 268 " Thyra::TpetraMultiVector or the Thyra::TpetraVector interfaces!");
270 return Teuchos::null;
275 template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
276 RCP<const Tpetra::MultiVector<Scalar,LocalOrdinal,GlobalOrdinal,Node> >
282 TEUCHOS_ASSERT(nonnull(mv));
285 using Teuchos::rcp_dynamic_cast;
288 ThyraTpetraMultiVector_t;
289 const RCP<const ThyraTpetraMultiVector_t> tmv =
290 rcp_dynamic_cast<
const ThyraTpetraMultiVector_t>(mv);
297 const RCP<const ThyraTpetraVector_t> tv =
298 rcp_dynamic_cast<
const ThyraTpetraVector_t>(mv);
303 TEUCHOS_TEST_FOR_EXCEPTION(
true, std::logic_error,
304 "Error, the input mv = " << mv->description() <<
" does not support the" 305 " Thyra::TpetraMultiVector or the Thyra::TpetraVector interfaces!");
307 return Teuchos::null;
312 template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
313 RCP<Tpetra::Operator<Scalar,LocalOrdinal,GlobalOrdinal,Node> >
318 return Teuchos::rcp_dynamic_cast<TpetraLinearOp_t>(op,
true)->getTpetraOperator();
322 template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
323 RCP<const Tpetra::Operator<Scalar,LocalOrdinal,GlobalOrdinal,Node> >
328 return Teuchos::rcp_dynamic_cast<
const TpetraLinearOp_t>(op,
true)->getConstTpetraOperator();
335 #endif // THYRA_TPETRA_THYRA_WRAPPERS_HPP Concrete implementation of Thyra::MultiVector in terms of Tpetra::MultiVector.
RCP< Tpetra::MultiVector< Scalar, LocalOrdinal, GlobalOrdinal, Node > > getTpetraMultiVector()
Extract the underlying non-const Tpetra::MultiVector object.
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< 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 VectorBase< Scalar > > createConstVector(const RCP< const Tpetra::Vector< Scalar, LocalOrdinal, GlobalOrdinal, Node > > &tpetraVector, const RCP< const VectorSpaceBase< Scalar > > space=Teuchos::null)
RCP< TpetraMultiVector< Scalar, LocalOrdinal, GlobalOrdinal, Node > > tpetraMultiVector(const RCP< const TpetraVectorSpace< Scalar, LocalOrdinal, GlobalOrdinal, Node > > &tpetraVectorSpace, const RCP< const ScalarProdVectorSpaceBase< Scalar > > &domainSpace, const RCP< Tpetra::MultiVector< Scalar, LocalOrdinal, GlobalOrdinal, Node > > &tpetraMultiVector)
Nonmember constructor for TpetraMultiVector.
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)
Interface for a collection of column vectors called a multi-vector.
RCP< const TpetraMultiVector< Scalar, LocalOrdinal, GlobalOrdinal, Node > > constTpetraMultiVector(const RCP< const TpetraVectorSpace< Scalar, LocalOrdinal, GlobalOrdinal, Node > > &tpetraVectorSpace, const RCP< const ScalarProdVectorSpaceBase< Scalar > > &domainSpace, const RCP< const Tpetra::MultiVector< Scalar, LocalOrdinal, GlobalOrdinal, Node > > &tpetraMultiVector)
Nonmember constructor for TpetraMultiVector.
RCP< VectorBase< Scalar > > createVector(const RCP< Tpetra::Vector< Scalar, LocalOrdinal, GlobalOrdinal, Node > > &tpetraVector, const RCP< const VectorSpaceBase< Scalar > > space=Teuchos::null)
Abstract interface for finite-dimensional dense vectors.
RCP< const VectorSpaceBase< Scalar > > createVectorSpace(const RCP< const Tpetra::Map< LocalOrdinal, GlobalOrdinal, Node > > &tpetraMap)
Create a Thyra::VectorSpaceBase object given a Tpetra::Map.
Concrete Thyra::SpmdVectorBase using Tpetra::Vector.
RCP< TpetraVector< Scalar, LocalOrdinal, GlobalOrdinal, Node > > tpetraVector(const RCP< const TpetraVectorSpace< Scalar, LocalOrdinal, GlobalOrdinal, Node > > &tpetraVectorSpace, const RCP< Tpetra::Vector< Scalar, LocalOrdinal, GlobalOrdinal, Node > > &tpetraVector)
Nonmember constructor for TpetraVector.
Base class for all linear operators.
RCP< Tpetra::Vector< Scalar, LocalOrdinal, GlobalOrdinal, Node > > getTpetraVector()
Get the embedded non-const Tpetra::Vector.
RCP< const TpetraVector< Scalar, LocalOrdinal, GlobalOrdinal, Node > > constTpetraVector(const RCP< const TpetraVectorSpace< Scalar, LocalOrdinal, GlobalOrdinal, Node > > &tpetraVectorSpace, const RCP< const Tpetra::Vector< Scalar, LocalOrdinal, GlobalOrdinal, Node > > &tpetraVector)
Nonmember constructor for TpetraVector.
RCP< const Tpetra::MultiVector< Scalar, LocalOrdinal, GlobalOrdinal, Node > > getConstTpetraMultiVector() const
Extract the underlying const Tpetra::MultiVector object.
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)
Concrete Thyra::LinearOpBase subclass for Tpetra::Operator.
RCP< const Tpetra::Vector< Scalar, LocalOrdinal, GlobalOrdinal, Node > > getConstTpetraVector() const
Get the embedded non-const Tpetra::Vector.