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#include <Xpetra_CrsMatrix.hpp>
25#include <Xpetra_RowMatrix.hpp>
26#include <Xpetra_TpetraRowMatrix.hpp>
27#include <Xpetra_CrsGraph.hpp>
36typedef ::Tpetra::Details::DefaultTypes::local_ordinal_type
default_lno_t;
39typedef ::Tpetra::Details::DefaultTypes::global_ordinal_type
default_gno_t;
136template <
typename User>
168 static inline std::string
name() {
return "InputAdapter";}
171#ifndef DOXYGEN_SHOULD_SKIP_THIS
174 typedef SSIZE_T ssize_t;
179#define Z2_ISSAME(s,type) (std::is_same< s, type >::value)
181#define Z2_STYPES(s) ( Z2_ISSAME(s,float) || \
182 Z2_ISSAME(s,double) || Z2_ISSAME(s,int) || Z2_ISSAME(s,long) || \
183 Z2_ISSAME(s,long long) || Z2_ISSAME(s, int64_t) || Z2_ISSAME(s, int32_t) || \
184 Z2_ISSAME(s,std::complex<double>) || Z2_ISSAME(s,std::complex<float>) )
186#define Z2_LTYPES(l) ( Z2_ISSAME(l,int) || \
187 Z2_ISSAME(l,long) || Z2_ISSAME(l,long long) || Z2_ISSAME(l,ssize_t) )
189#define Z2_GTYPES(g) ( Z2_ISSAME(g,int) || Z2_ISSAME(g,long) || \
190 Z2_ISSAME(g,long long) || Z2_ISSAME(g,ssize_t) || \
191 Z2_ISSAME(g,unsigned int) || Z2_ISSAME(g,unsigned long) || \
192 Z2_ISSAME(g,unsigned long long) || Z2_ISSAME(g,size_t) )
194#define Z2_SERROR "Invalid scalar type. It must be float, double, int, long, long long, int32_t, or int64_t."
196#define Z2_LERROR "Invalid local ordinal type. It must be int, long, " \
197 "long long, or ssize_t."
199#define Z2_GERROR "Invalid global ordinal type. It must be int, long, " \
200 "long long, ssize_t, unsigned int, unsigned long long, size_t."
202#ifdef Z2_INVERT_STATIC_ASSERT_FOR_UNIT_TESTING
203 #define Z2_STATIC_ASSERT_TYPES static_assert( ( !Z2_STYPES(scalar_t) || \
204 !Z2_LTYPES(lno_t) || !Z2_GTYPES(gno_t) ), \
205 "Inverted unit test for InputTraits was supposed to fail but did not." );
207 #define Z2_STATIC_ASSERT_TYPES static_assert( Z2_STYPES(scalar_t), \
208 Z2_SERROR ); static_assert( Z2_LTYPES(lno_t), Z2_LERROR ); \
209 static_assert( Z2_GTYPES(gno_t), Z2_GERROR );
212template <
typename Scalar,
213 typename LocalOrdinal,
214 typename GlobalOrdinal,
216struct InputTraits<BasicUserTypes<Scalar, LocalOrdinal, GlobalOrdinal,
Node> >
219 typedef LocalOrdinal
lno_t;
220 typedef GlobalOrdinal
gno_t;
224 static inline std::string
name() {
return "BasicUserTypes";}
226 Z2_STATIC_ASSERT_TYPES
229template <
typename Scalar,
230 typename LocalOrdinal,
231 typename GlobalOrdinal,
233struct InputTraits<Xpetra::CrsMatrix<Scalar,LocalOrdinal,GlobalOrdinal,Node> >
236 typedef typename Xpetra::CrsMatrix<Scalar,LocalOrdinal,GlobalOrdinal,Node>::impl_scalar_type impl_scalar_t;
237 typedef LocalOrdinal
lno_t;
238 typedef GlobalOrdinal
gno_t;
242 static inline std::string
name() {
return "Xpetra::CrsMatrix";}
244 Z2_STATIC_ASSERT_TYPES
247template <
typename Scalar,
248 typename LocalOrdinal,
249 typename GlobalOrdinal,
251struct InputTraits<Tpetra::CrsMatrix<Scalar,LocalOrdinal,GlobalOrdinal,Node> >
254 typedef typename Tpetra::CrsMatrix<Scalar,LocalOrdinal,GlobalOrdinal,Node>::impl_scalar_type impl_scalar_t;
255 typedef LocalOrdinal
lno_t;
256 typedef GlobalOrdinal
gno_t;
260 static inline std::string
name() {
return "Tpetra::CrsMatrix";}
262 Z2_STATIC_ASSERT_TYPES
265template <
typename Scalar,
266 typename LocalOrdinal,
267 typename GlobalOrdinal,
269struct InputTraits<Xpetra::RowMatrix<Scalar,LocalOrdinal,GlobalOrdinal,Node> >
272 typedef typename Xpetra::RowMatrix<Scalar,LocalOrdinal,GlobalOrdinal,Node>::impl_scalar_type impl_scalar_t;
273 typedef LocalOrdinal
lno_t;
274 typedef GlobalOrdinal
gno_t;
278 static inline std::string
name() {
return "Xpetra::RowMatrix";}
280 Z2_STATIC_ASSERT_TYPES
283template <
typename Scalar,
284 typename LocalOrdinal,
285 typename GlobalOrdinal,
287struct InputTraits<Tpetra::RowMatrix<Scalar,LocalOrdinal,GlobalOrdinal,Node> >
290 typedef typename Tpetra::RowMatrix<Scalar,LocalOrdinal,GlobalOrdinal,Node>::impl_scalar_type impl_scalar_t;
291 typedef LocalOrdinal
lno_t;
292 typedef GlobalOrdinal
gno_t;
296 static inline std::string
name() {
return "Tpetra::RowMatrix";}
298 Z2_STATIC_ASSERT_TYPES
301template <
typename LocalOrdinal,
302 typename GlobalOrdinal,
304struct InputTraits<Tpetra::RowGraph<LocalOrdinal,GlobalOrdinal,Node> >
308 typedef LocalOrdinal
lno_t;
309 typedef GlobalOrdinal
gno_t;
313 static inline std::string
name() {
return "Tpetra::RowGraph";}
316template <
typename LocalOrdinal,
317 typename GlobalOrdinal,
319struct InputTraits<Xpetra::CrsGraph<LocalOrdinal,GlobalOrdinal,Node> >
323 typedef LocalOrdinal
lno_t;
324 typedef GlobalOrdinal
gno_t;
328 static inline std::string
name() {
return "Xpetra::CrsGraph";}
330 Z2_STATIC_ASSERT_TYPES
333template <
typename LocalOrdinal,
334 typename GlobalOrdinal,
336struct InputTraits<Tpetra::CrsGraph<LocalOrdinal,GlobalOrdinal,Node> >
340 typedef LocalOrdinal
lno_t;
341 typedef GlobalOrdinal
gno_t;
345 static inline std::string
name() {
return "Tpetra::CrsGraph";}
347 Z2_STATIC_ASSERT_TYPES
350template <
typename Scalar,
351 typename LocalOrdinal,
352 typename GlobalOrdinal,
354struct InputTraits<Xpetra::
Vector<Scalar,LocalOrdinal,GlobalOrdinal,Node> >
357 typedef typename Xpetra::Vector<Scalar,LocalOrdinal,GlobalOrdinal,Node>::impl_scalar_type impl_scalar_t;
358 typedef LocalOrdinal
lno_t;
359 typedef GlobalOrdinal
gno_t;
363 static inline std::string
name() {
return "Xpetra::Vector";}
365 Z2_STATIC_ASSERT_TYPES
371template <
typename Scalar,
372 typename LocalOrdinal,
373 typename GlobalOrdinal,
375struct InputTraits<Tpetra::
Vector<Scalar,LocalOrdinal,GlobalOrdinal,Node> >
378 typedef typename Tpetra::Vector<Scalar,LocalOrdinal,GlobalOrdinal,Node>::impl_scalar_type impl_scalar_t;
379 typedef LocalOrdinal
lno_t;
380 typedef GlobalOrdinal
gno_t;
384 static inline std::string
name() {
return "Tpetra::Vector";}
386 Z2_STATIC_ASSERT_TYPES
389template <
typename Scalar,
390 typename LocalOrdinal,
391 typename GlobalOrdinal,
393struct InputTraits<Xpetra::MultiVector<Scalar,LocalOrdinal,GlobalOrdinal,Node> >
396 typedef typename Xpetra::MultiVector<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::MultiVector";}
404 Z2_STATIC_ASSERT_TYPES
407template <
typename Scalar,
408 typename LocalOrdinal,
409 typename GlobalOrdinal,
411struct InputTraits<Tpetra::MultiVector<Scalar,LocalOrdinal,GlobalOrdinal,Node> >
414 typedef typename Tpetra::MultiVector<Scalar,LocalOrdinal,GlobalOrdinal,Node>::impl_scalar_type impl_scalar_t;
415 typedef LocalOrdinal
lno_t;
416 typedef GlobalOrdinal
gno_t;
420 static inline std::string
name() {
return "Tpetra::MultiVector";}
422 Z2_STATIC_ASSERT_TYPES
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