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>
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>
78 getOrCreateLocallyReplicatedTpetraVectorSpace(
79 const RCP<
const VectorSpaceBase<Scalar> > space,
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>
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>
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>
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>
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>
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>
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>
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>
238 template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
248 using Teuchos::rcp_dynamic_cast;
251 ThyraTpetraMultiVector_t;
253 rcp_dynamic_cast<ThyraTpetraMultiVector_t>(mv);
255 return tmv->getTpetraMultiVector();
261 rcp_dynamic_cast<ThyraTpetraVector_t>(mv);
263 return tv->getTpetraVector();
267 "Error, the input mv = " << mv->description() <<
" does not support the"
268 " Thyra::TpetraMultiVector or the Thyra::TpetraVector interfaces!");
275 template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
285 using Teuchos::rcp_dynamic_cast;
288 ThyraTpetraMultiVector_t;
290 rcp_dynamic_cast<const ThyraTpetraMultiVector_t>(mv);
292 return tmv->getConstTpetraMultiVector();
298 rcp_dynamic_cast<const ThyraTpetraVector_t>(mv);
300 return tv->getConstTpetraVector();
304 "Error, the input mv = " << mv->description() <<
" does not support the"
305 " Thyra::TpetraMultiVector or the Thyra::TpetraVector interfaces!");
312 template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
318 return Teuchos::rcp_dynamic_cast<TpetraLinearOp_t>(op,
true)->
getTpetraOperator();
322 template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
335 #endif // THYRA_TPETRA_THYRA_WRAPPERS_HPP