54 #include "Epetra_SerialComm.h"
60 #ifndef XPETRA_EPETRA_NO_32BIT_GLOBAL_INDICES
74 #ifndef XPETRA_EPETRA_NO_64BIT_GLOBAL_INDICES
88 template<
class GlobalOrdinal,
class Node>
91 return *tX.getEpetra_MultiVector();
94 template<
class GlobalOrdinal,
class Node>
97 return *tX.getEpetra_MultiVector();
101 template<
class GlobalOrdinal,
class Node>
102 RCP<MultiVector<double, int, GlobalOrdinal,Node> >
toXpetra(RCP<Epetra_MultiVector> vec) {
106 return Teuchos::null;
111 #ifndef XPETRA_EPETRA_NO_32BIT_GLOBAL_INDICES
112 #ifdef HAVE_XPETRA_TPETRA
113 #include "TpetraCore_config.h"
114 #if ((defined(EPETRA_HAVE_OMP) && !defined(HAVE_TPETRA_INST_OPENMP)) || \
115 (!defined(EPETRA_HAVE_OMP) && !defined(HAVE_TPETRA_INST_SERIAL)))
116 template class EpetraMultiVectorT<int, Xpetra::EpetraNode >;
117 template RCP<MultiVector<double, int, int, Xpetra::EpetraNode > > toXpetra<int, Xpetra::EpetraNode>(RCP<Epetra_MultiVector>);
118 template Epetra_MultiVector & toEpetra<int,Xpetra::EpetraNode >(MultiVector<double, int, int,Xpetra::EpetraNode> &);
119 template const Epetra_MultiVector & toEpetra<int, Xpetra::EpetraNode >(
const MultiVector<double, int, int, Xpetra::EpetraNode > &);
122 #ifdef HAVE_TPETRA_INST_SERIAL
123 template class EpetraMultiVectorT<int, Kokkos::Compat::KokkosSerialWrapperNode >;
124 template RCP<MultiVector<double, int, int, Kokkos::Compat::KokkosSerialWrapperNode > > toXpetra<int, Kokkos::Compat::KokkosSerialWrapperNode>(RCP<Epetra_MultiVector>);
125 template Epetra_MultiVector & toEpetra<int,Kokkos::Compat::KokkosSerialWrapperNode >(MultiVector<double, int, int, Kokkos::Compat::KokkosSerialWrapperNode> &);
126 template const Epetra_MultiVector & toEpetra<int, Kokkos::Compat::KokkosSerialWrapperNode >(
const MultiVector<double, int, int, Kokkos::Compat::KokkosSerialWrapperNode > &);
128 #ifdef HAVE_TPETRA_INST_PTHREAD
129 template class EpetraMultiVectorT<int, Kokkos::Compat::KokkosThreadsWrapperNode >;
130 template RCP<MultiVector<double, int, int, Kokkos::Compat::KokkosThreadsWrapperNode > > toXpetra<int, Kokkos::Compat::KokkosThreadsWrapperNode>(RCP<Epetra_MultiVector>);
131 template Epetra_MultiVector & toEpetra<int,Kokkos::Compat::KokkosThreadsWrapperNode >(MultiVector<double, int, int, Kokkos::Compat::KokkosThreadsWrapperNode> &);
132 template const Epetra_MultiVector & toEpetra<int, Kokkos::Compat::KokkosThreadsWrapperNode >(
const MultiVector<double, int, int, Kokkos::Compat::KokkosThreadsWrapperNode > &);
134 #ifdef HAVE_TPETRA_INST_OPENMP
135 template class EpetraMultiVectorT<int, Kokkos::Compat::KokkosOpenMPWrapperNode >;
136 template RCP<MultiVector<double, int, int, Kokkos::Compat::KokkosOpenMPWrapperNode > > toXpetra<int, Kokkos::Compat::KokkosOpenMPWrapperNode>(RCP<Epetra_MultiVector>);
137 template Epetra_MultiVector & toEpetra<int,Kokkos::Compat::KokkosOpenMPWrapperNode >(MultiVector<double, int, int, Kokkos::Compat::KokkosOpenMPWrapperNode> &);
138 template const Epetra_MultiVector & toEpetra<int, Kokkos::Compat::KokkosOpenMPWrapperNode >(
const MultiVector<double, int, int, Kokkos::Compat::KokkosOpenMPWrapperNode > &);
140 #ifdef HAVE_TPETRA_INST_CUDA
141 template class EpetraMultiVectorT<int, Kokkos::Compat::KokkosCudaWrapperNode >;
142 template RCP<MultiVector<double, int, int, Kokkos::Compat::KokkosCudaWrapperNode > > toXpetra<int, Kokkos::Compat::KokkosCudaWrapperNode>(RCP<Epetra_MultiVector>);
143 template Epetra_MultiVector & toEpetra<int,Kokkos::Compat::KokkosCudaWrapperNode >(MultiVector<double, int, int,Kokkos::Compat::KokkosCudaWrapperNode> &);
144 template const Epetra_MultiVector & toEpetra<int, Kokkos::Compat::KokkosCudaWrapperNode >(
const MultiVector<double, int, int, Kokkos::Compat::KokkosCudaWrapperNode > &);
146 #else // Tpetra is disabled
148 template class EpetraMultiVectorT<int, default_node_type >;
149 template RCP<MultiVector<double, int, int, default_node_type > > toXpetra<int, default_node_type>(RCP<Epetra_MultiVector>);
150 template Epetra_MultiVector & toEpetra<int,default_node_type >(MultiVector<double, int, int,default_node_type> &);
151 template const Epetra_MultiVector & toEpetra<int, default_node_type >(
const MultiVector<double, int, int, default_node_type > &);
155 #ifndef XPETRA_EPETRA_NO_64BIT_GLOBAL_INDICES
156 #ifdef HAVE_XPETRA_TPETRA
157 #include "TpetraCore_config.h"
158 #if ((defined(EPETRA_HAVE_OMP) && !defined(HAVE_TPETRA_INST_OPENMP)) || \
159 (!defined(EPETRA_HAVE_OMP) && !defined(HAVE_TPETRA_INST_SERIAL)))
160 template class EpetraMultiVectorT<long long, Xpetra::EpetraNode >;
161 template RCP<MultiVector<double, int, long long, Xpetra::EpetraNode > > toXpetra<long long, Xpetra::EpetraNode>(RCP<Epetra_MultiVector>);
162 template Epetra_MultiVector & toEpetra<long long,Xpetra::EpetraNode >(MultiVector<double, int, long long,Xpetra::EpetraNode> &);
163 template const Epetra_MultiVector & toEpetra<long long, Xpetra::EpetraNode >(
const MultiVector<double, int, long long, Xpetra::EpetraNode > &);
166 #ifdef HAVE_TPETRA_INST_SERIAL
167 template class EpetraMultiVectorT<long long, Kokkos::Compat::KokkosSerialWrapperNode >;
168 template RCP<MultiVector<double, int, long long, Kokkos::Compat::KokkosSerialWrapperNode > > toXpetra<long long, Kokkos::Compat::KokkosSerialWrapperNode>(RCP<Epetra_MultiVector>);
169 template Epetra_MultiVector & toEpetra<long long,Kokkos::Compat::KokkosSerialWrapperNode >(MultiVector<double, int, long long, Kokkos::Compat::KokkosSerialWrapperNode> &);
170 template const Epetra_MultiVector & toEpetra<long long, Kokkos::Compat::KokkosSerialWrapperNode >(
const MultiVector<double, int, long long, Kokkos::Compat::KokkosSerialWrapperNode > &);
172 #ifdef HAVE_TPETRA_INST_PTHREAD
173 template class EpetraMultiVectorT<long long,Kokkos::Compat::KokkosThreadsWrapperNode >;
174 template RCP<MultiVector<double, int, long long, Kokkos::Compat::KokkosThreadsWrapperNode > > toXpetra<long long, Kokkos::Compat::KokkosThreadsWrapperNode>(RCP<Epetra_MultiVector>);
175 template Epetra_MultiVector & toEpetra<long long,Kokkos::Compat::KokkosThreadsWrapperNode >(MultiVector<double, int, long long,Kokkos::Compat::KokkosThreadsWrapperNode> &);
176 template const Epetra_MultiVector & toEpetra<long long, Kokkos::Compat::KokkosThreadsWrapperNode >(
const MultiVector<double, int, long long, Kokkos::Compat::KokkosThreadsWrapperNode > &);
178 #ifdef HAVE_TPETRA_INST_OPENMP
179 template class EpetraMultiVectorT<long long, Kokkos::Compat::KokkosOpenMPWrapperNode >;
180 template RCP<MultiVector<double, int, long long, Kokkos::Compat::KokkosOpenMPWrapperNode > > toXpetra<long long, Kokkos::Compat::KokkosOpenMPWrapperNode>(RCP<Epetra_MultiVector>);
181 template Epetra_MultiVector & toEpetra<long long,Kokkos::Compat::KokkosOpenMPWrapperNode >(MultiVector<double, int, long long,Kokkos::Compat::KokkosOpenMPWrapperNode> &);
182 template const Epetra_MultiVector & toEpetra<long long, Kokkos::Compat::KokkosOpenMPWrapperNode >(
const MultiVector<double, int, long long, Kokkos::Compat::KokkosOpenMPWrapperNode > &);
184 #ifdef HAVE_TPETRA_INST_CUDA
185 template class EpetraMultiVectorT<long long, Kokkos::Compat::KokkosCudaWrapperNode >;
186 template RCP<MultiVector<double, int, long long, Kokkos::Compat::KokkosCudaWrapperNode > > toXpetra<long long, Kokkos::Compat::KokkosCudaWrapperNode>(RCP<Epetra_MultiVector>);
187 template Epetra_MultiVector & toEpetra<long long,Kokkos::Compat::KokkosCudaWrapperNode >(MultiVector<double, int, long long, Kokkos::Compat::KokkosCudaWrapperNode> &);
188 template const Epetra_MultiVector & toEpetra<long long, Kokkos::Compat::KokkosCudaWrapperNode >(
const MultiVector<double, int, long long, Kokkos::Compat::KokkosCudaWrapperNode > &);
190 #else // Tpetra is disabled
192 template class EpetraMultiVectorT<long long, default_node_type >;
193 template RCP<MultiVector<double, int, long long, default_node_type > > toXpetra<long long, default_node_type>(RCP<Epetra_MultiVector>);
194 template Epetra_MultiVector & toEpetra<long long,default_node_type >(MultiVector<double, int, long long,default_node_type> &);
195 template const Epetra_MultiVector & toEpetra<long long, default_node_type >(
const MultiVector<double, int, long long, default_node_type > &);
const Epetra_CrsGraph & toEpetra(const RCP< const CrsGraph< int, GlobalOrdinal, Node > > &graph)
#define XPETRA_DYNAMIC_CAST(type, obj, newObj, exceptionMsg)
RCP< const CrsGraph< int, GlobalOrdinal, Node > > toXpetra(const Epetra_CrsGraph &g)
#define XPETRA_MONITOR(funcName)
Teuchos::RCP< const Vector< double, int, GlobalOrdinal, Node > > getVector(size_t j) const
Return a Vector which is a const view of column j.
Teuchos::RCP< Vector< double, int, GlobalOrdinal, Node > > getVectorNonConst(size_t j)
Return a Vector which is a nonconst view of column j.