14#ifndef ZOLTAN2_INPUTTRAITS_HPP
15#define ZOLTAN2_INPUTTRAITS_HPP
19#include <Tpetra_CrsMatrix.hpp>
20#include <Tpetra_RowMatrix.hpp>
21#include <Tpetra_CrsGraph.hpp>
22#include <Tpetra_RowGraph.hpp>
24#ifdef HAVE_ZOLTAN2_EPETRA
25#include <Epetra_CrsMatrix.h>
26#include <Epetra_CrsGraph.h>
29#include <Xpetra_CrsMatrix.hpp>
30#include <Xpetra_RowMatrix.hpp>
31#include <Xpetra_TpetraRowMatrix.hpp>
32#include <Xpetra_CrsGraph.hpp>
41typedef ::Tpetra::Details::DefaultTypes::local_ordinal_type
default_lno_t;
44typedef ::Tpetra::Details::DefaultTypes::global_ordinal_type
default_gno_t;
145template <
typename User>
177 static inline std::string
name() {
return "InputAdapter";}
180#ifndef DOXYGEN_SHOULD_SKIP_THIS
183 typedef SSIZE_T ssize_t;
188#define Z2_ISSAME(s,type) (std::is_same< s, type >::value)
190#define Z2_STYPES(s) ( Z2_ISSAME(s,float) || \
191 Z2_ISSAME(s,double) || Z2_ISSAME(s,int) || Z2_ISSAME(s,long) || \
192 Z2_ISSAME(s,long long) || Z2_ISSAME(s, int64_t) || Z2_ISSAME(s, int32_t))
194#define Z2_LTYPES(l) ( Z2_ISSAME(l,int) || \
195 Z2_ISSAME(l,long) || Z2_ISSAME(l,long long) || Z2_ISSAME(l,ssize_t) )
197#define Z2_GTYPES(g) ( Z2_ISSAME(g,int) || Z2_ISSAME(g,long) || \
198 Z2_ISSAME(g,long long) || Z2_ISSAME(g,ssize_t) || \
199 Z2_ISSAME(g,unsigned int) || Z2_ISSAME(g,unsigned long) || \
200 Z2_ISSAME(g,unsigned long long) || Z2_ISSAME(g,size_t) )
202#define Z2_SERROR "Invalid scalar type. It must be float, double, int, long, long long, int32_t, or int64_t."
204#define Z2_LERROR "Invalid local ordinal type. It must be int, long, " \
205 "long long, or ssize_t."
207#define Z2_GERROR "Invalid global ordinal type. It must be int, long, " \
208 "long long, ssize_t, unsigned int, unsigned long long, size_t."
210#ifdef Z2_INVERT_STATIC_ASSERT_FOR_UNIT_TESTING
211 #define Z2_STATIC_ASSERT_TYPES static_assert( ( !Z2_STYPES(scalar_t) || \
212 !Z2_LTYPES(lno_t) || !Z2_GTYPES(gno_t) ), \
213 "Inverted unit test for InputTraits was supposed to fail but did not." );
215 #define Z2_STATIC_ASSERT_TYPES static_assert( Z2_STYPES(scalar_t), \
216 Z2_SERROR ); static_assert( Z2_LTYPES(lno_t), Z2_LERROR ); \
217 static_assert( Z2_GTYPES(gno_t), Z2_GERROR );
220template <
typename Scalar,
221 typename LocalOrdinal,
222 typename GlobalOrdinal,
224struct InputTraits<BasicUserTypes<Scalar, LocalOrdinal, GlobalOrdinal,
Node> >
227 typedef LocalOrdinal
lno_t;
228 typedef GlobalOrdinal
gno_t;
232 static inline std::string
name() {
return "BasicUserTypes";}
234 Z2_STATIC_ASSERT_TYPES
237template <
typename Scalar,
238 typename LocalOrdinal,
239 typename GlobalOrdinal,
241struct InputTraits<Xpetra::CrsMatrix<Scalar,LocalOrdinal,GlobalOrdinal,Node> >
244 typedef LocalOrdinal
lno_t;
245 typedef GlobalOrdinal
gno_t;
249 static inline std::string
name() {
return "Xpetra::CrsMatrix";}
251 Z2_STATIC_ASSERT_TYPES
254template <
typename Scalar,
255 typename LocalOrdinal,
256 typename GlobalOrdinal,
258struct InputTraits<Tpetra::CrsMatrix<Scalar,LocalOrdinal,GlobalOrdinal,Node> >
261 typedef LocalOrdinal
lno_t;
262 typedef GlobalOrdinal
gno_t;
266 static inline std::string
name() {
return "Tpetra::CrsMatrix";}
268 Z2_STATIC_ASSERT_TYPES
271#ifdef HAVE_ZOLTAN2_EPETRA
273struct InputTraits<Epetra_CrsMatrix>
281 static inline std::string
name() {
return "Epetra_CrsMatrix";}
285template <
typename Scalar,
286 typename LocalOrdinal,
287 typename GlobalOrdinal,
289struct InputTraits<Xpetra::RowMatrix<Scalar,LocalOrdinal,GlobalOrdinal,Node> >
292 typedef LocalOrdinal
lno_t;
293 typedef GlobalOrdinal
gno_t;
297 static inline std::string
name() {
return "Xpetra::RowMatrix";}
299 Z2_STATIC_ASSERT_TYPES
302template <
typename Scalar,
303 typename LocalOrdinal,
304 typename GlobalOrdinal,
306struct InputTraits<Tpetra::RowMatrix<Scalar,LocalOrdinal,GlobalOrdinal,Node> >
309 typedef LocalOrdinal
lno_t;
310 typedef GlobalOrdinal
gno_t;
314 static inline std::string
name() {
return "Tpetra::RowMatrix";}
316 Z2_STATIC_ASSERT_TYPES
319template <
typename LocalOrdinal,
320 typename GlobalOrdinal,
322struct InputTraits<Tpetra::RowGraph<LocalOrdinal,GlobalOrdinal,Node> >
325 typedef LocalOrdinal
lno_t;
326 typedef GlobalOrdinal
gno_t;
330 static inline std::string
name() {
return "Tpetra::RowGraph";}
333template <
typename LocalOrdinal,
334 typename GlobalOrdinal,
336struct InputTraits<Xpetra::CrsGraph<LocalOrdinal,GlobalOrdinal,Node> >
339 typedef LocalOrdinal
lno_t;
340 typedef GlobalOrdinal
gno_t;
344 static inline std::string
name() {
return "Xpetra::CrsGraph";}
346 Z2_STATIC_ASSERT_TYPES
349template <
typename LocalOrdinal,
350 typename GlobalOrdinal,
352struct InputTraits<Tpetra::CrsGraph<LocalOrdinal,GlobalOrdinal,Node> >
355 typedef LocalOrdinal
lno_t;
356 typedef GlobalOrdinal
gno_t;
360 static inline std::string
name() {
return "Tpetra::CrsGraph";}
362 Z2_STATIC_ASSERT_TYPES
365#ifdef HAVE_ZOLTAN2_EPETRA
367struct InputTraits<Epetra_CrsGraph>
375 static inline std::string
name() {
return "Epetra_CrsGraph";}
379template <
typename Scalar,
380 typename LocalOrdinal,
381 typename GlobalOrdinal,
383struct InputTraits<Xpetra::
Vector<Scalar,LocalOrdinal,GlobalOrdinal,Node> >
386 typedef LocalOrdinal
lno_t;
387 typedef GlobalOrdinal
gno_t;
391 static inline std::string
name() {
return "Xpetra::Vector";}
393 Z2_STATIC_ASSERT_TYPES
399template <
typename Scalar,
400 typename LocalOrdinal,
401 typename GlobalOrdinal,
403struct InputTraits<Tpetra::
Vector<Scalar,LocalOrdinal,GlobalOrdinal,Node> >
406 typedef LocalOrdinal
lno_t;
407 typedef GlobalOrdinal
gno_t;
411 static inline std::string
name() {
return "Tpetra::Vector";}
413 Z2_STATIC_ASSERT_TYPES
416#ifdef HAVE_ZOLTAN2_EPETRA
418struct InputTraits<Epetra_Vector>
426 static inline std::string
name() {
return "Epetra_Vector";}
430template <
typename Scalar,
431 typename LocalOrdinal,
432 typename GlobalOrdinal,
434struct InputTraits<Xpetra::MultiVector<Scalar,LocalOrdinal,GlobalOrdinal,Node> >
437 typedef LocalOrdinal
lno_t;
438 typedef GlobalOrdinal
gno_t;
442 static inline std::string
name() {
return "Xpetra::MultiVector";}
444 Z2_STATIC_ASSERT_TYPES
447template <
typename Scalar,
448 typename LocalOrdinal,
449 typename GlobalOrdinal,
451struct InputTraits<Tpetra::MultiVector<Scalar,LocalOrdinal,GlobalOrdinal,Node> >
454 typedef LocalOrdinal
lno_t;
455 typedef GlobalOrdinal
gno_t;
459 static inline std::string
name() {
return "Tpetra::MultiVector";}
461 Z2_STATIC_ASSERT_TYPES
464#ifdef HAVE_ZOLTAN2_EPETRA
466struct InputTraits<Epetra_MultiVector>
474 static inline std::string
name() {
return "Epetra_MultiVector";}
Gathering definitions used in software development.
A simple class that can be the User template argument for an InputAdapter.
Tpetra::Vector< z2TestScalar, z2TestLO, z2TestGO > Vector
Created by mbenlioglu on Aug 31, 2020.
::Tpetra::Details::DefaultTypes::node_type default_node_t
::Tpetra::Details::DefaultTypes::local_ordinal_type default_lno_t
::Tpetra::Details::DefaultTypes::global_ordinal_type default_gno_t
::Tpetra::Details::DefaultTypes::scalar_type default_scalar_t