11 #ifndef AMESOS2_VECTORTRAITS_HPP
12 #define AMESOS2_VECTORTRAITS_HPP
16 #include <Tpetra_MultiVector.hpp>
19 #ifdef HAVE_AMESOS2_EPETRA
20 # include <Epetra_MultiVector.h>
27 template <
class Vector>
28 struct VectorTraits {};
34 template <
typename Scalar,
35 typename LocalOrdinal,
36 typename GlobalOrdinal,
39 Tpetra::MultiVector<Scalar,
43 typedef Scalar scalar_t;
44 typedef LocalOrdinal local_ordinal_t;
45 typedef GlobalOrdinal global_ordinal_t;
48 typedef Tpetra::MultiVector<Scalar, LocalOrdinal, GlobalOrdinal, Node> multivector_type;
49 typedef typename multivector_type::impl_scalar_type ptr_scalar_type;
52 template <
typename Scalar,
53 typename ExecutionSpace >
55 Kokkos::View<Scalar**,Kokkos::LayoutLeft,ExecutionSpace> > {
56 typedef Scalar scalar_t;
57 typedef int local_ordinal_t;
58 typedef Tpetra::Map<>::global_ordinal_type global_ordinal_t;
59 typedef Tpetra::Map<>::node_type node_t;
61 typedef Kokkos::View<Scalar**,Kokkos::LayoutLeft,ExecutionSpace> multivector_type;
62 typedef Scalar ptr_scalar_type;
66 #ifdef HAVE_AMESOS2_EPETRA
69 struct VectorTraits<Epetra_MultiVector> {
70 typedef double scalar_t;
71 typedef int local_ordinal_t;
72 typedef Tpetra::Map<>::global_ordinal_type global_ordinal_t;
73 typedef Tpetra::Map<>::node_type node_t;
75 typedef Epetra_MultiVector multivector_type;
76 typedef double ptr_scalar_type;
83 #endif // AMESOS2_VECTORTRAITS_HPP