42 #ifndef THYRA_TPETRA_THYRA_WRAPPERS_HPP
43 #define THYRA_TPETRA_THYRA_WRAPPERS_HPP
56 template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
59 const RCP<
const VectorSpaceBase<Scalar> > space,
60 const RCP<
const Tpetra::Map<LocalOrdinal,GlobalOrdinal,Node> > &tpetraMap
63 using Teuchos::rcp_dynamic_cast;
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>
79 const RCP<
const VectorSpaceBase<Scalar> > space,
85 using Teuchos::rcp_dynamic_cast;
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
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
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
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
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>(
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>(
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