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) || \
193 Z2_ISSAME(s,std::complex<double>) || Z2_ISSAME(s,std::complex<float>) )
195#define Z2_LTYPES(l) ( Z2_ISSAME(l,int) || \
196 Z2_ISSAME(l,long) || Z2_ISSAME(l,long long) || Z2_ISSAME(l,ssize_t) )
198#define Z2_GTYPES(g) ( Z2_ISSAME(g,int) || Z2_ISSAME(g,long) || \
199 Z2_ISSAME(g,long long) || Z2_ISSAME(g,ssize_t) || \
200 Z2_ISSAME(g,unsigned int) || Z2_ISSAME(g,unsigned long) || \
201 Z2_ISSAME(g,unsigned long long) || Z2_ISSAME(g,size_t) )
203#define Z2_SERROR "Invalid scalar type. It must be float, double, int, long, long long, int32_t, or int64_t."
205#define Z2_LERROR "Invalid local ordinal type. It must be int, long, " \
206 "long long, or ssize_t."
208#define Z2_GERROR "Invalid global ordinal type. It must be int, long, " \
209 "long long, ssize_t, unsigned int, unsigned long long, size_t."
211#ifdef Z2_INVERT_STATIC_ASSERT_FOR_UNIT_TESTING
212 #define Z2_STATIC_ASSERT_TYPES static_assert( ( !Z2_STYPES(scalar_t) || \
213 !Z2_LTYPES(lno_t) || !Z2_GTYPES(gno_t) ), \
214 "Inverted unit test for InputTraits was supposed to fail but did not." );
216 #define Z2_STATIC_ASSERT_TYPES static_assert( Z2_STYPES(scalar_t), \
217 Z2_SERROR ); static_assert( Z2_LTYPES(lno_t), Z2_LERROR ); \
218 static_assert( Z2_GTYPES(gno_t), Z2_GERROR );
221template <
typename Scalar,
222 typename LocalOrdinal,
223 typename GlobalOrdinal,
225struct InputTraits<BasicUserTypes<Scalar, LocalOrdinal, GlobalOrdinal,
Node> >
228 typedef LocalOrdinal
lno_t;
229 typedef GlobalOrdinal
gno_t;
233 static inline std::string
name() {
return "BasicUserTypes";}
235 Z2_STATIC_ASSERT_TYPES
238template <
typename Scalar,
239 typename LocalOrdinal,
240 typename GlobalOrdinal,
242struct InputTraits<Xpetra::CrsMatrix<Scalar,LocalOrdinal,GlobalOrdinal,Node> >
245 typedef typename Xpetra::CrsMatrix<Scalar,LocalOrdinal,GlobalOrdinal,Node>::impl_scalar_type impl_scalar_t;
246 typedef LocalOrdinal
lno_t;
247 typedef GlobalOrdinal
gno_t;
251 static inline std::string
name() {
return "Xpetra::CrsMatrix";}
253 Z2_STATIC_ASSERT_TYPES
256template <
typename Scalar,
257 typename LocalOrdinal,
258 typename GlobalOrdinal,
260struct InputTraits<Tpetra::CrsMatrix<Scalar,LocalOrdinal,GlobalOrdinal,Node> >
263 typedef typename Tpetra::CrsMatrix<Scalar,LocalOrdinal,GlobalOrdinal,Node>::impl_scalar_type impl_scalar_t;
264 typedef LocalOrdinal
lno_t;
265 typedef GlobalOrdinal
gno_t;
269 static inline std::string
name() {
return "Tpetra::CrsMatrix";}
271 Z2_STATIC_ASSERT_TYPES
274#ifdef HAVE_ZOLTAN2_EPETRA
276struct InputTraits<Epetra_CrsMatrix>
279 typedef double impl_scalar_t;
285 static inline std::string
name() {
return "Epetra_CrsMatrix";}
289template <
typename Scalar,
290 typename LocalOrdinal,
291 typename GlobalOrdinal,
293struct InputTraits<Xpetra::RowMatrix<Scalar,LocalOrdinal,GlobalOrdinal,Node> >
296 typedef typename Xpetra::RowMatrix<Scalar,LocalOrdinal,GlobalOrdinal,Node>::impl_scalar_type impl_scalar_t;
297 typedef LocalOrdinal
lno_t;
298 typedef GlobalOrdinal
gno_t;
302 static inline std::string
name() {
return "Xpetra::RowMatrix";}
304 Z2_STATIC_ASSERT_TYPES
307template <
typename Scalar,
308 typename LocalOrdinal,
309 typename GlobalOrdinal,
311struct InputTraits<Tpetra::RowMatrix<Scalar,LocalOrdinal,GlobalOrdinal,Node> >
314 typedef typename Tpetra::RowMatrix<Scalar,LocalOrdinal,GlobalOrdinal,Node>::impl_scalar_type impl_scalar_t;
315 typedef LocalOrdinal
lno_t;
316 typedef GlobalOrdinal
gno_t;
320 static inline std::string
name() {
return "Tpetra::RowMatrix";}
322 Z2_STATIC_ASSERT_TYPES
325template <
typename LocalOrdinal,
326 typename GlobalOrdinal,
328struct InputTraits<Tpetra::RowGraph<LocalOrdinal,GlobalOrdinal,Node> >
332 typedef LocalOrdinal
lno_t;
333 typedef GlobalOrdinal
gno_t;
337 static inline std::string
name() {
return "Tpetra::RowGraph";}
340template <
typename LocalOrdinal,
341 typename GlobalOrdinal,
343struct InputTraits<Xpetra::CrsGraph<LocalOrdinal,GlobalOrdinal,Node> >
347 typedef LocalOrdinal
lno_t;
348 typedef GlobalOrdinal
gno_t;
352 static inline std::string
name() {
return "Xpetra::CrsGraph";}
354 Z2_STATIC_ASSERT_TYPES
357template <
typename LocalOrdinal,
358 typename GlobalOrdinal,
360struct InputTraits<Tpetra::CrsGraph<LocalOrdinal,GlobalOrdinal,Node> >
364 typedef LocalOrdinal
lno_t;
365 typedef GlobalOrdinal
gno_t;
369 static inline std::string
name() {
return "Tpetra::CrsGraph";}
371 Z2_STATIC_ASSERT_TYPES
374#ifdef HAVE_ZOLTAN2_EPETRA
376struct InputTraits<Epetra_CrsGraph>
379 typedef double impl_scalar_t;
385 static inline std::string
name() {
return "Epetra_CrsGraph";}
389template <
typename Scalar,
390 typename LocalOrdinal,
391 typename GlobalOrdinal,
393struct InputTraits<Xpetra::
Vector<Scalar,LocalOrdinal,GlobalOrdinal,Node> >
396 typedef typename Xpetra::Vector<Scalar,LocalOrdinal,GlobalOrdinal,Node>::impl_scalar_type impl_scalar_t;
397 typedef LocalOrdinal
lno_t;
398 typedef GlobalOrdinal
gno_t;
402 static inline std::string
name() {
return "Xpetra::Vector";}
404 Z2_STATIC_ASSERT_TYPES
410template <
typename Scalar,
411 typename LocalOrdinal,
412 typename GlobalOrdinal,
414struct InputTraits<Tpetra::
Vector<Scalar,LocalOrdinal,GlobalOrdinal,Node> >
417 typedef typename Tpetra::Vector<Scalar,LocalOrdinal,GlobalOrdinal,Node>::impl_scalar_type impl_scalar_t;
418 typedef LocalOrdinal
lno_t;
419 typedef GlobalOrdinal
gno_t;
423 static inline std::string
name() {
return "Tpetra::Vector";}
425 Z2_STATIC_ASSERT_TYPES
428#ifdef HAVE_ZOLTAN2_EPETRA
430struct InputTraits<Epetra_Vector>
433 typedef double impl_scalar_t;
439 static inline std::string
name() {
return "Epetra_Vector";}
443template <
typename Scalar,
444 typename LocalOrdinal,
445 typename GlobalOrdinal,
447struct InputTraits<Xpetra::MultiVector<Scalar,LocalOrdinal,GlobalOrdinal,Node> >
450 typedef typename Xpetra::MultiVector<Scalar,LocalOrdinal,GlobalOrdinal,Node>::impl_scalar_type impl_scalar_t;
451 typedef LocalOrdinal
lno_t;
452 typedef GlobalOrdinal
gno_t;
456 static inline std::string
name() {
return "Xpetra::MultiVector";}
458 Z2_STATIC_ASSERT_TYPES
461template <
typename Scalar,
462 typename LocalOrdinal,
463 typename GlobalOrdinal,
465struct InputTraits<Tpetra::MultiVector<Scalar,LocalOrdinal,GlobalOrdinal,Node> >
468 typedef typename Tpetra::MultiVector<Scalar,LocalOrdinal,GlobalOrdinal,Node>::impl_scalar_type impl_scalar_t;
469 typedef LocalOrdinal
lno_t;
470 typedef GlobalOrdinal
gno_t;
474 static inline std::string
name() {
return "Tpetra::MultiVector";}
476 Z2_STATIC_ASSERT_TYPES
479#ifdef HAVE_ZOLTAN2_EPETRA
481struct InputTraits<Epetra_MultiVector>
484 typedef double impl_scalar_t;
490 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