54 #include "Epetra_SerialComm.h"
59 #ifndef XPETRA_EPETRA_NO_32BIT_GLOBAL_INDICES
73 #ifndef XPETRA_EPETRA_NO_64BIT_GLOBAL_INDICES
87 template <
class GlobalOrdinal,
class Node>
90 return *tX.getEpetra_MultiVector();
93 template <
class GlobalOrdinal,
class Node>
96 return *tX.getEpetra_MultiVector();
100 template <
class GlobalOrdinal,
class Node>
101 RCP<MultiVector<double, int, GlobalOrdinal, Node> >
toXpetra(RCP<Epetra_MultiVector> vec) {
105 return Teuchos::null;
108 #ifndef XPETRA_EPETRA_NO_32BIT_GLOBAL_INDICES
109 #ifdef HAVE_XPETRA_TPETRA
110 #include "TpetraCore_config.h"
111 #if ((defined(EPETRA_HAVE_OMP) && !defined(HAVE_TPETRA_INST_OPENMP)) || \
112 (!defined(EPETRA_HAVE_OMP) && !defined(HAVE_TPETRA_INST_SERIAL)))
113 template class EpetraMultiVectorT<int, Xpetra::EpetraNode>;
114 template RCP<MultiVector<double, int, int, Xpetra::EpetraNode> > toXpetra<int, Xpetra::EpetraNode>(RCP<Epetra_MultiVector>);
115 template Epetra_MultiVector &toEpetra<int, Xpetra::EpetraNode>(MultiVector<double, int, int, Xpetra::EpetraNode> &);
116 template const Epetra_MultiVector &toEpetra<int, Xpetra::EpetraNode>(
const MultiVector<double, int, int, Xpetra::EpetraNode> &);
119 #ifdef HAVE_TPETRA_INST_SERIAL
120 template class EpetraMultiVectorT<int, Tpetra::KokkosCompat::KokkosSerialWrapperNode>;
121 template RCP<MultiVector<double, int, int, Tpetra::KokkosCompat::KokkosSerialWrapperNode> > toXpetra<int, Tpetra::KokkosCompat::KokkosSerialWrapperNode>(RCP<Epetra_MultiVector>);
122 template Epetra_MultiVector &toEpetra<int, Tpetra::KokkosCompat::KokkosSerialWrapperNode>(MultiVector<double, int, int, Tpetra::KokkosCompat::KokkosSerialWrapperNode> &);
123 template const Epetra_MultiVector &toEpetra<int, Tpetra::KokkosCompat::KokkosSerialWrapperNode>(
const MultiVector<double, int, int, Tpetra::KokkosCompat::KokkosSerialWrapperNode> &);
125 #ifdef HAVE_TPETRA_INST_PTHREAD
126 template class EpetraMultiVectorT<int, Tpetra::KokkosCompat::KokkosThreadsWrapperNode>;
127 template RCP<MultiVector<double, int, int, Tpetra::KokkosCompat::KokkosThreadsWrapperNode> > toXpetra<int, Tpetra::KokkosCompat::KokkosThreadsWrapperNode>(RCP<Epetra_MultiVector>);
128 template Epetra_MultiVector &toEpetra<int, Tpetra::KokkosCompat::KokkosThreadsWrapperNode>(MultiVector<double, int, int, Tpetra::KokkosCompat::KokkosThreadsWrapperNode> &);
129 template const Epetra_MultiVector &toEpetra<int, Tpetra::KokkosCompat::KokkosThreadsWrapperNode>(
const MultiVector<double, int, int, Tpetra::KokkosCompat::KokkosThreadsWrapperNode> &);
131 #ifdef HAVE_TPETRA_INST_OPENMP
132 template class EpetraMultiVectorT<int, Tpetra::KokkosCompat::KokkosOpenMPWrapperNode>;
133 template RCP<MultiVector<double, int, int, Tpetra::KokkosCompat::KokkosOpenMPWrapperNode> > toXpetra<int, Tpetra::KokkosCompat::KokkosOpenMPWrapperNode>(RCP<Epetra_MultiVector>);
134 template Epetra_MultiVector &toEpetra<int, Tpetra::KokkosCompat::KokkosOpenMPWrapperNode>(MultiVector<double, int, int, Tpetra::KokkosCompat::KokkosOpenMPWrapperNode> &);
135 template const Epetra_MultiVector &toEpetra<int, Tpetra::KokkosCompat::KokkosOpenMPWrapperNode>(
const MultiVector<double, int, int, Tpetra::KokkosCompat::KokkosOpenMPWrapperNode> &);
137 #ifdef HAVE_TPETRA_INST_CUDA
138 template class EpetraMultiVectorT<int, Tpetra::KokkosCompat::KokkosCudaWrapperNode>;
139 template RCP<MultiVector<double, int, int, Tpetra::KokkosCompat::KokkosCudaWrapperNode> > toXpetra<int, Tpetra::KokkosCompat::KokkosCudaWrapperNode>(RCP<Epetra_MultiVector>);
140 template Epetra_MultiVector &toEpetra<int, Tpetra::KokkosCompat::KokkosCudaWrapperNode>(MultiVector<double, int, int, Tpetra::KokkosCompat::KokkosCudaWrapperNode> &);
141 template const Epetra_MultiVector &toEpetra<int, Tpetra::KokkosCompat::KokkosCudaWrapperNode>(
const MultiVector<double, int, int, Tpetra::KokkosCompat::KokkosCudaWrapperNode> &);
143 #ifdef HAVE_TPETRA_INST_HIP
144 template class EpetraMultiVectorT<int, Tpetra::KokkosCompat::KokkosHIPWrapperNode>;
145 template RCP<MultiVector<double, int, int, Tpetra::KokkosCompat::KokkosHIPWrapperNode> > toXpetra<int, Tpetra::KokkosCompat::KokkosHIPWrapperNode>(RCP<Epetra_MultiVector>);
146 template Epetra_MultiVector &toEpetra<int, Tpetra::KokkosCompat::KokkosHIPWrapperNode>(MultiVector<double, int, int, Tpetra::KokkosCompat::KokkosHIPWrapperNode> &);
147 template const Epetra_MultiVector &toEpetra<int, Tpetra::KokkosCompat::KokkosHIPWrapperNode>(
const MultiVector<double, int, int, Tpetra::KokkosCompat::KokkosHIPWrapperNode> &);
149 #else // Tpetra is disabled
151 template class EpetraMultiVectorT<int, default_node_type>;
152 template RCP<MultiVector<double, int, int, default_node_type> > toXpetra<int, default_node_type>(RCP<Epetra_MultiVector>);
153 template Epetra_MultiVector &toEpetra<int, default_node_type>(MultiVector<double, int, int, default_node_type> &);
154 template const Epetra_MultiVector &toEpetra<int, default_node_type>(
const MultiVector<double, int, int, default_node_type> &);
158 #ifndef XPETRA_EPETRA_NO_64BIT_GLOBAL_INDICES
159 #ifdef HAVE_XPETRA_TPETRA
160 #include "TpetraCore_config.h"
161 #if ((defined(EPETRA_HAVE_OMP) && !defined(HAVE_TPETRA_INST_OPENMP)) || \
162 (!defined(EPETRA_HAVE_OMP) && !defined(HAVE_TPETRA_INST_SERIAL)))
163 template class EpetraMultiVectorT<long long, Xpetra::EpetraNode>;
164 template RCP<MultiVector<double, int, long long, Xpetra::EpetraNode> > toXpetra<long long, Xpetra::EpetraNode>(RCP<Epetra_MultiVector>);
165 template Epetra_MultiVector &toEpetra<long long, Xpetra::EpetraNode>(MultiVector<double, int, long long, Xpetra::EpetraNode> &);
166 template const Epetra_MultiVector &toEpetra<long long, Xpetra::EpetraNode>(
const MultiVector<double, int, long long, Xpetra::EpetraNode> &);
169 #ifdef HAVE_TPETRA_INST_SERIAL
170 template class EpetraMultiVectorT<long long, Tpetra::KokkosCompat::KokkosSerialWrapperNode>;
171 template RCP<MultiVector<double, int, long long, Tpetra::KokkosCompat::KokkosSerialWrapperNode> > toXpetra<long long, Tpetra::KokkosCompat::KokkosSerialWrapperNode>(RCP<Epetra_MultiVector>);
172 template Epetra_MultiVector &toEpetra<long long, Tpetra::KokkosCompat::KokkosSerialWrapperNode>(MultiVector<double, int, long long, Tpetra::KokkosCompat::KokkosSerialWrapperNode> &);
173 template const Epetra_MultiVector &toEpetra<long long, Tpetra::KokkosCompat::KokkosSerialWrapperNode>(
const MultiVector<double, int, long long, Tpetra::KokkosCompat::KokkosSerialWrapperNode> &);
175 #ifdef HAVE_TPETRA_INST_PTHREAD
176 template class EpetraMultiVectorT<long long, Tpetra::KokkosCompat::KokkosThreadsWrapperNode>;
177 template RCP<MultiVector<double, int, long long, Tpetra::KokkosCompat::KokkosThreadsWrapperNode> > toXpetra<long long, Tpetra::KokkosCompat::KokkosThreadsWrapperNode>(RCP<Epetra_MultiVector>);
178 template Epetra_MultiVector &toEpetra<long long, Tpetra::KokkosCompat::KokkosThreadsWrapperNode>(MultiVector<double, int, long long, Tpetra::KokkosCompat::KokkosThreadsWrapperNode> &);
179 template const Epetra_MultiVector &toEpetra<long long, Tpetra::KokkosCompat::KokkosThreadsWrapperNode>(
const MultiVector<double, int, long long, Tpetra::KokkosCompat::KokkosThreadsWrapperNode> &);
181 #ifdef HAVE_TPETRA_INST_OPENMP
182 template class EpetraMultiVectorT<long long, Tpetra::KokkosCompat::KokkosOpenMPWrapperNode>;
183 template RCP<MultiVector<double, int, long long, Tpetra::KokkosCompat::KokkosOpenMPWrapperNode> > toXpetra<long long, Tpetra::KokkosCompat::KokkosOpenMPWrapperNode>(RCP<Epetra_MultiVector>);
184 template Epetra_MultiVector &toEpetra<long long, Tpetra::KokkosCompat::KokkosOpenMPWrapperNode>(MultiVector<double, int, long long, Tpetra::KokkosCompat::KokkosOpenMPWrapperNode> &);
185 template const Epetra_MultiVector &toEpetra<long long, Tpetra::KokkosCompat::KokkosOpenMPWrapperNode>(
const MultiVector<double, int, long long, Tpetra::KokkosCompat::KokkosOpenMPWrapperNode> &);
187 #ifdef HAVE_TPETRA_INST_CUDA
188 template class EpetraMultiVectorT<long long, Tpetra::KokkosCompat::KokkosCudaWrapperNode>;
189 template RCP<MultiVector<double, int, long long, Tpetra::KokkosCompat::KokkosCudaWrapperNode> > toXpetra<long long, Tpetra::KokkosCompat::KokkosCudaWrapperNode>(RCP<Epetra_MultiVector>);
190 template Epetra_MultiVector &toEpetra<long long, Tpetra::KokkosCompat::KokkosCudaWrapperNode>(MultiVector<double, int, long long, Tpetra::KokkosCompat::KokkosCudaWrapperNode> &);
191 template const Epetra_MultiVector &toEpetra<long long, Tpetra::KokkosCompat::KokkosCudaWrapperNode>(
const MultiVector<double, int, long long, Tpetra::KokkosCompat::KokkosCudaWrapperNode> &);
193 #ifdef HAVE_TPETRA_INST_HIP
194 template class EpetraMultiVectorT<long long, Tpetra::KokkosCompat::KokkosHIPWrapperNode>;
195 template RCP<MultiVector<double, int, long long, Tpetra::KokkosCompat::KokkosHIPWrapperNode> > toXpetra<long long, Tpetra::KokkosCompat::KokkosHIPWrapperNode>(RCP<Epetra_MultiVector>);
196 template Epetra_MultiVector &toEpetra<long long, Tpetra::KokkosCompat::KokkosHIPWrapperNode>(MultiVector<double, int, long long, Tpetra::KokkosCompat::KokkosHIPWrapperNode> &);
197 template const Epetra_MultiVector &toEpetra<long long, Tpetra::KokkosCompat::KokkosHIPWrapperNode>(
const MultiVector<double, int, long long, Tpetra::KokkosCompat::KokkosHIPWrapperNode> &);
199 #else // Tpetra is disabled
201 template class EpetraMultiVectorT<long long, default_node_type>;
202 template RCP<MultiVector<double, int, long long, default_node_type> > toXpetra<long long, default_node_type>(RCP<Epetra_MultiVector>);
203 template Epetra_MultiVector &toEpetra<long long, default_node_type>(MultiVector<double, int, long long, default_node_type> &);
204 template const Epetra_MultiVector &toEpetra<long long, default_node_type>(
const MultiVector<double, int, long long, default_node_type> &);
#define XPETRA_DYNAMIC_CAST(type, obj, newObj, exceptionMsg)
Tpetra::KokkosCompat::KokkosSerialWrapperNode EpetraNode
Teuchos::RCP< const Vector< double, int, GlobalOrdinal, Node > > getVector(size_t j) const
Return a Vector which is a const view of column j.
#define XPETRA_MONITOR(funcName)
const Epetra_CrsGraph & toEpetra(const RCP< const CrsGraph< int, GlobalOrdinal, Node > > &graph)
Teuchos::RCP< Vector< double, int, GlobalOrdinal, Node > > getVectorNonConst(size_t j)
Return a Vector which is a nonconst view of column j.
RCP< const CrsGraph< int, GlobalOrdinal, Node > > toXpetra(const Epetra_CrsGraph &g)