Tpetra parallel linear algebra Version of the Day
Loading...
Searching...
No Matches
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
26namespace Tpetra {
27
28namespace TripleMatrixMultiply {
29
69template <class Scalar,
70 class LocalOrdinal,
71 class GlobalOrdinal,
72 class Node>
73void MultiplyRAP(
74 const CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>& R,
75 bool transposeR,
76 const CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>& A,
77 bool transposeA,
78 const CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>& P,
79 bool transposeP,
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);
84
85} // namespace TripleMatrixMultiply
86
87namespace MMdetails {
88
89template <class Scalar,
90 class LocalOrdinal,
91 class GlobalOrdinal,
92 class Node>
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);
100
101template <class Scalar,
102 class LocalOrdinal,
103 class GlobalOrdinal,
104 class Node>
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);
112
113template <class Scalar,
114 class LocalOrdinal,
115 class GlobalOrdinal,
116 class Node>
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);
123
124template <class Scalar,
125 class LocalOrdinal,
126 class GlobalOrdinal,
127 class Node>
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);
134
135// Kernel wrappers struct (for non-specialized kernels)
136// Because C++ doesn't support partial template specialization of functions.
137template <class Scalar,
138 class LocalOrdinal,
139 class GlobalOrdinal,
140 class Node>
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);
152};
153
154} // end namespace MMdetails
155
156} // namespace Tpetra
157
158#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.
Namespace Tpetra contains the class and methods constituting the Tpetra library.