10#ifndef XPETRA_THYRAUTILS_HPP
11#define XPETRA_THYRAUTILS_HPP
14#ifdef HAVE_XPETRA_THYRA
18#include "Tpetra_ConfigDefs.hpp"
20#include "Xpetra_Map.hpp"
21#include "Xpetra_BlockedMap.hpp"
22#include "Xpetra_BlockedMultiVector.hpp"
23#include "Xpetra_BlockedCrsMatrix.hpp"
25#include "Xpetra_StridedMap.hpp"
26#include "Xpetra_StridedMapFactory.hpp"
27#include "Xpetra_MapExtractor.hpp"
28#include "Xpetra_Matrix.hpp"
29#include "Xpetra_MatrixFactory.hpp"
30#include "Xpetra_CrsMatrixWrap.hpp"
31#include "Xpetra_MultiVectorFactory.hpp"
33#include <Thyra_VectorSpaceBase.hpp>
34#include <Thyra_SpmdVectorSpaceBase.hpp>
35#include <Thyra_ProductVectorSpaceBase.hpp>
36#include <Thyra_ProductMultiVectorBase.hpp>
37#include <Thyra_DefaultProductVectorSpace.hpp>
38#include <Thyra_DefaultBlockedLinearOp.hpp>
39#include <Thyra_LinearOpBase.hpp>
40#include "Thyra_DiagonalLinearOpBase.hpp"
41#include <Thyra_DetachedMultiVectorView.hpp>
42#include <Thyra_MultiVectorStdOps.hpp>
44#include <Thyra_TpetraThyraWrappers.hpp>
45#include <Thyra_TpetraVector.hpp>
46#include <Thyra_TpetraMultiVector.hpp>
47#include <Thyra_TpetraVectorSpace.hpp>
48#include <Tpetra_Map.hpp>
49#include <Tpetra_Vector.hpp>
50#include <Tpetra_CrsMatrix.hpp>
51#include <Xpetra_TpetraMap.hpp>
53#include <Xpetra_TpetraCrsMatrix.hpp>
57template <
class Scalar,
58 class LocalOrdinal = int,
59 class GlobalOrdinal = LocalOrdinal,
60 class Node = Tpetra::KokkosClassic::DefaultNode::DefaultNodeType>
63#undef XPETRA_THYRAUTILS_SHORT
67 static Teuchos::RCP<Xpetra::StridedMap<LocalOrdinal, GlobalOrdinal, Node>>
68 toXpetra(
const Teuchos::RCP<
const Thyra::VectorSpaceBase<Scalar>>& vectorSpace,
const Teuchos::RCP<
const Teuchos::Comm<int>>& comm, std::vector<size_t>& stridingInfo, LocalOrdinal stridedBlockId = -1, GlobalOrdinal offset = 0);
70 static Teuchos::RCP<Xpetra::Map<LocalOrdinal, GlobalOrdinal, Node>>
71 toXpetra(
const Teuchos::RCP<
const Thyra::VectorSpaceBase<Scalar>>& vectorSpace,
const Teuchos::RCP<
const Teuchos::Comm<int>>& comm);
74 static Teuchos::RCP<const Xpetra::MultiVector<Scalar, LocalOrdinal, GlobalOrdinal, Node>>
75 toXpetra(Teuchos::RCP<
const Thyra::MultiVectorBase<Scalar>> v,
const Teuchos::RCP<
const Teuchos::Comm<int>>& comm);
78 static Teuchos::RCP<Xpetra::MultiVector<Scalar, LocalOrdinal, GlobalOrdinal, Node>>
79 toXpetra(Teuchos::RCP<Thyra::MultiVectorBase<Scalar>> v,
const Teuchos::RCP<
const Teuchos::Comm<int>>& comm);
81 static bool isTpetra(
const Teuchos::RCP<
const Thyra::LinearOpBase<Scalar>>& op);
83 static bool isBlockedOperator(
const Teuchos::RCP<
const Thyra::LinearOpBase<Scalar>>& op);
85 static Teuchos::RCP<const Xpetra::Matrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>>
86 toXpetra(
const Teuchos::RCP<
const Thyra::LinearOpBase<Scalar>>& op);
88 static Teuchos::RCP<Xpetra::Matrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>>
89 toXpetra(
const Teuchos::RCP<Thyra::LinearOpBase<Scalar>>& op);
91 static Teuchos::RCP<const Xpetra::Operator<Scalar, LocalOrdinal, GlobalOrdinal, Node>>
92 toXpetraOperator(
const Teuchos::RCP<
const Thyra::LinearOpBase<Scalar>>& op);
94 static Teuchos::RCP<Xpetra::Operator<Scalar, LocalOrdinal, GlobalOrdinal, Node>>
95 toXpetraOperator(
const Teuchos::RCP<Thyra::LinearOpBase<Scalar>>& op);
97 static Teuchos::RCP<Xpetra::Matrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>>
98 toXpetra(
const Teuchos::RCP<Thyra::DiagonalLinearOpBase<Scalar>>& op);
100 static Teuchos::RCP<const Xpetra::Matrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>>
101 toXpetra(
const Teuchos::RCP<
const Thyra::DiagonalLinearOpBase<Scalar>>& op);
103 static Teuchos::RCP<const Thyra::VectorSpaceBase<Scalar>>
104 toThyra(Teuchos::RCP<
const Xpetra::Map<LocalOrdinal, GlobalOrdinal, Node>> map);
106 static Teuchos::RCP<const Thyra::MultiVectorBase<Scalar>>
107 toThyraMultiVector(Teuchos::RCP<
const Xpetra::MultiVector<Scalar, LocalOrdinal, GlobalOrdinal, Node>> vec);
109 static Teuchos::RCP<const Thyra::VectorBase<Scalar>>
110 toThyraVector(Teuchos::RCP<
const Xpetra::Vector<Scalar, LocalOrdinal, GlobalOrdinal, Node>> vec);
115 updateThyra(Teuchos::RCP<
const Xpetra::MultiVector<Scalar, LocalOrdinal, GlobalOrdinal, Node>> source, Teuchos::RCP<
const Xpetra::MapExtractor<Scalar, LocalOrdinal, GlobalOrdinal, Node>> mapExtractor,
const Teuchos::RCP<Thyra::MultiVectorBase<Scalar>>& target);
117 static Teuchos::RCP<const Thyra::LinearOpBase<Scalar>>
118 toThyra(
const Teuchos::RCP<
const Xpetra::CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>>& mat);
120 static Teuchos::RCP<Thyra::LinearOpBase<Scalar>>
121 toThyra(
const Teuchos::RCP<Xpetra::CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>>& mat);
123 static Teuchos::RCP<Thyra::LinearOpBase<Scalar>>
124 toThyra(
const Teuchos::RCP<Xpetra::BlockedCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>>& mat);
130#define XPETRA_THYRAUTILS_SHORT
RCP< const CrsGraph< LocalOrdinal, GlobalOrdinal, Node > > toXpetra(RCP< const Tpetra::CrsGraph< LocalOrdinal, GlobalOrdinal, Node > > graph)