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 
21 
27 namespace Tpetra {
28 
29  namespace TripleMatrixMultiply {
30 
68  template <class Scalar,
69  class LocalOrdinal,
70  class GlobalOrdinal,
71  class Node>
72  void MultiplyRAP(
73  const CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>& R,
74  bool transposeR,
75  const CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>& A,
76  bool transposeA,
77  const CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>& P,
78  bool transposeP,
79  CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Ac,
80  bool call_FillComplete_on_result = true,
81  const std::string& label = std::string(),
82  const Teuchos::RCP<Teuchos::ParameterList>& params = Teuchos::null);
83 
84 
85  } // namespace TripleMatrixMultiply
86 
87  namespace MMdetails{
88 
89  template<class Scalar,
90  class LocalOrdinal,
91  class GlobalOrdinal,
92  class Node>
93  void 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);
100 
101  template<class Scalar,
102  class LocalOrdinal,
103  class GlobalOrdinal,
104  class Node>
105  void 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);
112 
113  template<class Scalar,
114  class LocalOrdinal,
115  class GlobalOrdinal,
116  class Node>
117  void 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);
123 
124  template<class Scalar,
125  class LocalOrdinal,
126  class GlobalOrdinal,
127  class Node>
128  void 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);
134 
135 
136 
137  // Kernel wrappers struct (for non-specialized kernels)
138  // Because C++ doesn't support partial template specialization of functions.
139  template<class Scalar,
140  class LocalOrdinal,
141  class GlobalOrdinal,
142  class Node>
143  struct KernelWrappers3MMM {
144 
145  static inline void mult_PT_A_P_newmatrix_kernel_wrapper_2pass(CrsMatrixStruct<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Aview,
146  CrsMatrixStruct<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Pview,
147  const Teuchos::Array<LocalOrdinal> & Acol2PRow,
148  const Teuchos::Array<LocalOrdinal> & Acol2PRowImport,
149  const Teuchos::Array<LocalOrdinal> & Pcol2Accol,
150  const Teuchos::Array<LocalOrdinal> & PIcol2Accol,
151  CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Ac,
152  Teuchos::RCP<const Import<LocalOrdinal,GlobalOrdinal,Node> > Acimport,
153  const std::string& label = std::string(),
154  const Teuchos::RCP<Teuchos::ParameterList>& params = Teuchos::null);
155  };
156 
157  }//end namespace MMdetails
158 
159 } // end of Tpetra namespace
160 
161 #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.