50 #ifndef ZOLTAN2_INPUTTRAITS_HPP 51 #define ZOLTAN2_INPUTTRAITS_HPP 55 #include <Tpetra_CrsMatrix.hpp> 56 #include <Tpetra_RowMatrix.hpp> 57 #include <Tpetra_CrsGraph.hpp> 58 #include <Tpetra_RowGraph.hpp> 60 #ifdef HAVE_ZOLTAN2_EPETRA 61 #include <Epetra_CrsMatrix.h> 62 #include <Epetra_CrsGraph.h> 65 #include <Xpetra_CrsMatrix.hpp> 66 #include <Xpetra_RowMatrix.hpp> 67 #include <Xpetra_TpetraRowMatrix.hpp> 68 #include <Xpetra_CrsGraph.hpp> 69 #include <Kokkos_DefaultNode.hpp> 134 template <
typename scalar=
double,
typename lno=
int,
typename gno=
int>
172 template <
typename User>
200 static inline std::string
name() {
return "InputAdapter";}
203 #ifndef DOXYGEN_SHOULD_SKIP_THIS 207 #define Z2_ISSAME(s,type) (std::is_same< s, type >::value) 209 #define Z2_STYPES(s) ( Z2_ISSAME(s,float) || \ 210 Z2_ISSAME(s,double) || Z2_ISSAME(s,int) ) 212 #define Z2_LTYPES(l) ( Z2_ISSAME(l,int) || \ 213 Z2_ISSAME(l,long) || Z2_ISSAME(l,long long) || Z2_ISSAME(l,ssize_t) ) 215 #define Z2_GTYPES(g) ( Z2_ISSAME(g,int) || Z2_ISSAME(g,long) || \ 216 Z2_ISSAME(g,long long) || Z2_ISSAME(g,ssize_t) || \ 217 Z2_ISSAME(g,unsigned int) || Z2_ISSAME(g,unsigned long) || \ 218 Z2_ISSAME(g,unsigned long long) || Z2_ISSAME(g,size_t) ) 220 #define Z2_SERROR "Invalid scalar type. It must be float, double, or int." 222 #define Z2_LERROR "Invalid local ordinal type. It must be int, long, " \ 223 "long long, or ssize_t." 225 #define Z2_GERROR "Invalid global ordinal type. It must be int, long, " \ 226 "long long, ssize_t, unsigned int, unsigned long long, size_t." 228 #ifdef Z2_INVERT_STATIC_ASSERT_FOR_UNIT_TESTING 229 #define Z2_STATIC_ASSERT_TYPES static_assert( ( !Z2_STYPES(scalar_t) || \ 230 !Z2_LTYPES(lno_t) || !Z2_GTYPES(gno_t) ), \ 231 "Inverted unit test for InputTraits was supposed to fail but did not." ); 233 #define Z2_STATIC_ASSERT_TYPES static_assert( Z2_STYPES(scalar_t), \ 234 Z2_SERROR ); static_assert( Z2_LTYPES(lno_t), Z2_LERROR ); \ 235 static_assert( Z2_GTYPES(gno_t), Z2_GERROR ); 238 template <
typename Scalar,
239 typename LocalOrdinal,
240 typename GlobalOrdinal>
241 struct InputTraits<BasicUserTypes<Scalar, LocalOrdinal, GlobalOrdinal> >
244 typedef LocalOrdinal
lno_t;
245 typedef GlobalOrdinal
gno_t;
248 static inline std::string
name() {
return "BasicUserTypes";}
250 Z2_STATIC_ASSERT_TYPES
253 template <
typename Scalar,
254 typename LocalOrdinal,
255 typename GlobalOrdinal,
257 struct InputTraits<Xpetra::CrsMatrix<Scalar,LocalOrdinal,GlobalOrdinal,Node> >
260 typedef LocalOrdinal
lno_t;
261 typedef GlobalOrdinal
gno_t;
264 static inline std::string
name() {
return "Xpetra::CrsMatrix";}
266 Z2_STATIC_ASSERT_TYPES
269 template <
typename Scalar,
270 typename LocalOrdinal,
271 typename GlobalOrdinal,
273 struct InputTraits<Tpetra::CrsMatrix<Scalar,LocalOrdinal,GlobalOrdinal,Node> >
276 typedef LocalOrdinal
lno_t;
277 typedef GlobalOrdinal
gno_t;
280 static inline std::string
name() {
return "Tpetra::CrsMatrix";}
282 Z2_STATIC_ASSERT_TYPES
285 #ifdef HAVE_ZOLTAN2_EPETRA 287 struct InputTraits<Epetra_CrsMatrix>
294 static inline std::string
name() {
return "Epetra_CrsMatrix";}
298 template <
typename Scalar,
299 typename LocalOrdinal,
300 typename GlobalOrdinal,
302 struct InputTraits<Xpetra::RowMatrix<Scalar,LocalOrdinal,GlobalOrdinal,Node> >
305 typedef LocalOrdinal
lno_t;
306 typedef GlobalOrdinal
gno_t;
309 static inline std::string
name() {
return "Xpetra::RowMatrix";}
311 Z2_STATIC_ASSERT_TYPES
314 template <
typename Scalar,
315 typename LocalOrdinal,
316 typename GlobalOrdinal,
318 struct InputTraits<Tpetra::RowMatrix<Scalar,LocalOrdinal,GlobalOrdinal,Node> >
321 typedef LocalOrdinal
lno_t;
322 typedef GlobalOrdinal
gno_t;
325 static inline std::string
name() {
return "Tpetra::RowMatrix";}
327 Z2_STATIC_ASSERT_TYPES
330 template <
typename LocalOrdinal,
331 typename GlobalOrdinal,
333 struct InputTraits<Tpetra::RowGraph<LocalOrdinal,GlobalOrdinal,Node> >
336 typedef LocalOrdinal
lno_t;
337 typedef GlobalOrdinal
gno_t;
340 static inline std::string
name() {
return "Tpetra::RowGraph";}
343 template <
typename LocalOrdinal,
344 typename GlobalOrdinal,
346 struct InputTraits<Xpetra::CrsGraph<LocalOrdinal,GlobalOrdinal,Node> >
349 typedef LocalOrdinal
lno_t;
350 typedef GlobalOrdinal
gno_t;
353 static inline std::string
name() {
return "Xpetra::CrsGraph";}
355 Z2_STATIC_ASSERT_TYPES
358 template <
typename LocalOrdinal,
359 typename GlobalOrdinal,
361 struct InputTraits<Tpetra::CrsGraph<LocalOrdinal,GlobalOrdinal,Node> >
364 typedef LocalOrdinal
lno_t;
365 typedef GlobalOrdinal
gno_t;
368 static inline std::string
name() {
return "Tpetra::CrsGraph";}
370 Z2_STATIC_ASSERT_TYPES
373 #ifdef HAVE_ZOLTAN2_EPETRA 375 struct InputTraits<Epetra_CrsGraph>
382 static inline std::string
name() {
return "Epetra_CrsGraph";}
386 template <
typename Scalar,
387 typename LocalOrdinal,
388 typename GlobalOrdinal,
390 struct InputTraits<Xpetra::
Vector<Scalar,LocalOrdinal,GlobalOrdinal,Node> >
393 typedef LocalOrdinal
lno_t;
394 typedef GlobalOrdinal
gno_t;
397 static inline std::string
name() {
return "Xpetra::Vector";}
399 Z2_STATIC_ASSERT_TYPES
405 template <
typename Scalar,
406 typename LocalOrdinal,
407 typename GlobalOrdinal,
409 struct InputTraits<Tpetra::
Vector<Scalar,LocalOrdinal,GlobalOrdinal,Node> >
412 typedef LocalOrdinal
lno_t;
413 typedef GlobalOrdinal
gno_t;
416 static inline std::string
name() {
return "Tpetra::Vector";}
418 Z2_STATIC_ASSERT_TYPES
421 #ifdef HAVE_ZOLTAN2_EPETRA 423 struct InputTraits<Epetra_Vector>
430 static inline std::string
name() {
return "Epetra_Vector";}
434 template <
typename Scalar,
435 typename LocalOrdinal,
436 typename GlobalOrdinal,
438 struct InputTraits<Xpetra::MultiVector<Scalar,LocalOrdinal,GlobalOrdinal,Node> >
441 typedef LocalOrdinal
lno_t;
442 typedef GlobalOrdinal
gno_t;
445 static inline std::string
name() {
return "Xpetra::MultiVector";}
447 Z2_STATIC_ASSERT_TYPES
450 template <
typename Scalar,
451 typename LocalOrdinal,
452 typename GlobalOrdinal,
454 struct InputTraits<Tpetra::MultiVector<Scalar,LocalOrdinal,GlobalOrdinal,Node> >
457 typedef LocalOrdinal
lno_t;
458 typedef GlobalOrdinal
gno_t;
461 static inline std::string
name() {
return "Tpetra::MultiVector";}
463 Z2_STATIC_ASSERT_TYPES
466 #ifdef HAVE_ZOLTAN2_EPETRA 468 struct InputTraits<Epetra_MultiVector>
475 static inline std::string
name() {
return "Epetra_MultiVector";}
479 #endif // DOXYGEN_SHOULD_SKIP_THIS 483 #endif // ZOLTAN2_INPUTTRAITS_HPP
Tpetra::Map ::node_type default_node_t
A simple class that can be the User template argument for an InputAdapter.
Tpetra::Vector< z2TestScalar, z2TestLO, z2TestGO > Vector
Gathering definitions used in software development.