11#ifndef AMESOS2_KOKKOS_CRSMATRIX_MATRIXADAPTER_DEF_HPP
12#define AMESOS2_KOKKOS_CRSMATRIX_MATRIXADAPTER_DEF_HPP
15#include "Amesos2_MatrixAdapter_def.hpp"
17#include "Teuchos_DefaultComm.hpp"
18#include "KokkosSparse_CrsMatrix.hpp"
19#include "Tpetra_Core.hpp"
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)
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
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
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
49 return Teuchos::rcp(
new Teuchos::MpiComm<int> (MPI_COMM_SELF));
51 return Teuchos::rcp(
new Teuchos::SerialComm<int>());
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
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
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>
78 [[maybe_unused]]
const Teuchos::Ptr<
const Tpetra::Map<local_ordinal_t,global_ordinal_t,node_t> > map,
79 [[maybe_unused]] EDistribution distribution
81 TEUCHOS_TEST_FOR_EXCEPTION(
true,
83 "get_impl() not implemented for the Kokkos CrsMatrix adapter yet. "
84 "Please contact the Amesos2 developers." );
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
92 return this->mat_->numRows();
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
100 return this->mat_->numCols();
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
108 return this->mat_->nnz();
111 template <
typename Scalar,
typename LocalOrdinal,
typename ExecutionSpace>
113 ConcreteMatrixAdapter<
114 KokkosSparse::CrsMatrix<Scalar,LocalOrdinal,ExecutionSpace>>::getLocalNNZ_impl()
const
116 return this->mat_->nnz();
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
126 return( Teuchos::null );
129 template <
typename Scalar,
typename LocalOrdinal,
typename ExecutionSpace>
131 ConcreteMatrixAdapter<
132 KokkosSparse::CrsMatrix<Scalar,LocalOrdinal,ExecutionSpace>
133 >::getGlobalRowNNZ_impl(
134 [[maybe_unused]] global_ordinal_t row
136 TEUCHOS_TEST_FOR_EXCEPTION(
true,
138 "getGlobalRowNNZ_impl() not implemented for the Kokkos CrsMatrix adapter yet. "
139 "Please contact the Amesos2 developers." );
142 template <
typename Scalar,
typename LocalOrdinal,
typename ExecutionSpace>
144 ConcreteMatrixAdapter<
145 KokkosSparse::CrsMatrix<Scalar,LocalOrdinal,ExecutionSpace>>::getLocalRowNNZ_impl(local_ordinal_t row)
const
147 TEUCHOS_TEST_FOR_EXCEPTION(
true,
149 "getLocalRowNNZ_impl() not implemented for the Kokkos CrsMatrix adapter yet. "
150 "Please contact the Amesos2 developers." );
153 template <
typename Scalar,
typename LocalOrdinal,
typename ExecutionSpace>
155 ConcreteMatrixAdapter<
156 KokkosSparse::CrsMatrix<Scalar,LocalOrdinal,ExecutionSpace>>::getGlobalColNNZ_impl(global_ordinal_t col)
const
158 TEUCHOS_TEST_FOR_EXCEPTION(
true,
160 "Column access to row-based object not yet supported. "
161 "Please contact the Amesos2 developers." );
164 template <
typename Scalar,
typename LocalOrdinal,
typename ExecutionSpace>
166 ConcreteMatrixAdapter<
167 KokkosSparse::CrsMatrix<Scalar,LocalOrdinal,ExecutionSpace>>::getLocalColNNZ_impl(local_ordinal_t col)
const
169 TEUCHOS_TEST_FOR_EXCEPTION(
true,
171 "Column access to row-based object not yet supported. "
172 "Please contact the Amesos2 developers." );
176 template <
typename Scalar,
typename LocalOrdinal,
typename ExecutionSpace>
177 template <
typename KV_GO,
typename KV_S>
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
187 TEUCHOS_TEST_FOR_EXCEPTION(
true,
189 "getGlobalRowCopy_kokkos_view_impl not implemented for Kokkos CrsMatrix yet. "
190 "Please contact the Amesos2 developers." );
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
199 TEUCHOS_TEST_FOR_EXCEPTION(
true, std::runtime_error,
"KokkosCrsMatrixAdapter has not implemented reindex_impl.");
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>
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
220 template <
typename Scalar,
typename LocalOrdinal,
typename ExecutionSpace>
222 ConcreteMatrixAdapter<
223 KokkosSparse::CrsMatrix<Scalar,LocalOrdinal,ExecutionSpace>
224 >::describe (Teuchos::FancyOStream& os,
225 const Teuchos::EVerbosityLevel verbLevel)
const
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;
Specialization of the ConcreteMatrixAdapter for KokkosSparse::CrsMatrix.