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> 73 typedef ::Tpetra::Details::DefaultTypes::local_ordinal_type
default_lno_t;
76 typedef ::Tpetra::Details::DefaultTypes::global_ordinal_type
default_gno_t;
177 template <
typename User>
209 static inline std::string
name() {
return "InputAdapter";}
212 #ifndef DOXYGEN_SHOULD_SKIP_THIS 215 typedef SSIZE_T ssize_t;
220 #define Z2_ISSAME(s,type) (std::is_same< s, type >::value) 222 #define Z2_STYPES(s) ( Z2_ISSAME(s,float) || \ 223 Z2_ISSAME(s,double) || Z2_ISSAME(s,int) || Z2_ISSAME(s,long) || \ 224 Z2_ISSAME(s,long long) || Z2_ISSAME(s, int64_t) || Z2_ISSAME(s, int32_t)) 226 #define Z2_LTYPES(l) ( Z2_ISSAME(l,int) || \ 227 Z2_ISSAME(l,long) || Z2_ISSAME(l,long long) || Z2_ISSAME(l,ssize_t) ) 229 #define Z2_GTYPES(g) ( Z2_ISSAME(g,int) || Z2_ISSAME(g,long) || \ 230 Z2_ISSAME(g,long long) || Z2_ISSAME(g,ssize_t) || \ 231 Z2_ISSAME(g,unsigned int) || Z2_ISSAME(g,unsigned long) || \ 232 Z2_ISSAME(g,unsigned long long) || Z2_ISSAME(g,size_t) ) 234 #define Z2_SERROR "Invalid scalar type. It must be float, double, int, long, long long, int32_t, or int64_t." 236 #define Z2_LERROR "Invalid local ordinal type. It must be int, long, " \ 237 "long long, or ssize_t." 239 #define Z2_GERROR "Invalid global ordinal type. It must be int, long, " \ 240 "long long, ssize_t, unsigned int, unsigned long long, size_t." 242 #ifdef Z2_INVERT_STATIC_ASSERT_FOR_UNIT_TESTING 243 #define Z2_STATIC_ASSERT_TYPES static_assert( ( !Z2_STYPES(scalar_t) || \ 244 !Z2_LTYPES(lno_t) || !Z2_GTYPES(gno_t) ), \ 245 "Inverted unit test for InputTraits was supposed to fail but did not." ); 247 #define Z2_STATIC_ASSERT_TYPES static_assert( Z2_STYPES(scalar_t), \ 248 Z2_SERROR ); static_assert( Z2_LTYPES(lno_t), Z2_LERROR ); \ 249 static_assert( Z2_GTYPES(gno_t), Z2_GERROR ); 252 template <
typename Scalar,
253 typename LocalOrdinal,
254 typename GlobalOrdinal,
256 struct InputTraits<BasicUserTypes<Scalar, LocalOrdinal, GlobalOrdinal,
Node> >
259 typedef LocalOrdinal
lno_t;
260 typedef GlobalOrdinal
gno_t;
264 static inline std::string
name() {
return "BasicUserTypes";}
266 Z2_STATIC_ASSERT_TYPES
269 template <
typename Scalar,
270 typename LocalOrdinal,
271 typename GlobalOrdinal,
273 struct InputTraits<Xpetra::CrsMatrix<Scalar,LocalOrdinal,GlobalOrdinal,Node> >
276 typedef LocalOrdinal
lno_t;
277 typedef GlobalOrdinal
gno_t;
281 static inline std::string
name() {
return "Xpetra::CrsMatrix";}
283 Z2_STATIC_ASSERT_TYPES
286 template <
typename Scalar,
287 typename LocalOrdinal,
288 typename GlobalOrdinal,
290 struct InputTraits<Tpetra::CrsMatrix<Scalar,LocalOrdinal,GlobalOrdinal,Node> >
293 typedef LocalOrdinal
lno_t;
294 typedef GlobalOrdinal
gno_t;
298 static inline std::string
name() {
return "Tpetra::CrsMatrix";}
300 Z2_STATIC_ASSERT_TYPES
303 #ifdef HAVE_ZOLTAN2_EPETRA 305 struct InputTraits<Epetra_CrsMatrix>
313 static inline std::string
name() {
return "Epetra_CrsMatrix";}
317 template <
typename Scalar,
318 typename LocalOrdinal,
319 typename GlobalOrdinal,
321 struct InputTraits<Xpetra::RowMatrix<Scalar,LocalOrdinal,GlobalOrdinal,Node> >
324 typedef LocalOrdinal
lno_t;
325 typedef GlobalOrdinal
gno_t;
329 static inline std::string
name() {
return "Xpetra::RowMatrix";}
331 Z2_STATIC_ASSERT_TYPES
334 template <
typename Scalar,
335 typename LocalOrdinal,
336 typename GlobalOrdinal,
338 struct InputTraits<Tpetra::RowMatrix<Scalar,LocalOrdinal,GlobalOrdinal,Node> >
341 typedef LocalOrdinal
lno_t;
342 typedef GlobalOrdinal
gno_t;
346 static inline std::string
name() {
return "Tpetra::RowMatrix";}
348 Z2_STATIC_ASSERT_TYPES
351 template <
typename LocalOrdinal,
352 typename GlobalOrdinal,
354 struct InputTraits<Tpetra::RowGraph<LocalOrdinal,GlobalOrdinal,Node> >
357 typedef LocalOrdinal
lno_t;
358 typedef GlobalOrdinal
gno_t;
362 static inline std::string
name() {
return "Tpetra::RowGraph";}
365 template <
typename LocalOrdinal,
366 typename GlobalOrdinal,
368 struct InputTraits<Xpetra::CrsGraph<LocalOrdinal,GlobalOrdinal,Node> >
371 typedef LocalOrdinal
lno_t;
372 typedef GlobalOrdinal
gno_t;
376 static inline std::string
name() {
return "Xpetra::CrsGraph";}
378 Z2_STATIC_ASSERT_TYPES
381 template <
typename LocalOrdinal,
382 typename GlobalOrdinal,
384 struct InputTraits<Tpetra::CrsGraph<LocalOrdinal,GlobalOrdinal,Node> >
387 typedef LocalOrdinal
lno_t;
388 typedef GlobalOrdinal
gno_t;
392 static inline std::string
name() {
return "Tpetra::CrsGraph";}
394 Z2_STATIC_ASSERT_TYPES
397 #ifdef HAVE_ZOLTAN2_EPETRA 399 struct InputTraits<Epetra_CrsGraph>
407 static inline std::string
name() {
return "Epetra_CrsGraph";}
411 template <
typename Scalar,
412 typename LocalOrdinal,
413 typename GlobalOrdinal,
415 struct InputTraits<Xpetra::
Vector<Scalar,LocalOrdinal,GlobalOrdinal,Node> >
418 typedef LocalOrdinal
lno_t;
419 typedef GlobalOrdinal
gno_t;
423 static inline std::string
name() {
return "Xpetra::Vector";}
425 Z2_STATIC_ASSERT_TYPES
431 template <
typename Scalar,
432 typename LocalOrdinal,
433 typename GlobalOrdinal,
435 struct InputTraits<Tpetra::
Vector<Scalar,LocalOrdinal,GlobalOrdinal,Node> >
438 typedef LocalOrdinal
lno_t;
439 typedef GlobalOrdinal
gno_t;
443 static inline std::string
name() {
return "Tpetra::Vector";}
445 Z2_STATIC_ASSERT_TYPES
448 #ifdef HAVE_ZOLTAN2_EPETRA 450 struct InputTraits<Epetra_Vector>
458 static inline std::string
name() {
return "Epetra_Vector";}
462 template <
typename Scalar,
463 typename LocalOrdinal,
464 typename GlobalOrdinal,
466 struct InputTraits<Xpetra::MultiVector<Scalar,LocalOrdinal,GlobalOrdinal,Node> >
469 typedef LocalOrdinal
lno_t;
470 typedef GlobalOrdinal
gno_t;
474 static inline std::string
name() {
return "Xpetra::MultiVector";}
476 Z2_STATIC_ASSERT_TYPES
479 template <
typename Scalar,
480 typename LocalOrdinal,
481 typename GlobalOrdinal,
483 struct InputTraits<Tpetra::MultiVector<Scalar,LocalOrdinal,GlobalOrdinal,Node> >
486 typedef LocalOrdinal
lno_t;
487 typedef GlobalOrdinal
gno_t;
491 static inline std::string
name() {
return "Tpetra::MultiVector";}
493 Z2_STATIC_ASSERT_TYPES
496 #ifdef HAVE_ZOLTAN2_EPETRA 498 struct InputTraits<Epetra_MultiVector>
506 static inline std::string
name() {
return "Epetra_MultiVector";}
510 #endif // DOXYGEN_SHOULD_SKIP_THIS 514 #endif // ZOLTAN2_INPUTTRAITS_HPP Created by mbenlioglu on Aug 31, 2020.
A simple class that can be the User template argument for an InputAdapter.
::Tpetra::Details::DefaultTypes::global_ordinal_type default_gno_t
::Tpetra::Details::DefaultTypes::local_ordinal_type default_lno_t
Tpetra::Vector< z2TestScalar, z2TestLO, z2TestGO > Vector
::Tpetra::Details::DefaultTypes::scalar_type default_scalar_t
Gathering definitions used in software development.
::Tpetra::Details::DefaultTypes::node_type default_node_t