45 #ifndef AMESOS2_MATRIXTRAITS_HPP
46 #define AMESOS2_MATRIXTRAITS_HPP
48 #include "Amesos2_config.h"
50 #include <Tpetra_CrsMatrix.hpp>
53 #ifdef HAVE_AMESOS2_EPETRA
54 # include <Epetra_RowMatrix.h>
55 # include <Epetra_CrsMatrix.h>
57 # include <Epetra_VbrMatrix.h>
66 template <
class Matrix>
67 struct MatrixTraits {};
73 template <
typename Scalar,
74 typename LocalOrdinal,
75 typename GlobalOrdinal,
78 Tpetra::RowMatrix<Scalar,
82 typedef Scalar scalar_t;
83 typedef LocalOrdinal local_ordinal_t;
84 typedef GlobalOrdinal global_ordinal_t;
87 typedef Tpetra::RowMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node> matrix_type;
88 typedef typename matrix_type::impl_scalar_type impl_scalar_type;
90 typedef typename matrix_type::nonconst_global_inds_host_view_type global_host_idx_type;
91 typedef typename matrix_type::nonconst_values_host_view_type global_host_val_type;
93 typedef row_access major_access;
96 template <
typename Scalar,
97 typename LocalOrdinal,
98 typename GlobalOrdinal,
101 Tpetra::CrsMatrix<Scalar,
105 typedef Scalar scalar_t;
106 typedef LocalOrdinal local_ordinal_t;
107 typedef GlobalOrdinal global_ordinal_t;
110 typedef Tpetra::CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node> matrix_type;
111 typedef typename matrix_type::impl_scalar_type impl_scalar_type;
113 typedef typename matrix_type::nonconst_global_inds_host_view_type global_host_idx_type;
114 typedef typename matrix_type::nonconst_values_host_view_type global_host_val_type;
116 typedef row_access major_access;
119 template <
typename Scalar,
120 typename LocalOrdinal,
121 typename DeviceType >
123 KokkosSparse::CrsMatrix<Scalar,
126 typedef Scalar scalar_t;
127 typedef LocalOrdinal local_ordinal_t;
128 typedef Tpetra::Map<>::global_ordinal_type global_ordinal_t;
129 typedef LocalOrdinal global_size_t;
131 typedef KokkosSparse::CrsMatrix<Scalar, LocalOrdinal, DeviceType> matrix_type;
132 typedef Scalar impl_scalar_type;
133 typedef Tpetra::Map<>::node_type node_t;
135 typedef typename matrix_type::HostMirror::index_type global_host_idx_type;
136 typedef typename matrix_type::HostMirror::values_type global_host_val_type;
138 typedef row_access major_access;
141 #ifdef HAVE_AMESOS2_EPETRA
144 struct MatrixTraits<Epetra_RowMatrix> {
145 typedef double scalar_t;
146 typedef double impl_scalar_type;
147 typedef int local_ordinal_t;
148 typedef Tpetra::Map<>::global_ordinal_type global_ordinal_t;
149 typedef Tpetra::Map<>::node_type node_t;
151 typedef Epetra_RowMatrix matrix_type;
152 typedef matrix_type local_matrix_t;
153 typedef int* sparse_ptr_type;
154 typedef int* sparse_idx_type;
155 typedef double* sparse_values_type;
157 typedef Kokkos::View<global_ordinal_t*, Kokkos::HostSpace> global_host_idx_type;
158 typedef Kokkos::View<scalar_t*, Kokkos::HostSpace> global_host_val_type;
160 typedef row_access major_access;
164 struct MatrixTraits<Epetra_CrsMatrix> {
165 typedef double scalar_t;
166 typedef double impl_scalar_type;
167 typedef int local_ordinal_t;
168 typedef Tpetra::Map<>::global_ordinal_type global_ordinal_t;
169 typedef Tpetra::Map<>::node_type node_t;
171 typedef Epetra_CrsMatrix matrix_type;
172 typedef matrix_type local_matrix_t;
173 typedef int* sparse_ptr_type;
174 typedef int* sparse_idx_type;
175 typedef double* sparse_values_type;
177 typedef Kokkos::View<global_ordinal_t*, Kokkos::HostSpace> global_host_idx_type;
178 typedef Kokkos::View<scalar_t*, Kokkos::HostSpace> global_host_val_type;
180 typedef row_access major_access;
194 struct MatrixTraits<Epetra_VbrMatrix> {
195 typedef double scalar_t;
196 typedef double impl_scalar_type;
197 typedef int local_ordinal_t;
198 typedef Tpetra::Map<>::global_ordinal_type global_ordinal_t;
199 typedef Tpetra::Map<>::node_type node_t;
201 typedef Epetra_VbrMatrix matrix_type;
202 typedef matrix_type local_matrix_t;
203 typedef int* sparse_ptr_type;
204 typedef int* sparse_idx_type;
205 typedef double* sparse_values_type;
207 typedef row_access major_access;
214 #endif // AMESOS2_MATRIXTRAITS_HPP
Utility functions for Amesos2.