Xpetra Version of the Day
Loading...
Searching...
No Matches
Xpetra_ThyraUtils_decl.hpp
Go to the documentation of this file.
1// @HEADER
2// *****************************************************************************
3// Xpetra: A linear algebra interface package
4//
5// Copyright 2012 NTESS and the Xpetra contributors.
6// SPDX-License-Identifier: BSD-3-Clause
7// *****************************************************************************
8// @HEADER
9
10#ifndef XPETRA_THYRAUTILS_HPP
11#define XPETRA_THYRAUTILS_HPP
12
13#include "Xpetra_ConfigDefs.hpp"
14#ifdef HAVE_XPETRA_THYRA
15
16#include <typeinfo>
17
18#include "Tpetra_ConfigDefs.hpp"
19
20#include "Xpetra_Map.hpp"
21#include "Xpetra_BlockedMap.hpp"
22#include "Xpetra_BlockedMultiVector.hpp"
23#include "Xpetra_BlockedCrsMatrix.hpp"
24#include "Xpetra_MapUtils.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"
32
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>
43
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>
54
55namespace Xpetra {
56
57template <class Scalar,
58 class LocalOrdinal = int,
59 class GlobalOrdinal = LocalOrdinal,
60 class Node = Tpetra::KokkosClassic::DefaultNode::DefaultNodeType>
61class ThyraUtils {
62 private:
63#undef XPETRA_THYRAUTILS_SHORT
65
66 public:
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);
69
71 toXpetra(const Teuchos::RCP<const Thyra::VectorSpaceBase<Scalar>>& vectorSpace, const Teuchos::RCP<const Teuchos::Comm<int>>& comm);
72
73 // const version
75 toXpetra(Teuchos::RCP<const Thyra::MultiVectorBase<Scalar>> v, const Teuchos::RCP<const Teuchos::Comm<int>>& comm);
76
77 // non-const version
79 toXpetra(Teuchos::RCP<Thyra::MultiVectorBase<Scalar>> v, const Teuchos::RCP<const Teuchos::Comm<int>>& comm);
80
81 static bool isTpetra(const Teuchos::RCP<const Thyra::LinearOpBase<Scalar>>& op);
82
83 static bool isBlockedOperator(const Teuchos::RCP<const Thyra::LinearOpBase<Scalar>>& op);
84
86 toXpetra(const Teuchos::RCP<const Thyra::LinearOpBase<Scalar>>& op);
87
89 toXpetra(const Teuchos::RCP<Thyra::LinearOpBase<Scalar>>& op);
90
92 toXpetraOperator(const Teuchos::RCP<const Thyra::LinearOpBase<Scalar>>& op);
93
95 toXpetraOperator(const Teuchos::RCP<Thyra::LinearOpBase<Scalar>>& op);
96
98 toXpetra(const Teuchos::RCP<Thyra::DiagonalLinearOpBase<Scalar>>& op);
99
101 toXpetra(const Teuchos::RCP<const Thyra::DiagonalLinearOpBase<Scalar>>& op);
102
105
108
111
112 // update Thyra multi vector with data from Xpetra multi vector
113 // In case of a Thyra::ProductMultiVector the Xpetra::MultiVector is splitted into its subparts using a provided MapExtractor
114 static void
116
119
122
125
126}; // end Utils class
127
128} // end namespace Xpetra
129
130#define XPETRA_THYRAUTILS_SHORT
131#endif // HAVE_XPETRA_THYRA
132
133#endif // XPETRA_THYRAUTILS_HPP
RCP< const CrsGraph< LocalOrdinal, GlobalOrdinal, Node > > toXpetra(RCP< const Tpetra::CrsGraph< LocalOrdinal, GlobalOrdinal, Node > > graph)