42 #ifndef TPETRA_TRIPLEMATRIXMULTIPLY_DECL_HPP 43 #define TPETRA_TRIPLEMATRIXMULTIPLY_DECL_HPP 46 #include <Teuchos_RCP.hpp> 47 #include <Teuchos_Array.hpp> 48 #include "Tpetra_ConfigDefs.hpp" 49 #include "Tpetra_CrsMatrix.hpp" 50 #include "Tpetra_Vector.hpp" 51 #include "TpetraExt_MMHelpers.hpp" 61 namespace TripleMatrixMultiply {
95 template <
class Scalar,
100 const CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>& R,
102 const CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>& A,
104 const CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>& P,
106 CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Ac,
107 bool call_FillComplete_on_result =
true,
108 const std::string& label = std::string(),
109 const Teuchos::RCP<Teuchos::ParameterList>& params = Teuchos::null);
116 template<
class Scalar,
120 void mult_R_A_P_newmatrix(
121 CrsMatrixStruct<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Rview,
122 CrsMatrixStruct<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Aview,
123 CrsMatrixStruct<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Pview,
124 CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Ac,
125 const std::string& label = std::string(),
126 const Teuchos::RCP<Teuchos::ParameterList>& params = Teuchos::null);
129 template<
class Scalar,
133 void mult_PT_A_P_newmatrix(
134 CrsMatrixStruct<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Aview,
135 CrsMatrixStruct<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Pview,
136 CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Ac,
137 const std::string& label = std::string(),
138 const Teuchos::RCP<Teuchos::ParameterList>& params = Teuchos::null);
141 template<
class Scalar,
145 void mult_R_A_P_newmatrix_kernel_wrapper(
146 CrsMatrixStruct<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Rview,
147 CrsMatrixStruct<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Aview,
148 CrsMatrixStruct<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Pview,
149 CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Ac,
150 const std::string& label = std::string(),
151 const Teuchos::RCP<Teuchos::ParameterList>& params = Teuchos::null);
154 template<
class Scalar,
158 void mult_PT_A_P_newmatrix_kernel_wrapper(
159 CrsMatrixStruct<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Aview,
160 CrsMatrixStruct<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Pview,
161 CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Ac,
162 const std::string& label = std::string(),
163 const Teuchos::RCP<Teuchos::ParameterList>& params = Teuchos::null);
166 template<
class Scalar,
170 struct KernelWrappers3MMM_Specialized {
171 static inline void mult_R_A_P_newmatrix_kernel_wrapper(CrsMatrixStruct<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Rview,
172 CrsMatrixStruct<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Aview,
173 CrsMatrixStruct<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Pview,
174 const Teuchos::Array<LocalOrdinal> & Acol2PRow,
175 const Teuchos::Array<LocalOrdinal> & Acol2PRowImport,
176 const Teuchos::Array<LocalOrdinal> & Pcol2Accol,
177 const Teuchos::Array<LocalOrdinal> & PIcol2Accol,
178 CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Ac,
179 Teuchos::RCP<
const Import<LocalOrdinal,GlobalOrdinal,Node> > Acimport,
180 const std::string& label = std::string(),
181 const Teuchos::RCP<Teuchos::ParameterList>& params = Teuchos::null);
183 static inline void mult_PT_A_P_newmatrix_kernel_wrapper(CrsMatrixStruct<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Aview,
184 CrsMatrixStruct<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Pview,
185 const Teuchos::Array<LocalOrdinal> & Acol2PRow,
186 const Teuchos::Array<LocalOrdinal> & Acol2PRowImport,
187 const Teuchos::Array<LocalOrdinal> & Pcol2Accol,
188 const Teuchos::Array<LocalOrdinal> & PIcol2Accol,
189 CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Ac,
190 Teuchos::RCP<
const Import<LocalOrdinal,GlobalOrdinal,Node> > Acimport,
191 const std::string& label = std::string(),
192 const Teuchos::RCP<Teuchos::ParameterList>& params = Teuchos::null);
197 template<
class Scalar,
201 struct KernelWrappers3MMM {
203 static inline void mult_PT_A_P_newmatrix_kernel_wrapper_2pass(CrsMatrixStruct<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Aview,
204 CrsMatrixStruct<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Pview,
205 const Teuchos::Array<LocalOrdinal> & Acol2PRow,
206 const Teuchos::Array<LocalOrdinal> & Acol2PRowImport,
207 const Teuchos::Array<LocalOrdinal> & Pcol2Accol,
208 const Teuchos::Array<LocalOrdinal> & PIcol2Accol,
209 CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Ac,
210 Teuchos::RCP<
const Import<LocalOrdinal,GlobalOrdinal,Node> > Acimport,
211 const std::string& label = std::string(),
212 const Teuchos::RCP<Teuchos::ParameterList>& params = Teuchos::null);
219 #endif // TPETRA_TRIPLEMATRIXMULTIPLY_DECL_HPP Namespace Tpetra contains the class and methods constituting the Tpetra library.
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.