10#ifndef TPETRA_LOCALCRSMATRIXOPERATOR_DEF_HPP
11#define TPETRA_LOCALCRSMATRIXOPERATOR_DEF_HPP
13#include "Tpetra_LocalOperator.hpp"
15#include "KokkosSparse.hpp"
16#include "Teuchos_TestForException.hpp"
17#include "Teuchos_OrdinalTraits.hpp"
21template<
class MultiVectorScalar,
class MatrixScalar,
class Device>
22LocalCrsMatrixOperator<MultiVectorScalar, MatrixScalar, Device>::
23LocalCrsMatrixOperator (
const std::shared_ptr<local_matrix_device_type>& A)
24 : A_ (A), have_A_cusparse(false)
26 const char tfecfFuncName[] =
"LocalCrsMatrixOperator: ";
27 TEUCHOS_TEST_FOR_EXCEPTION_CLASS_FUNC
28 (A_.get () ==
nullptr, std::invalid_argument,
29 "Input matrix A is null.");
32template<
class MultiVectorScalar,
class MatrixScalar,
class Device>
33LocalCrsMatrixOperator<MultiVectorScalar, MatrixScalar, Device>::
34LocalCrsMatrixOperator (
const std::shared_ptr<local_matrix_device_type>& A,
const ordinal_view_type& A_ordinal_rowptrs) :
36 A_cusparse(
"LocalCrsMatrixOperator_cuSPARSE", A->numRows(), A->numCols(), A->nnz(),
37 A->values, A_ordinal_rowptrs, A->graph.entries),
40 const char tfecfFuncName[] =
"LocalCrsMatrixOperator: ";
41 TEUCHOS_TEST_FOR_EXCEPTION_CLASS_FUNC
42 (A_.get () ==
nullptr, std::invalid_argument,
43 "Input matrix A is null.");
46template<
class MultiVectorScalar,
class MatrixScalar,
class Device>
48LocalCrsMatrixOperator<MultiVectorScalar, MatrixScalar, Device>::
49hasTransposeApply ()
const
54template<
class MultiVectorScalar,
class MatrixScalar,
class Device>
56LocalCrsMatrixOperator<MultiVectorScalar, MatrixScalar, Device>::
57apply (Kokkos::View<
const mv_scalar_type**, array_layout,
58 device_type, Kokkos::MemoryTraits<Kokkos::Unmanaged> > X,
59 Kokkos::View<mv_scalar_type**, array_layout,
60 device_type, Kokkos::MemoryTraits<Kokkos::Unmanaged> > Y,
61 const Teuchos::ETransp mode,
62 const mv_scalar_type alpha,
63 const mv_scalar_type beta)
const
65 const bool conjugate = (mode == Teuchos::CONJ_TRANS);
66 const bool transpose = (mode != Teuchos::NO_TRANS);
68#ifdef HAVE_TPETRA_DEBUG
69 const char tfecfFuncName[] =
"apply: ";
71 TEUCHOS_TEST_FOR_EXCEPTION_CLASS_FUNC
72 (X.extent (1) != Y.extent (1), std::runtime_error,
73 "X.extent(1) = " << X.extent (1) <<
" != Y.extent(1) = "
74 << Y.extent (1) <<
".");
77 TEUCHOS_TEST_FOR_EXCEPTION_CLASS_FUNC
78 (
X.data () ==
Y.data () &&
X.data () !=
nullptr,
79 std::runtime_error,
"X and Y may not alias one another.");
83 (
conjugate ? KokkosSparse::ConjugateTranspose :
87 KokkosSparse::spmv (op,
alpha, A_cusparse,
X,
beta,
Y);
97template<
class MultiVectorScalar,
class MatrixScalar,
class Device>
101 Kokkos::View<
const mv_scalar_type**, array_layout,
102 device_type, Kokkos::MemoryTraits<Kokkos::Unmanaged> >
X,
103 Kokkos::View<mv_scalar_type**, array_layout,
104 device_type, Kokkos::MemoryTraits<Kokkos::Unmanaged> >
Y,
105 const Teuchos::ETransp
mode,
106 const mv_scalar_type
alpha,
107 const mv_scalar_type
beta)
const
112template<
class MultiVectorScalar,
class MatrixScalar,
class Device>
113const typename LocalCrsMatrixOperator<MultiVectorScalar, MatrixScalar, Device>::local_matrix_device_type&
131#define TPETRA_LOCALCRSMATRIXOPERATOR_INSTANT(SC,NT) \
132 template class LocalCrsMatrixOperator< SC, SC, NT::device_type >;
136#define TPETRA_LOCALCRSMATRIXOPERATOR_MIXED_INSTANT(SC,MATSC,LO,GO,NT) \
137 template class LocalCrsMatrixOperator< SC, MATSC, NT::device_type >;
Declaration of Tpetra::Details::Behavior, a class that describes Tpetra's behavior.
Struct that holds views of the contents of a CrsMatrix.
Abstract interface for local operators (e.g., matrices and preconditioners).
Namespace Tpetra contains the class and methods constituting the Tpetra library.