Amesos2 - Direct Sparse Solver Interfaces Version of the Day
Amesos2_MatrixTraits.hpp
1// @HEADER
2// *****************************************************************************
3// Amesos2: Templated Direct Sparse Solver Package
4//
5// Copyright 2011 NTESS and the Amesos2 contributors.
6// SPDX-License-Identifier: BSD-3-Clause
7// *****************************************************************************
8// @HEADER
9
10
11#ifndef AMESOS2_MATRIXTRAITS_HPP
12#define AMESOS2_MATRIXTRAITS_HPP
13
14#include "Amesos2_config.h"
15#include "Tpetra_CrsMatrix.hpp"
16#include "Amesos2_Util.hpp"
17
18namespace Amesos2 {
19
20 // The declaration
21 template <class Matrix>
22 struct MatrixTraits {};
23
24 /*******************
25 * Specializations *
26 *******************/
27
28 template < typename Scalar,
29 typename LocalOrdinal,
30 typename GlobalOrdinal,
31 typename Node >
32 struct MatrixTraits<
33 Tpetra::RowMatrix<Scalar,
34 LocalOrdinal,
35 GlobalOrdinal,
36 Node> > {
37 typedef Scalar scalar_t;
38 typedef LocalOrdinal local_ordinal_t;
39 typedef GlobalOrdinal global_ordinal_t;
40 typedef Node node_t;
41
42 typedef Tpetra::RowMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node> matrix_type;
43 typedef typename matrix_type::impl_scalar_type impl_scalar_type;
44
45 typedef typename matrix_type::nonconst_global_inds_host_view_type global_host_idx_type;
46 typedef typename matrix_type::nonconst_values_host_view_type global_host_val_type;
47
48 typedef row_access major_access;
49 };
50
51 template < typename Scalar,
52 typename LocalOrdinal,
53 typename GlobalOrdinal,
54 typename Node >
55 struct MatrixTraits<
56 Tpetra::CrsMatrix<Scalar,
57 LocalOrdinal,
58 GlobalOrdinal,
59 Node> > {
60 typedef Scalar scalar_t;
61 typedef LocalOrdinal local_ordinal_t;
62 typedef GlobalOrdinal global_ordinal_t;
63 typedef Node node_t;
64
65 typedef Tpetra::CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node> matrix_type;
66 typedef typename matrix_type::impl_scalar_type impl_scalar_type;
67
68 typedef typename matrix_type::nonconst_global_inds_host_view_type global_host_idx_type;
69 typedef typename matrix_type::nonconst_values_host_view_type global_host_val_type;
70
71 typedef row_access major_access;
72 };
73
74 template < typename Scalar,
75 typename LocalOrdinal,
76 typename DeviceType >
77 struct MatrixTraits<
78 KokkosSparse::CrsMatrix<Scalar,
79 LocalOrdinal,
80 DeviceType> > {
81 typedef Scalar scalar_t;
82 typedef LocalOrdinal local_ordinal_t;
83 typedef Tpetra::Map<>::global_ordinal_type global_ordinal_t;
84 typedef LocalOrdinal global_size_t;
85
86 typedef KokkosSparse::CrsMatrix<Scalar, LocalOrdinal, DeviceType> matrix_type;
87 typedef Scalar impl_scalar_type;
88 typedef Tpetra::Map<>::node_type node_t;
89
90 typedef typename matrix_type::host_mirror_type::index_type global_host_idx_type;
91 typedef typename matrix_type::host_mirror_type::values_type global_host_val_type;
92
93 typedef row_access major_access;
94 };
95
96}
97
98#endif // AMESOS2_MATRIXTRAITS_HPP
Utility functions for Amesos2.