MueLu Version of the Day
Loading...
Searching...
No Matches
MueLu_FlatOperator_def.hpp
Go to the documentation of this file.
1// @HEADER
2// *****************************************************************************
3// MueLu: A package for multigrid based preconditioning
4//
5// Copyright 2012 NTESS and the MueLu contributors.
6// SPDX-License-Identifier: BSD-3-Clause
7// *****************************************************************************
8// @HEADER
9
10#ifndef MUELU_FLATOPERATOR_DEF_HPP
11#define MUELU_FLATOPERATOR_DEF_HPP
12
14
15namespace MueLu {
16
17template <class Scalar, class LocalOrdinal, class GlobalOrdinal, class Node>
19 FlatOperator(const Teuchos::RCP<Xpetra::Matrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>> mat,
21 : mat_(mat)
22 , constraint_(constraint) {
23 CheckMaps();
25
26 auto pattern = constraint_->GetPattern();
27 map_ = Xpetra::MapFactory<LocalOrdinal, GlobalOrdinal, Node>::Build(pattern->getRowMap()->lib(),
28 pattern->getGlobalNumEntries(),
29 pattern->getLocalNumEntries(),
30 pattern->getRowMap()->getIndexBase(),
31 pattern->getComm());
32}
33
34template <class Scalar, class LocalOrdinal, class GlobalOrdinal, class Node>
36 apply(const Xpetra::MultiVector<Scalar, LocalOrdinal, GlobalOrdinal, Node> &X,
37 Xpetra::MultiVector<Scalar, LocalOrdinal, GlobalOrdinal, Node> &Y,
38 Teuchos::ETransp mode,
39 Scalar alpha,
40 Scalar beta) const {
41 AllocateTemporaryMatrix();
42
43 TEUCHOS_ASSERT(mode == Teuchos::NO_TRANS);
44 TEUCHOS_ASSERT(alpha == Teuchos::ScalarTraits<Scalar>::one());
45 TEUCHOS_ASSERT(beta == Teuchos::ScalarTraits<Scalar>::zero());
46
47 {
48 auto lclMat = tempMat_->getLocalMatrixDevice();
49 auto lclVec = X.getLocalViewDevice(Tpetra::Access::ReadOnly);
50 TEUCHOS_ASSERT(lclMat.values.extent(0) == lclVec.extent(0));
51 Kokkos::deep_copy(lclMat.values, Kokkos::subview(lclVec, Kokkos::ALL(), 0));
52 }
53
54 RCP<Xpetra::Matrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>> AP;
55 AP = Xpetra::MatrixMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>::Multiply(*mat_, false, *tempMat_, false, AP, GetOStream(Runtime0), true, true);
56 constraint_->AssignMatrixEntriesToVector(*AP, Y);
57}
58} // namespace MueLu
59#endif
MueLu::DefaultScalar Scalar
Constraint space information for the potential prolongator.
virtual void apply(const Xpetra::MultiVector< Scalar, LocalOrdinal, GlobalOrdinal, Node > &X, Xpetra::MultiVector< Scalar, LocalOrdinal, GlobalOrdinal, Node > &Y, Teuchos::ETransp mode=Teuchos::NO_TRANS, Scalar alpha=Teuchos::ScalarTraits< Scalar >::one(), Scalar beta=Teuchos::ScalarTraits< Scalar >::zero()) const
Computes the operator-multivector application.
RCP< Xpetra::Map< LocalOrdinal, GlobalOrdinal, Node > > map_
RCP< MueLu::Constraint< Scalar, LocalOrdinal, GlobalOrdinal, Node > > constraint_
FlatOperator()=default
Namespace for MueLu classes and methods.
@ Runtime0
One-liner description of what is happening.