10 #ifndef TPETRA_TRIPLEMATRIXMULTIPLY_DECL_HPP
11 #define TPETRA_TRIPLEMATRIXMULTIPLY_DECL_HPP
14 #include <Teuchos_RCP.hpp>
15 #include <Teuchos_Array.hpp>
16 #include "Tpetra_ConfigDefs.hpp"
17 #include "Tpetra_CrsMatrix.hpp"
18 #include "Tpetra_Vector.hpp"
19 #include "TpetraExt_MMHelpers.hpp"
28 namespace TripleMatrixMultiply {
67 template <
class Scalar,
72 const CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>& R,
74 const CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>& A,
76 const CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>& P,
78 CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Ac,
79 bool call_FillComplete_on_result =
true,
80 const std::string& label = std::string(),
81 const Teuchos::RCP<Teuchos::ParameterList>& params = Teuchos::null);
87 template <
class Scalar,
91 void mult_R_A_P_newmatrix(
92 CrsMatrixStruct<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Rview,
93 CrsMatrixStruct<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Aview,
94 CrsMatrixStruct<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Pview,
95 CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Ac,
96 const std::string& label = std::string(),
97 const Teuchos::RCP<Teuchos::ParameterList>& params = Teuchos::null);
99 template <
class Scalar,
103 void mult_R_A_P_reuse(
104 CrsMatrixStruct<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Rview,
105 CrsMatrixStruct<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Aview,
106 CrsMatrixStruct<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Pview,
107 CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Ac,
108 const std::string& label = std::string(),
109 const Teuchos::RCP<Teuchos::ParameterList>& params = Teuchos::null);
111 template <
class Scalar,
115 void mult_PT_A_P_newmatrix(
116 CrsMatrixStruct<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Aview,
117 CrsMatrixStruct<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Pview,
118 CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Ac,
119 const std::string& label = std::string(),
120 const Teuchos::RCP<Teuchos::ParameterList>& params = Teuchos::null);
122 template <
class Scalar,
126 void mult_PT_A_P_reuse(
127 CrsMatrixStruct<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Aview,
128 CrsMatrixStruct<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Pview,
129 CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Ac,
130 const std::string& label = std::string(),
131 const Teuchos::RCP<Teuchos::ParameterList>& params = Teuchos::null);
135 template <
class Scalar,
139 struct KernelWrappers3MMM {
140 static inline void mult_PT_A_P_newmatrix_kernel_wrapper_2pass(CrsMatrixStruct<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Aview,
141 CrsMatrixStruct<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Pview,
142 const Teuchos::Array<LocalOrdinal>& Acol2PRow,
143 const Teuchos::Array<LocalOrdinal>& Acol2PRowImport,
144 const Teuchos::Array<LocalOrdinal>& Pcol2Accol,
145 const Teuchos::Array<LocalOrdinal>& PIcol2Accol,
146 CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Ac,
147 Teuchos::RCP<
const Import<LocalOrdinal, GlobalOrdinal, Node> > Acimport,
148 const std::string& label = std::string(),
149 const Teuchos::RCP<Teuchos::ParameterList>& params = Teuchos::null);
156 #endif // TPETRA_TRIPLEMATRIXMULTIPLY_DECL_HPP
void MultiplyRAP(const CrsMatrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > &R, bool transposeR, const CrsMatrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > &A, bool transposeA, const CrsMatrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > &P, bool transposeP, CrsMatrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > &Ac, bool call_FillComplete_on_result=true, const std::string &label=std::string(), const Teuchos::RCP< Teuchos::ParameterList > ¶ms=Teuchos::null)
Sparse matrix-matrix multiply.