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"
28namespace TripleMatrixMultiply {
69template <
class Scalar,
74 const CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>& R,
76 const CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>& A,
78 const CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>& P,
80 CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Ac,
81 bool call_FillComplete_on_result =
true,
82 const std::string& label = std::string(),
83 const Teuchos::RCP<Teuchos::ParameterList>& params = Teuchos::null);
89template <
class Scalar,
93void 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);
101template <
class Scalar,
105void 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);
113template <
class Scalar,
117void 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);
124template <
class Scalar,
128void 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);
137template <
class Scalar,
141struct KernelWrappers3MMM {
142 static inline void mult_PT_A_P_newmatrix_kernel_wrapper_2pass(CrsMatrixStruct<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Aview,
143 CrsMatrixStruct<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Pview,
144 const Teuchos::Array<LocalOrdinal>& Acol2PRow,
145 const Teuchos::Array<LocalOrdinal>& Acol2PRowImport,
146 const Teuchos::Array<LocalOrdinal>& Pcol2Accol,
147 const Teuchos::Array<LocalOrdinal>& PIcol2Accol,
148 CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Ac,
149 Teuchos::RCP<
const Import<LocalOrdinal, GlobalOrdinal, Node> > Acimport,
150 const std::string& label = std::string(),
151 const Teuchos::RCP<Teuchos::ParameterList>& params = Teuchos::null);
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.
Namespace Tpetra contains the class and methods constituting the Tpetra library.