Amesos2 - Direct Sparse Solver Interfaces Version of the Day
Amesos2_KokkosCrsMatrix_MatrixAdapter_def.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_KOKKOS_CRSMATRIX_MATRIXADAPTER_DEF_HPP
12#define AMESOS2_KOKKOS_CRSMATRIX_MATRIXADAPTER_DEF_HPP
13
15#include "Amesos2_MatrixAdapter_def.hpp"
16
17#include "Teuchos_DefaultComm.hpp"
18#include "KokkosSparse_CrsMatrix.hpp"
19#include "Tpetra_Core.hpp"
20
21namespace Amesos2 {
22
23 template <typename Scalar, typename LocalOrdinal, typename ExecutionSpace>
24 ConcreteMatrixAdapter<KokkosSparse::CrsMatrix<Scalar,LocalOrdinal,ExecutionSpace>>::ConcreteMatrixAdapter(Teuchos::RCP<matrix_t> m)
25 : MatrixAdapter<KokkosSparse::CrsMatrix<Scalar,LocalOrdinal,ExecutionSpace>>(m)
26 {
27
28 }
29
30 template <typename Scalar, typename LocalOrdinal, typename ExecutionSpace>
31 typename ConcreteMatrixAdapter<KokkosSparse::CrsMatrix<Scalar,LocalOrdinal,ExecutionSpace>>::global_size_t
32 ConcreteMatrixAdapter<KokkosSparse::CrsMatrix<Scalar,LocalOrdinal,ExecutionSpace>>::getRowIndexBase() const
33 {
34 return 0;
35 }
36
37 template <typename Scalar, typename LocalOrdinal, typename ExecutionSpace>
38 typename ConcreteMatrixAdapter<KokkosSparse::CrsMatrix<Scalar,LocalOrdinal,ExecutionSpace>>::global_size_t
39 ConcreteMatrixAdapter<KokkosSparse::CrsMatrix<Scalar,LocalOrdinal,ExecutionSpace>>::getColumnIndexBase() const
40 {
41 return 0;
42 }
43
44 template <typename Scalar, typename LocalOrdinal, typename ExecutionSpace>
45 const Teuchos::RCP<const Teuchos::Comm<int> >
46 ConcreteMatrixAdapter<KokkosSparse::CrsMatrix<Scalar,LocalOrdinal,ExecutionSpace>>::getComm_impl() const
47 {
48 #ifdef HAVE_MPI
49 return Teuchos::rcp(new Teuchos::MpiComm<int> (MPI_COMM_SELF));
50 #else
51 return Teuchos::rcp(new Teuchos::SerialComm<int>());
52 #endif
53 }
54
55 template <typename Scalar, typename LocalOrdinal, typename ExecutionSpace>
56 const Teuchos::RCP<const Tpetra::Map<typename MatrixTraits<KokkosSparse::CrsMatrix<Scalar,LocalOrdinal,ExecutionSpace>>::local_ordinal_t,
57 typename MatrixTraits<KokkosSparse::CrsMatrix<Scalar,LocalOrdinal,ExecutionSpace>>::global_ordinal_t,
58 typename MatrixTraits<KokkosSparse::CrsMatrix<Scalar,LocalOrdinal,ExecutionSpace>>::node_t> >
59 ConcreteMatrixAdapter<KokkosSparse::CrsMatrix<Scalar,LocalOrdinal,ExecutionSpace>>::getRowMap_impl() const
60 {
61 return Teuchos::null; // not going to use this right now - serial
62 }
63
64 template <typename Scalar, typename LocalOrdinal, typename ExecutionSpace>
65 const Teuchos::RCP<const Tpetra::Map<typename MatrixTraits<KokkosSparse::CrsMatrix<Scalar,LocalOrdinal,ExecutionSpace>>::local_ordinal_t,
66 typename MatrixTraits<KokkosSparse::CrsMatrix<Scalar,LocalOrdinal,ExecutionSpace>>::global_ordinal_t,
67 typename MatrixTraits<KokkosSparse::CrsMatrix<Scalar,LocalOrdinal,ExecutionSpace>>::node_t> >
68 ConcreteMatrixAdapter<KokkosSparse::CrsMatrix<Scalar,LocalOrdinal,ExecutionSpace>>::getColMap_impl() const
69 {
70 return Teuchos::null; // not going to use this right now - serial
71 }
72
73 template <typename Scalar, typename LocalOrdinal, typename ExecutionSpace>
74 Teuchos::RCP<const MatrixAdapter<KokkosSparse::CrsMatrix<Scalar,LocalOrdinal,ExecutionSpace> > >
75 ConcreteMatrixAdapter<
76 KokkosSparse::CrsMatrix<Scalar,LocalOrdinal,ExecutionSpace>
77 >::get_impl(
78 [[maybe_unused]] const Teuchos::Ptr<const Tpetra::Map<local_ordinal_t,global_ordinal_t,node_t> > map,
79 [[maybe_unused]] EDistribution distribution
80 ) const {
81 TEUCHOS_TEST_FOR_EXCEPTION( true,
82 std::runtime_error,
83 "get_impl() not implemented for the Kokkos CrsMatrix adapter yet. "
84 "Please contact the Amesos2 developers." );
85 }
86
87 template <typename Scalar, typename LocalOrdinal, typename ExecutionSpace>
88 typename ConcreteMatrixAdapter<KokkosSparse::CrsMatrix<Scalar,LocalOrdinal,ExecutionSpace>>::global_size_t
89 ConcreteMatrixAdapter<
90 KokkosSparse::CrsMatrix<Scalar,LocalOrdinal,ExecutionSpace>>::getGlobalNumRows_impl() const
91 {
92 return this->mat_->numRows();
93 }
94
95 template <typename Scalar, typename LocalOrdinal, typename ExecutionSpace>
96 typename ConcreteMatrixAdapter<KokkosSparse::CrsMatrix<Scalar,LocalOrdinal,ExecutionSpace>>::global_size_t
97 ConcreteMatrixAdapter<
98 KokkosSparse::CrsMatrix<Scalar,LocalOrdinal,ExecutionSpace>>::getGlobalNumCols_impl() const
99 {
100 return this->mat_->numCols();
101 }
102
103 template <typename Scalar, typename LocalOrdinal, typename ExecutionSpace>
104 typename ConcreteMatrixAdapter<KokkosSparse::CrsMatrix<Scalar,LocalOrdinal,ExecutionSpace>>::global_size_t
105 ConcreteMatrixAdapter<
106 KokkosSparse::CrsMatrix<Scalar,LocalOrdinal,ExecutionSpace>>::getGlobalNNZ_impl() const
107 {
108 return this->mat_->nnz();
109 }
110
111 template <typename Scalar, typename LocalOrdinal, typename ExecutionSpace>
112 size_t
113 ConcreteMatrixAdapter<
114 KokkosSparse::CrsMatrix<Scalar,LocalOrdinal,ExecutionSpace>>::getLocalNNZ_impl() const
115 {
116 return this->mat_->nnz();
117 }
118
119 template <typename Scalar, typename LocalOrdinal, typename ExecutionSpace>
120 const Teuchos::RCP<const Tpetra::Map<typename MatrixTraits<KokkosSparse::CrsMatrix<Scalar,LocalOrdinal,ExecutionSpace>>::local_ordinal_t,
121 typename MatrixTraits<KokkosSparse::CrsMatrix<Scalar,LocalOrdinal,ExecutionSpace>>::global_ordinal_t,
122 typename MatrixTraits<KokkosSparse::CrsMatrix<Scalar,LocalOrdinal,ExecutionSpace>>::node_t> >
123 ConcreteMatrixAdapter<
124 KokkosSparse::CrsMatrix<Scalar,LocalOrdinal,ExecutionSpace>>::getMap_impl() const
125 {
126 return( Teuchos::null );
127 }
128
129 template <typename Scalar, typename LocalOrdinal, typename ExecutionSpace>
130 size_t
131 ConcreteMatrixAdapter<
132 KokkosSparse::CrsMatrix<Scalar,LocalOrdinal,ExecutionSpace>
133 >::getGlobalRowNNZ_impl(
134 [[maybe_unused]] global_ordinal_t row
135 ) const {
136 TEUCHOS_TEST_FOR_EXCEPTION( true,
137 std::runtime_error,
138 "getGlobalRowNNZ_impl() not implemented for the Kokkos CrsMatrix adapter yet. "
139 "Please contact the Amesos2 developers." );
140 }
141
142 template <typename Scalar, typename LocalOrdinal, typename ExecutionSpace>
143 size_t
144 ConcreteMatrixAdapter<
145 KokkosSparse::CrsMatrix<Scalar,LocalOrdinal,ExecutionSpace>>::getLocalRowNNZ_impl(local_ordinal_t row) const
146 {
147 TEUCHOS_TEST_FOR_EXCEPTION( true,
148 std::runtime_error,
149 "getLocalRowNNZ_impl() not implemented for the Kokkos CrsMatrix adapter yet. "
150 "Please contact the Amesos2 developers." );
151 }
152
153 template <typename Scalar, typename LocalOrdinal, typename ExecutionSpace>
154 size_t
155 ConcreteMatrixAdapter<
156 KokkosSparse::CrsMatrix<Scalar,LocalOrdinal,ExecutionSpace>>::getGlobalColNNZ_impl(global_ordinal_t col) const
157 {
158 TEUCHOS_TEST_FOR_EXCEPTION( true,
159 std::runtime_error,
160 "Column access to row-based object not yet supported. "
161 "Please contact the Amesos2 developers." );
162 }
163
164 template <typename Scalar, typename LocalOrdinal, typename ExecutionSpace>
165 size_t
166 ConcreteMatrixAdapter<
167 KokkosSparse::CrsMatrix<Scalar,LocalOrdinal,ExecutionSpace>>::getLocalColNNZ_impl(local_ordinal_t col) const
168 {
169 TEUCHOS_TEST_FOR_EXCEPTION( true,
170 std::runtime_error,
171 "Column access to row-based object not yet supported. "
172 "Please contact the Amesos2 developers." );
173 }
174
175 // implementation functions
176 template <typename Scalar, typename LocalOrdinal, typename ExecutionSpace>
177 template <typename KV_GO, typename KV_S>
178 void
179 ConcreteMatrixAdapter<
180 KokkosSparse::CrsMatrix<Scalar,LocalOrdinal,ExecutionSpace>
181 >::getGlobalRowCopy_kokkos_view_impl(
182 [[maybe_unused]] global_ordinal_t row,
183 [[maybe_unused]] KV_GO & indices,
184 [[maybe_unused]] KV_S & vals,
185 [[maybe_unused]] size_t& nnz
186 ) const {
187 TEUCHOS_TEST_FOR_EXCEPTION( true,
188 std::runtime_error,
189 "getGlobalRowCopy_kokkos_view_impl not implemented for Kokkos CrsMatrix yet. "
190 "Please contact the Amesos2 developers." );
191 }
192
193 template <typename Scalar, typename LocalOrdinal, typename ExecutionSpace>
194 Teuchos::RCP<const MatrixAdapter<KokkosSparse::CrsMatrix<Scalar,LocalOrdinal,ExecutionSpace>>>
195 ConcreteMatrixAdapter<
196 KokkosSparse::CrsMatrix<Scalar,LocalOrdinal,ExecutionSpace>
197 >::reindex_impl(Teuchos::RCP<const map_t> &contigRowMap, Teuchos::RCP<const map_t> &contigColMap, const EPhase current_phase) const
198 {
199 TEUCHOS_TEST_FOR_EXCEPTION(true, std::runtime_error, "KokkosCrsMatrixAdapter has not implemented reindex_impl.");
200 return RCP (this);
201 }
202
203 template <typename Scalar, typename LocalOrdinal, typename ExecutionSpace>
204 template<typename KV_S, typename KV_GO, typename KV_GS, typename host_ordinal_type_array, typename host_scalar_type_array>
205 LocalOrdinal
206 ConcreteMatrixAdapter<
207 KokkosSparse::CrsMatrix<Scalar,LocalOrdinal,ExecutionSpace>
208 >::gather_impl(KV_S& nzvals, KV_GO& indices, KV_GS& pointers,
209 host_ordinal_type_array &perm_g2l,
210 host_ordinal_type_array &recvCountRows, host_ordinal_type_array &recvDisplRows,
211 host_ordinal_type_array &recvCounts, host_ordinal_type_array &recvDispls,
212 host_ordinal_type_array &transpose_map, host_scalar_type_array &nzvals_t,
213 bool column_major, EPhase current_phase) const
214 {
215 //TEUCHOS_TEST_FOR_EXCEPTION(true, std::runtime_error, "KokkosCrsMatrixAdapter has not been implemented gather_impl.");
216 return -1;
217 }
218
219
220 template <typename Scalar, typename LocalOrdinal, typename ExecutionSpace>
221 void
222 ConcreteMatrixAdapter<
223 KokkosSparse::CrsMatrix<Scalar,LocalOrdinal,ExecutionSpace>
224 >::describe (Teuchos::FancyOStream& os,
225 const Teuchos::EVerbosityLevel verbLevel) const
226 {
227 size_t m = this->mat_->numRows();
228 size_t n = this->mat_->numCols();
229 os << " KokkosSparse::CrsMatrix(" << std::to_string(m) << " x " << std::to_string(n) << ")";
230 os << " of type " << std::string(typeid(Scalar).name()) << std::endl;
231 }
232} // end namespace Amesos2
233
234#endif // AMESOS2_KOKKOS_CRSMATRIX_MATRIXADAPTER_DEF_HPP
Specialization of the ConcreteMatrixAdapter for KokkosSparse::CrsMatrix.