42 #ifndef TPETRA_MATRIXMATRIX_DECL_HPP 43 #define TPETRA_MATRIXMATRIX_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 MatrixMatrix {
93 template <
class Scalar,
98 const CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>& A,
100 const CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>& B,
102 CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>& C,
103 bool call_FillComplete_on_result =
true,
104 const std::string& label = std::string(),
105 const Teuchos::RCP<Teuchos::ParameterList>& params = Teuchos::null);
120 template <
class Scalar,
125 const CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>& A,
128 CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>& B,
161 template <
class Scalar,
165 Teuchos::RCP<CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node> >
166 add (
const Scalar& alpha,
167 const bool transposeA,
168 const CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>& A,
170 const bool transposeB,
171 const CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>& B,
172 const Teuchos::RCP<
const Map<LocalOrdinal, GlobalOrdinal, Node> >& domainMap = Teuchos::null,
173 const Teuchos::RCP<
const Map<LocalOrdinal, GlobalOrdinal, Node> >& rangeMap = Teuchos::null,
174 const Teuchos::RCP<Teuchos::ParameterList>& params = Teuchos::null);
205 template <
class Scalar,
210 const CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>& A,
213 const CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>& B,
216 Teuchos::RCP<CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node> > C);
240 template <
class Scalar,
245 const Vector<Scalar, LocalOrdinal, GlobalOrdinal, Node> & Dinv,
246 const CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>& A,
247 const CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>& B,
248 CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>& C,
249 bool call_FillComplete_on_result =
true,
250 const std::string& label = std::string(),
251 const Teuchos::RCP<Teuchos::ParameterList>& params = Teuchos::null);
258 template<
class Scalar,
262 void mult_AT_B_newmatrix(
263 const CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>& A,
264 const CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>& B,
265 CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>& C,
266 const std::string& label = std::string(),
267 const Teuchos::RCP<Teuchos::ParameterList>& params = Teuchos::null);
270 template<
class Scalar,
275 CrsMatrixStruct<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Aview,
276 CrsMatrixStruct<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Bview,
277 CrsWrapper<Scalar, LocalOrdinal, GlobalOrdinal, Node>& C,
278 const std::string& label = std::string(),
279 const Teuchos::RCP<Teuchos::ParameterList>& params = Teuchos::null);
281 template<
class Scalar,
285 void mult_A_B_newmatrix(
286 CrsMatrixStruct<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Aview,
287 CrsMatrixStruct<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Bview,
288 CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>& C,
289 const std::string& label = std::string(),
290 const Teuchos::RCP<Teuchos::ParameterList>& params = Teuchos::null);
294 template<
class Scalar,
298 void mult_A_B_newmatrix_kernel_wrapper(
299 CrsMatrixStruct<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Aview,
300 CrsMatrixStruct<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Bview,
301 CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>& C,
302 const std::string& label = std::string(),
303 const Teuchos::RCP<Teuchos::ParameterList>& params = Teuchos::null);
306 template<
class Scalar,
311 CrsMatrixStruct<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Aview,
312 CrsMatrixStruct<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Bview,
313 CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>& C,
314 const std::string& label = std::string(),
315 const Teuchos::RCP<Teuchos::ParameterList>& params = Teuchos::null);
321 template<
class Scalar,
325 void jacobi_A_B_newmatrix(
327 const Vector<Scalar, LocalOrdinal, GlobalOrdinal, Node> & Dinv,
328 CrsMatrixStruct<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Aview,
329 CrsMatrixStruct<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Bview,
330 CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>& C,
331 const std::string & label = std::string(),
332 const Teuchos::RCP<Teuchos::ParameterList>& params = Teuchos::null);
334 template<
class Scalar,
338 void jacobi_A_B_reuse(
340 const Vector<Scalar, LocalOrdinal, GlobalOrdinal, Node> & Dinv,
341 CrsMatrixStruct<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Aview,
342 CrsMatrixStruct<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Bview,
343 CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>& C,
344 const std::string & label = std::string(),
345 const Teuchos::RCP<Teuchos::ParameterList>& params = Teuchos::null);
348 template<
class Scalar,
352 void import_and_extract_views(
353 const CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>& M,
354 Teuchos::RCP<
const Map<LocalOrdinal, GlobalOrdinal, Node> > targetMap,
355 CrsMatrixStruct<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Mview,
356 Teuchos::RCP<
const Import<LocalOrdinal,GlobalOrdinal, Node> > prototypeImporter = Teuchos::null,
357 bool userAssertsThereAreNoRemotes =
false,
358 const std::string& label = std::string(),
359 const Teuchos::RCP<Teuchos::ParameterList>& params = Teuchos::null);
361 template<
class Scalar,
365 void setMaxNumEntriesPerRow(
366 CrsMatrixStruct<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Mview);
371 template<
class Scalar,
375 struct KernelWrappers {
376 static inline void mult_A_B_newmatrix_kernel_wrapper(CrsMatrixStruct<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Aview,
377 CrsMatrixStruct<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Bview,
378 const Teuchos::Array<LocalOrdinal> & Acol2Brow,
379 const Teuchos::Array<LocalOrdinal> & Acol2Irow,
380 const Teuchos::Array<LocalOrdinal> & Bcol2Ccol,
381 const Teuchos::Array<LocalOrdinal> & Icol2Ccol,
382 CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>& C,
383 Teuchos::RCP<
const Import<LocalOrdinal,GlobalOrdinal,Node> > Cimport,
384 const std::string& label = std::string(),
385 const Teuchos::RCP<Teuchos::ParameterList>& params = Teuchos::null);
393 #endif // TPETRA_MATRIXMATRIX_DECL_HPP Namespace Tpetra contains the class and methods constituting the Tpetra library.
void Jacobi(Scalar omega, const Vector< Scalar, LocalOrdinal, GlobalOrdinal, Node > &Dinv, const CrsMatrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > &A, const CrsMatrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > &B, CrsMatrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > &C, bool call_FillComplete_on_result=true, const std::string &label=std::string(), const Teuchos::RCP< Teuchos::ParameterList > ¶ms=Teuchos::null)
void Add(const CrsMatrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > &A, bool transposeA, Scalar scalarA, CrsMatrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > &B, Scalar scalarB)
void Multiply(const CrsMatrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > &A, bool transposeA, const CrsMatrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > &B, bool transposeB, CrsMatrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > &C, bool call_FillComplete_on_result=true, const std::string &label=std::string(), const Teuchos::RCP< Teuchos::ParameterList > ¶ms=Teuchos::null)
Sparse matrix-matrix multiply.
Teuchos::RCP< CrsMatrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > > add(const Scalar &alpha, const bool transposeA, const CrsMatrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > &A, const Scalar &beta, const bool transposeB, const CrsMatrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > &B, const Teuchos::RCP< const Map< LocalOrdinal, GlobalOrdinal, Node > > &domainMap=Teuchos::null, const Teuchos::RCP< const Map< LocalOrdinal, GlobalOrdinal, Node > > &rangeMap=Teuchos::null, const Teuchos::RCP< Teuchos::ParameterList > ¶ms=Teuchos::null)
Compute the sparse matrix sum C = scalarA * Op(A) + scalarB * Op(B), where Op(X) is either X or its t...