Tpetra parallel linear algebra  Version of the Day
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
TpetraExt_TripleMatrixMultiply_decl.hpp
Go to the documentation of this file.
1 // @HEADER
2 // *****************************************************************************
3 // Tpetra: Templated Linear Algebra Services Package
4 //
5 // Copyright 2008 NTESS and the Tpetra contributors.
6 // SPDX-License-Identifier: BSD-3-Clause
7 // *****************************************************************************
8 // @HEADER
9 
10 #ifndef TPETRA_TRIPLEMATRIXMULTIPLY_DECL_HPP
11 #define TPETRA_TRIPLEMATRIXMULTIPLY_DECL_HPP
12 
13 #include <string>
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"
20 
26 namespace Tpetra {
27 
28 namespace TripleMatrixMultiply {
29 
67 template <class Scalar,
68  class LocalOrdinal,
69  class GlobalOrdinal,
70  class Node>
71 void MultiplyRAP(
72  const CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>& R,
73  bool transposeR,
74  const CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>& A,
75  bool transposeA,
76  const CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>& P,
77  bool transposeP,
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);
82 
83 } // namespace TripleMatrixMultiply
84 
85 namespace MMdetails {
86 
87 template <class Scalar,
88  class LocalOrdinal,
89  class GlobalOrdinal,
90  class Node>
91 void 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);
98 
99 template <class Scalar,
100  class LocalOrdinal,
101  class GlobalOrdinal,
102  class Node>
103 void 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);
110 
111 template <class Scalar,
112  class LocalOrdinal,
113  class GlobalOrdinal,
114  class Node>
115 void 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);
121 
122 template <class Scalar,
123  class LocalOrdinal,
124  class GlobalOrdinal,
125  class Node>
126 void 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);
132 
133 // Kernel wrappers struct (for non-specialized kernels)
134 // Because C++ doesn't support partial template specialization of functions.
135 template <class Scalar,
136  class LocalOrdinal,
137  class GlobalOrdinal,
138  class Node>
139 struct 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);
150 };
151 
152 } // end namespace MMdetails
153 
154 } // namespace Tpetra
155 
156 #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 > &params=Teuchos::null)
Sparse matrix-matrix multiply.