Xpetra Version of the Day
Loading...
Searching...
No Matches
Xpetra_EpetraMultiVector.cpp
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
11
14#include "Xpetra_Exceptions.hpp"
15
17
18#include "Epetra_SerialComm.h"
19
20namespace Xpetra {
21
22// specialization for GO=int and NO=EpetraNode
23#ifndef XPETRA_EPETRA_NO_32BIT_GLOBAL_INDICES
25 XPETRA_MONITOR("EpetraMultiVectorT::getVector");
26 return rcp(new Xpetra::EpetraVectorT<int, EpetraNode>(vec_, j)); // See constructor EpetraVectorT(const RCP<EpetraMultiVectorT> &mv, size_t j) for more info
27}
28
31 XPETRA_MONITOR("EpetraMultiVectorT::getVector");
32 return rcp(new EpetraVectorT<int, EpetraNode>(vec_, j)); // See constructor EpetraVectorT(const RCP<EpetraMultiVectorT> &mv, size_t j) for more info
33}
34#endif
35
36// specialization for GO=long long and NO=EpetraNode
37#ifndef XPETRA_EPETRA_NO_64BIT_GLOBAL_INDICES
39 XPETRA_MONITOR("EpetraMultiVectorT::getVector");
40 return rcp(new Xpetra::EpetraVectorT<long long, EpetraNode>(vec_, j)); // See constructor EpetraVectorT(const RCP<EpetraMultiVectorT> &mv, size_t j) for more info
41}
42
45 XPETRA_MONITOR("EpetraMultiVectorT::getVector");
46 return rcp(new EpetraVectorT<long long, EpetraNode>(vec_, j)); // See constructor EpetraVectorT(const RCP<EpetraMultiVectorT> &mv, size_t j) for more info
47}
48#endif
49
50// TODO: move that elsewhere
51template <class GlobalOrdinal, class Node>
54 return *tX.getEpetra_MultiVector();
55}
56
57template <class GlobalOrdinal, class Node>
62//
63
64template <class GlobalOrdinal, class Node>
66 if (!vec.is_null())
67 return rcp(new EpetraMultiVectorT<GlobalOrdinal, Node>(vec));
68
69 return Teuchos::null;
70}
71
72#ifndef XPETRA_EPETRA_NO_32BIT_GLOBAL_INDICES
73#ifdef HAVE_XPETRA_TPETRA
74#include "TpetraCore_config.h"
75#if ((defined(EPETRA_HAVE_OMP) && !defined(HAVE_TPETRA_INST_OPENMP)) || \
76 (!defined(EPETRA_HAVE_OMP) && !defined(HAVE_TPETRA_INST_SERIAL)))
77template class EpetraMultiVectorT<int, Xpetra::EpetraNode>;
81#endif
82
83#ifdef HAVE_TPETRA_INST_SERIAL
85template RCP<MultiVector<double, int, int, Tpetra::KokkosCompat::KokkosSerialWrapperNode> > toXpetra<int, Tpetra::KokkosCompat::KokkosSerialWrapperNode>(RCP<Epetra_MultiVector>);
86template Epetra_MultiVector &toEpetra<int, Tpetra::KokkosCompat::KokkosSerialWrapperNode>(MultiVector<double, int, int, Tpetra::KokkosCompat::KokkosSerialWrapperNode> &);
87template const Epetra_MultiVector &toEpetra<int, Tpetra::KokkosCompat::KokkosSerialWrapperNode>(const MultiVector<double, int, int, Tpetra::KokkosCompat::KokkosSerialWrapperNode> &);
88#endif
89#ifdef HAVE_TPETRA_INST_PTHREAD
91template RCP<MultiVector<double, int, int, Tpetra::KokkosCompat::KokkosThreadsWrapperNode> > toXpetra<int, Tpetra::KokkosCompat::KokkosThreadsWrapperNode>(RCP<Epetra_MultiVector>);
92template Epetra_MultiVector &toEpetra<int, Tpetra::KokkosCompat::KokkosThreadsWrapperNode>(MultiVector<double, int, int, Tpetra::KokkosCompat::KokkosThreadsWrapperNode> &);
93template const Epetra_MultiVector &toEpetra<int, Tpetra::KokkosCompat::KokkosThreadsWrapperNode>(const MultiVector<double, int, int, Tpetra::KokkosCompat::KokkosThreadsWrapperNode> &);
94#endif
95#ifdef HAVE_TPETRA_INST_OPENMP
97template RCP<MultiVector<double, int, int, Tpetra::KokkosCompat::KokkosOpenMPWrapperNode> > toXpetra<int, Tpetra::KokkosCompat::KokkosOpenMPWrapperNode>(RCP<Epetra_MultiVector>);
98template Epetra_MultiVector &toEpetra<int, Tpetra::KokkosCompat::KokkosOpenMPWrapperNode>(MultiVector<double, int, int, Tpetra::KokkosCompat::KokkosOpenMPWrapperNode> &);
99template const Epetra_MultiVector &toEpetra<int, Tpetra::KokkosCompat::KokkosOpenMPWrapperNode>(const MultiVector<double, int, int, Tpetra::KokkosCompat::KokkosOpenMPWrapperNode> &);
100#endif
101#ifdef HAVE_TPETRA_INST_CUDA
103template RCP<MultiVector<double, int, int, Tpetra::KokkosCompat::KokkosCudaWrapperNode> > toXpetra<int, Tpetra::KokkosCompat::KokkosCudaWrapperNode>(RCP<Epetra_MultiVector>);
104template Epetra_MultiVector &toEpetra<int, Tpetra::KokkosCompat::KokkosCudaWrapperNode>(MultiVector<double, int, int, Tpetra::KokkosCompat::KokkosCudaWrapperNode> &);
105template const Epetra_MultiVector &toEpetra<int, Tpetra::KokkosCompat::KokkosCudaWrapperNode>(const MultiVector<double, int, int, Tpetra::KokkosCompat::KokkosCudaWrapperNode> &);
106#endif
107#ifdef HAVE_TPETRA_INST_HIP
109template RCP<MultiVector<double, int, int, Tpetra::KokkosCompat::KokkosHIPWrapperNode> > toXpetra<int, Tpetra::KokkosCompat::KokkosHIPWrapperNode>(RCP<Epetra_MultiVector>);
110template Epetra_MultiVector &toEpetra<int, Tpetra::KokkosCompat::KokkosHIPWrapperNode>(MultiVector<double, int, int, Tpetra::KokkosCompat::KokkosHIPWrapperNode> &);
111template const Epetra_MultiVector &toEpetra<int, Tpetra::KokkosCompat::KokkosHIPWrapperNode>(const MultiVector<double, int, int, Tpetra::KokkosCompat::KokkosHIPWrapperNode> &);
112#endif
113#else // Tpetra is disabled
114typedef Xpetra::EpetraNode default_node_type;
116template RCP<MultiVector<double, int, int, default_node_type> > toXpetra<int, default_node_type>(RCP<Epetra_MultiVector>);
117template Epetra_MultiVector &toEpetra<int, default_node_type>(MultiVector<double, int, int, default_node_type> &);
118template const Epetra_MultiVector &toEpetra<int, default_node_type>(const MultiVector<double, int, int, default_node_type> &);
119#endif
120#endif
121
122#ifndef XPETRA_EPETRA_NO_64BIT_GLOBAL_INDICES
123#ifdef HAVE_XPETRA_TPETRA
124#include "TpetraCore_config.h"
125#if ((defined(EPETRA_HAVE_OMP) && !defined(HAVE_TPETRA_INST_OPENMP)) || \
126 (!defined(EPETRA_HAVE_OMP) && !defined(HAVE_TPETRA_INST_SERIAL)))
131#endif
132
133#ifdef HAVE_TPETRA_INST_SERIAL
135template RCP<MultiVector<double, int, long long, Tpetra::KokkosCompat::KokkosSerialWrapperNode> > toXpetra<long long, Tpetra::KokkosCompat::KokkosSerialWrapperNode>(RCP<Epetra_MultiVector>);
136template Epetra_MultiVector &toEpetra<long long, Tpetra::KokkosCompat::KokkosSerialWrapperNode>(MultiVector<double, int, long long, Tpetra::KokkosCompat::KokkosSerialWrapperNode> &);
137template const Epetra_MultiVector &toEpetra<long long, Tpetra::KokkosCompat::KokkosSerialWrapperNode>(const MultiVector<double, int, long long, Tpetra::KokkosCompat::KokkosSerialWrapperNode> &);
138#endif
139#ifdef HAVE_TPETRA_INST_PTHREAD
141template RCP<MultiVector<double, int, long long, Tpetra::KokkosCompat::KokkosThreadsWrapperNode> > toXpetra<long long, Tpetra::KokkosCompat::KokkosThreadsWrapperNode>(RCP<Epetra_MultiVector>);
142template Epetra_MultiVector &toEpetra<long long, Tpetra::KokkosCompat::KokkosThreadsWrapperNode>(MultiVector<double, int, long long, Tpetra::KokkosCompat::KokkosThreadsWrapperNode> &);
143template const Epetra_MultiVector &toEpetra<long long, Tpetra::KokkosCompat::KokkosThreadsWrapperNode>(const MultiVector<double, int, long long, Tpetra::KokkosCompat::KokkosThreadsWrapperNode> &);
144#endif
145#ifdef HAVE_TPETRA_INST_OPENMP
147template RCP<MultiVector<double, int, long long, Tpetra::KokkosCompat::KokkosOpenMPWrapperNode> > toXpetra<long long, Tpetra::KokkosCompat::KokkosOpenMPWrapperNode>(RCP<Epetra_MultiVector>);
148template Epetra_MultiVector &toEpetra<long long, Tpetra::KokkosCompat::KokkosOpenMPWrapperNode>(MultiVector<double, int, long long, Tpetra::KokkosCompat::KokkosOpenMPWrapperNode> &);
149template const Epetra_MultiVector &toEpetra<long long, Tpetra::KokkosCompat::KokkosOpenMPWrapperNode>(const MultiVector<double, int, long long, Tpetra::KokkosCompat::KokkosOpenMPWrapperNode> &);
150#endif
151#ifdef HAVE_TPETRA_INST_CUDA
153template RCP<MultiVector<double, int, long long, Tpetra::KokkosCompat::KokkosCudaWrapperNode> > toXpetra<long long, Tpetra::KokkosCompat::KokkosCudaWrapperNode>(RCP<Epetra_MultiVector>);
154template Epetra_MultiVector &toEpetra<long long, Tpetra::KokkosCompat::KokkosCudaWrapperNode>(MultiVector<double, int, long long, Tpetra::KokkosCompat::KokkosCudaWrapperNode> &);
155template const Epetra_MultiVector &toEpetra<long long, Tpetra::KokkosCompat::KokkosCudaWrapperNode>(const MultiVector<double, int, long long, Tpetra::KokkosCompat::KokkosCudaWrapperNode> &);
156#endif
157#ifdef HAVE_TPETRA_INST_HIP
159template RCP<MultiVector<double, int, long long, Tpetra::KokkosCompat::KokkosHIPWrapperNode> > toXpetra<long long, Tpetra::KokkosCompat::KokkosHIPWrapperNode>(RCP<Epetra_MultiVector>);
160template Epetra_MultiVector &toEpetra<long long, Tpetra::KokkosCompat::KokkosHIPWrapperNode>(MultiVector<double, int, long long, Tpetra::KokkosCompat::KokkosHIPWrapperNode> &);
161template const Epetra_MultiVector &toEpetra<long long, Tpetra::KokkosCompat::KokkosHIPWrapperNode>(const MultiVector<double, int, long long, Tpetra::KokkosCompat::KokkosHIPWrapperNode> &);
162#endif
163#else // Tpetra is disabled
164typedef Xpetra::EpetraNode default_node_type;
166template RCP<MultiVector<double, int, long long, default_node_type> > toXpetra<long long, default_node_type>(RCP<Epetra_MultiVector>);
167template Epetra_MultiVector &toEpetra<long long, default_node_type>(MultiVector<double, int, long long, default_node_type> &);
168template const Epetra_MultiVector &toEpetra<long long, default_node_type>(const MultiVector<double, int, long long, default_node_type> &);
169#endif
170#endif
171
172} // namespace Xpetra
#define XPETRA_MONITOR(funcName)
#define XPETRA_DYNAMIC_CAST(type, obj, newObj, exceptionMsg)
bool is_null() const
Teuchos::RCP< Vector< double, int, GlobalOrdinal, Node > > getVectorNonConst(size_t j)
Return a Vector which is a nonconst view of column j.
Teuchos::RCP< const Vector< double, int, GlobalOrdinal, Node > > getVector(size_t j) const
Return a Vector which is a const view of column j.
Tpetra::KokkosCompat::KokkosSerialWrapperNode EpetraNode
const Epetra_CrsGraph & toEpetra(const RCP< const CrsGraph< int, GlobalOrdinal, Node > > &graph)
template const Epetra_CrsGraph & toEpetra< long long, Xpetra::EpetraNode >(const RCP< const CrsGraph< int, long long, Xpetra::EpetraNode > > &graph)
RCP< const CrsGraph< int, GlobalOrdinal, Node > > toXpetra(const Epetra_CrsGraph &g)
template RCP< const CrsGraph< int, long long, Xpetra::EpetraNode > > toXpetra< long long, Xpetra::EpetraNode >(const Epetra_CrsGraph &g)
template const Epetra_CrsGraph & toEpetra< int, Xpetra::EpetraNode >(const RCP< const CrsGraph< int, int, Xpetra::EpetraNode > > &graph)
template RCP< const CrsGraph< int, int, Xpetra::EpetraNode > > toXpetra< int, Xpetra::EpetraNode >(const Epetra_CrsGraph &g)