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"
29 namespace TripleMatrixMultiply {
68 template <
class Scalar,
73 const CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>& R,
75 const CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>& A,
77 const CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>& P,
79 CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Ac,
80 bool call_FillComplete_on_result =
true,
81 const std::string& label = std::string(),
82 const Teuchos::RCP<Teuchos::ParameterList>& params = Teuchos::null);
89 template<
class Scalar,
93 void mult_R_A_P_newmatrix(
94 CrsMatrixStruct<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Rview,
95 CrsMatrixStruct<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Aview,
96 CrsMatrixStruct<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Pview,
97 CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Ac,
98 const std::string& label = std::string(),
99 const Teuchos::RCP<Teuchos::ParameterList>& params = Teuchos::null);
101 template<
class Scalar,
105 void mult_R_A_P_reuse(
106 CrsMatrixStruct<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Rview,
107 CrsMatrixStruct<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Aview,
108 CrsMatrixStruct<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Pview,
109 CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Ac,
110 const std::string& label = std::string(),
111 const Teuchos::RCP<Teuchos::ParameterList>& params = Teuchos::null);
113 template<
class Scalar,
117 void mult_PT_A_P_newmatrix(
118 CrsMatrixStruct<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Aview,
119 CrsMatrixStruct<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Pview,
120 CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Ac,
121 const std::string& label = std::string(),
122 const Teuchos::RCP<Teuchos::ParameterList>& params = Teuchos::null);
124 template<
class Scalar,
128 void mult_PT_A_P_reuse(
129 CrsMatrixStruct<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Aview,
130 CrsMatrixStruct<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Pview,
131 CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Ac,
132 const std::string& label = std::string(),
133 const Teuchos::RCP<Teuchos::ParameterList>& params = Teuchos::null);
139 template<
class Scalar,
143 struct KernelWrappers3MMM {
145 static inline void mult_PT_A_P_newmatrix_kernel_wrapper_2pass(CrsMatrixStruct<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Aview,
146 CrsMatrixStruct<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Pview,
147 const Teuchos::Array<LocalOrdinal> & Acol2PRow,
148 const Teuchos::Array<LocalOrdinal> & Acol2PRowImport,
149 const Teuchos::Array<LocalOrdinal> & Pcol2Accol,
150 const Teuchos::Array<LocalOrdinal> & PIcol2Accol,
151 CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Ac,
152 Teuchos::RCP<
const Import<LocalOrdinal,GlobalOrdinal,Node> > Acimport,
153 const std::string& label = std::string(),
154 const Teuchos::RCP<Teuchos::ParameterList>& params = Teuchos::null);
161 #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.