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 {
67template <
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);
87template <
class Scalar,
91void 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);
99template <
class Scalar,
103void 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);
111template <
class Scalar,
115void 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);
122template <
class Scalar,
126void 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);
135template <
class Scalar,
139struct 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);
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.