10#ifndef TPETRA_MATRIXMATRIX_EXTRAKERNELS_DECL_HPP 
   11#define TPETRA_MATRIXMATRIX_EXTRAKERNELS_DECL_HPP 
   16namespace MatrixMatrix {
 
   19template <
typename View>
 
   20using UnmanagedView = Kokkos::View<typename View::data_type, typename View::array_layout, typename View::device_type, typename Kokkos::MemoryTraits<Kokkos::Unmanaged> >;
 
   22namespace ExtraKernels {
 
   24template <
class CrsMatrixType>
 
   25size_t C_estimate_nnz_per_row(CrsMatrixType& A, CrsMatrixType& B);
 
   34template <
class InColindArrayType,
 
   35          class InValsArrayType,
 
   39void copy_out_from_thread_memory(
const OutColindType& thread_total_nnz,
 
   40                                 const InColindArrayType& Incolind,
 
   41                                 const InValsArrayType& Invals,
 
   43                                 const double thread_chunk,
 
   44                                 OutRowptrType& Outrowptr,
 
   45                                 OutColindType& Outcolind,
 
   46                                 OutValsType& Outvals);
 
   49#ifdef HAVE_TPETRA_INST_OPENMP 
   50template <
class Scalar, 
class LocalOrdinal, 
class GlobalOrdinal, 
class LocalOrdinalViewType>
 
   51static inline void mult_A_B_newmatrix_LowThreadGustavsonKernel(CrsMatrixStruct<Scalar, LocalOrdinal, GlobalOrdinal, Tpetra::KokkosCompat::KokkosOpenMPWrapperNode>& Aview,
 
   52                                                               CrsMatrixStruct<Scalar, LocalOrdinal, GlobalOrdinal, Tpetra::KokkosCompat::KokkosOpenMPWrapperNode>& Bview,
 
   53                                                               const LocalOrdinalViewType& Acol2Brow,
 
   54                                                               const LocalOrdinalViewType& Acol2Irow,
 
   55                                                               const LocalOrdinalViewType& Bcol2Ccol,
 
   56                                                               const LocalOrdinalViewType& Icol2Ccol,
 
   57                                                               CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Tpetra::KokkosCompat::KokkosOpenMPWrapperNode>& C,
 
   58                                                               Teuchos::RCP<
const Import<LocalOrdinal, GlobalOrdinal, Tpetra::KokkosCompat::KokkosOpenMPWrapperNode> > Cimport,
 
   59                                                               const std::string& label,
 
   60                                                               const Teuchos::RCP<Teuchos::ParameterList>& params);
 
   62template <
class Scalar, 
class LocalOrdinal, 
class GlobalOrdinal, 
class LocalOrdinalViewType>
 
   63static inline void mult_A_B_reuse_LowThreadGustavsonKernel(CrsMatrixStruct<Scalar, LocalOrdinal, GlobalOrdinal, Tpetra::KokkosCompat::KokkosOpenMPWrapperNode>& Aview,
 
   64                                                           CrsMatrixStruct<Scalar, LocalOrdinal, GlobalOrdinal, Tpetra::KokkosCompat::KokkosOpenMPWrapperNode>& Bview,
 
   65                                                           const LocalOrdinalViewType& Acol2Brow,
 
   66                                                           const LocalOrdinalViewType& Acol2Irow,
 
   67                                                           const LocalOrdinalViewType& Bcol2Ccol,
 
   68                                                           const LocalOrdinalViewType& Icol2Ccol,
 
   69                                                           CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Tpetra::KokkosCompat::KokkosOpenMPWrapperNode>& C,
 
   70                                                           Teuchos::RCP<
const Import<LocalOrdinal, GlobalOrdinal, Tpetra::KokkosCompat::KokkosOpenMPWrapperNode> > Cimport,
 
   71                                                           const std::string& label,
 
   72                                                           const Teuchos::RCP<Teuchos::ParameterList>& params);
 
   74template <
class Scalar, 
class LocalOrdinal, 
class GlobalOrdinal, 
class LocalOrdinalViewType>
 
   75static inline void jacobi_A_B_newmatrix_LowThreadGustavsonKernel(Scalar omega,
 
   76                                                                 const Vector<Scalar, LocalOrdinal, GlobalOrdinal, Tpetra::KokkosCompat::KokkosOpenMPWrapperNode>& Dinv,
 
   77                                                                 CrsMatrixStruct<Scalar, LocalOrdinal, GlobalOrdinal, Tpetra::KokkosCompat::KokkosOpenMPWrapperNode>& Aview,
 
   78                                                                 CrsMatrixStruct<Scalar, LocalOrdinal, GlobalOrdinal, Tpetra::KokkosCompat::KokkosOpenMPWrapperNode>& Bview,
 
   79                                                                 const LocalOrdinalViewType& Acol2Brow,
 
   80                                                                 const LocalOrdinalViewType& Acol2Irow,
 
   81                                                                 const LocalOrdinalViewType& Bcol2Ccol,
 
   82                                                                 const LocalOrdinalViewType& Icol2Ccol,
 
   83                                                                 CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Tpetra::KokkosCompat::KokkosOpenMPWrapperNode>& C,
 
   84                                                                 Teuchos::RCP<
const Import<LocalOrdinal, GlobalOrdinal, Tpetra::KokkosCompat::KokkosOpenMPWrapperNode> > Cimport,
 
   85                                                                 const std::string& label,
 
   86                                                                 const Teuchos::RCP<Teuchos::ParameterList>& params);
 
   88template <
class Scalar, 
class LocalOrdinal, 
class GlobalOrdinal, 
class LocalOrdinalViewType>
 
   89static inline void jacobi_A_B_reuse_LowThreadGustavsonKernel(Scalar omega,
 
   90                                                             const Vector<Scalar, LocalOrdinal, GlobalOrdinal, Tpetra::KokkosCompat::KokkosOpenMPWrapperNode>& Dinv,
 
   91                                                             CrsMatrixStruct<Scalar, LocalOrdinal, GlobalOrdinal, Tpetra::KokkosCompat::KokkosOpenMPWrapperNode>& Aview,
 
   92                                                             CrsMatrixStruct<Scalar, LocalOrdinal, GlobalOrdinal, Tpetra::KokkosCompat::KokkosOpenMPWrapperNode>& Bview,
 
   93                                                             const LocalOrdinalViewType& Acol2Brow,
 
   94                                                             const LocalOrdinalViewType& Acol2Irow,
 
   95                                                             const LocalOrdinalViewType& Bcol2Ccol,
 
   96                                                             const LocalOrdinalViewType& Icol2Ccol,
 
   97                                                             CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Tpetra::KokkosCompat::KokkosOpenMPWrapperNode>& C,
 
   98                                                             Teuchos::RCP<
const Import<LocalOrdinal, GlobalOrdinal, Tpetra::KokkosCompat::KokkosOpenMPWrapperNode> > Cimport,
 
   99                                                             const std::string& label,
 
  100                                                             const Teuchos::RCP<Teuchos::ParameterList>& params);
 
  104template <
class Scalar, 
class LocalOrdinal, 
class GlobalOrdinal, 
class Node, 
class LocalOrdinalViewType>
 
  105static inline void jacobi_A_B_newmatrix_MultiplyScaleAddKernel(Scalar omega,
 
  106                                                               const Vector<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Dinv,
 
  107                                                               CrsMatrixStruct<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Aview,
 
  108                                                               CrsMatrixStruct<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Bview,
 
  109                                                               const LocalOrdinalViewType& Acol2rrow,
 
  110                                                               const LocalOrdinalViewType& Acol2Irow,
 
  111                                                               const LocalOrdinalViewType& Bcol2Ccol,
 
  112                                                               const LocalOrdinalViewType& Icol2Ccol,
 
  113                                                               CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>& C,
 
  114                                                               Teuchos::RCP<
const Import<LocalOrdinal, GlobalOrdinal, Node> > Cimport,
 
  115                                                               const std::string& label,
 
  116                                                               const Teuchos::RCP<Teuchos::ParameterList>& params);
 
  119#ifdef HAVE_TPETRA_INST_OPENMP 
  120template <
class Scalar, 
class LocalOrdinal, 
class GlobalOrdinal, 
class LocalOrdinalViewType>
 
  121static inline void mult_R_A_P_newmatrix_LowThreadGustavsonKernel(CrsMatrixStruct<Scalar, LocalOrdinal, GlobalOrdinal, Tpetra::KokkosCompat::KokkosOpenMPWrapperNode>& Rview,
 
  122                                                                 CrsMatrixStruct<Scalar, LocalOrdinal, GlobalOrdinal, Tpetra::KokkosCompat::KokkosOpenMPWrapperNode>& Aview,
 
  123                                                                 CrsMatrixStruct<Scalar, LocalOrdinal, GlobalOrdinal, Tpetra::KokkosCompat::KokkosOpenMPWrapperNode>& Pview,
 
  124                                                                 const LocalOrdinalViewType& Acol2Prow,
 
  125                                                                 const LocalOrdinalViewType& Acol2PIrow,
 
  126                                                                 const LocalOrdinalViewType& Pcol2Accol,
 
  127                                                                 const LocalOrdinalViewType& PIcol2Accol,
 
  128                                                                 CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Tpetra::KokkosCompat::KokkosOpenMPWrapperNode>& Ac,
 
  129                                                                 Teuchos::RCP<
const Import<LocalOrdinal, GlobalOrdinal, Tpetra::KokkosCompat::KokkosOpenMPWrapperNode> > Acimport,
 
  130                                                                 const std::string& label                           = std::string(),
 
  131                                                                 const Teuchos::RCP<Teuchos::ParameterList>& params = Teuchos::null);
 
Namespace Tpetra contains the class and methods constituting the Tpetra library.