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
67template <class Scalar,
68 class LocalOrdinal,
69 class GlobalOrdinal,
70 class Node>
71void 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
85namespace MMdetails {
86
87template <class Scalar,
88 class LocalOrdinal,
89 class GlobalOrdinal,
90 class Node>
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);
98
99template <class Scalar,
100 class LocalOrdinal,
101 class GlobalOrdinal,
102 class Node>
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);
110
111template <class Scalar,
112 class LocalOrdinal,
113 class GlobalOrdinal,
114 class Node>
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);
121
122template <class Scalar,
123 class LocalOrdinal,
124 class GlobalOrdinal,
125 class Node>
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);
132
133// Kernel wrappers struct (for non-specialized kernels)
134// Because C++ doesn't support partial template specialization of functions.
135template <class Scalar,
136 class LocalOrdinal,
137 class GlobalOrdinal,
138 class Node>
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);
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.
Namespace Tpetra contains the class and methods constituting the Tpetra library.