MueLu
Version of the Day
Toggle main menu visibility
Loading...
Searching...
No Matches
BelosMueLuAdapter.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 BELOS_MUELU_ADAPTER_HPP
11
#define BELOS_MUELU_ADAPTER_HPP
12
13
// TAW: 3/4/2016: we use the Xpetra macros
14
// These are available and Xpetra is prerequisite for MueLu
15
16
#ifdef HAVE_MUELU_AMGX
17
#include "
MueLu_AMGXOperator.hpp
"
18
#endif
19
20
#include <BelosOperatorT.hpp>
21
22
#include "
MueLu_ConfigDefs.hpp
"
23
#include "MueLu_Hierarchy.hpp"
24
25
namespace
Belos
{
26
using
Teuchos::RCP;
27
using
Teuchos::rcpFromRef;
28
29
//
31
32
36
class
MueLuOpFailure
:
public
BelosError {
37
public
:
38
MueLuOpFailure
(
const
std::string& what_arg)
39
: BelosError(what_arg) {}
40
};
41
53
template
<
class
Scalar
,
54
class
LocalOrdinal
= int,
55
class
GlobalOrdinal
=
LocalOrdinal
,
56
class
Node
= Tpetra::KokkosClassic::DefaultNode::DefaultNodeType>
57
class
MueLuOp
:
public
OperatorT<Xpetra::MultiVector<Scalar, LocalOrdinal, GlobalOrdinal, Node> >,
58
public
OperatorT<Tpetra::MultiVector<Scalar, LocalOrdinal, GlobalOrdinal, Node> > {
59
public
:
61
62
64
MueLuOp
(
const
RCP<
MueLu::Hierarchy<Scalar, LocalOrdinal, GlobalOrdinal, Node>
>& H)
65
:
Hierarchy_
(H) {}
66
#ifdef HAVE_MUELU_AMGX
67
MueLuOp
(
const
RCP<
MueLu::AMGXOperator<Scalar, LocalOrdinal, GlobalOrdinal, Node>
>& A)
68
:
AMGX_
(A) {}
69
#endif
71
virtual
~MueLuOp
() {}
73
75
76
82
void
Apply
(
const
Xpetra::MultiVector<Scalar, LocalOrdinal, GlobalOrdinal, Node>& x, Xpetra::MultiVector<Scalar, LocalOrdinal, GlobalOrdinal, Node>& y, ETrans trans = NOTRANS)
const
{
83
TEUCHOS_TEST_FOR_EXCEPTION(trans != NOTRANS,
MueLuOpFailure
,
84
"Belos::MueLuOp::Apply, transpose mode != NOTRANS not supported by MueLu preconditionners."
);
85
86
// This does not matter for Hierarchy, but matters for AMGX
87
y.putScalar(0.0);
88
89
#ifdef HAVE_MUELU_AMGX
90
if
(!
AMGX_
.is_null()) {
91
Tpetra::MultiVector<Scalar, LocalOrdinal, GlobalOrdinal, Node> tX = Xpetra::toTpetra(x);
92
Tpetra::MultiVector<Scalar, LocalOrdinal, GlobalOrdinal, Node> tY = Xpetra::toTpetra(y);
93
94
AMGX_
->apply(tX, tY);
95
}
96
#endif
97
if
(!
Hierarchy_
.is_null())
98
Hierarchy_
->Iterate(x, y, 1,
true
);
99
}
100
101
102
// TO SKIP THE TRAIT IMPLEMENTATION OF XPETRA::MULTIVECTOR
108
void
Apply
(
const
Tpetra::MultiVector<Scalar, LocalOrdinal, GlobalOrdinal, Node>& x, Tpetra::MultiVector<Scalar, LocalOrdinal, GlobalOrdinal, Node>& y, ETrans trans = NOTRANS)
const
{
109
TEUCHOS_TEST_FOR_EXCEPTION(trans != NOTRANS,
MueLuOpFailure
,
110
"Belos::MueLuOp::Apply, transpose mode != NOTRANS not supported by MueLu preconditionners."
);
111
112
// FIXME InitialGuessIsZero currently does nothing in MueLu::Hierarchy.Iterate(), but it matters for AMGX
113
y.putScalar(0.0);
114
115
#ifdef HAVE_MUELU_AMGX
116
if
(!
AMGX_
.is_null())
117
AMGX_
->apply(x, y);
118
#endif
119
120
if
(!
Hierarchy_
.is_null()) {
121
Tpetra::MultiVector<Scalar, LocalOrdinal, GlobalOrdinal, Node>& temp_x =
const_cast<
Tpetra::MultiVector<Scalar, LocalOrdinal, GlobalOrdinal, Node>&
>
(x);
122
123
const
Xpetra::TpetraMultiVector<Scalar, LocalOrdinal, GlobalOrdinal, Node> tX(rcpFromRef(temp_x));
124
Xpetra::TpetraMultiVector<Scalar, LocalOrdinal, GlobalOrdinal, Node> tY(rcpFromRef(y));
125
Hierarchy_
->Iterate(tX, tY, 1,
true
);
126
}
127
}
128
129
private
:
130
RCP<MueLu::Hierarchy<Scalar, LocalOrdinal, GlobalOrdinal, Node> >
Hierarchy_
;
131
#ifdef HAVE_MUELU_AMGX
132
RCP<MueLu::AMGXOperator<Scalar, LocalOrdinal, GlobalOrdinal, Node> >
AMGX_
;
133
#endif
134
};
135
136
}
// namespace Belos
137
138
#endif
// BELOS_MUELU_ADAPTER_HPP
MueLu_AMGXOperator.hpp
MueLu_ConfigDefs.hpp
LocalOrdinal
MueLu::DefaultLocalOrdinal LocalOrdinal
Definition
MueLu_UseDefaultTypes.hpp:13
Scalar
MueLu::DefaultScalar Scalar
Definition
MueLu_UseDefaultTypes.hpp:12
GlobalOrdinal
MueLu::DefaultGlobalOrdinal GlobalOrdinal
Definition
MueLu_UseDefaultTypes.hpp:14
Node
MueLu::DefaultNode Node
Definition
MueLu_UseDefaultTypes.hpp:15
Belos::MueLuOpFailure
MueLuOpFailure is thrown when a return value from an MueLu call on an Xpetra::Operator or MueLu::Hier...
Definition
BelosMueLuAdapter.hpp:36
Belos::MueLuOpFailure::MueLuOpFailure
MueLuOpFailure(const std::string &what_arg)
Definition
BelosMueLuAdapter.hpp:38
Belos::MueLuOp::AMGX_
RCP< MueLu::AMGXOperator< Scalar, LocalOrdinal, GlobalOrdinal, Node > > AMGX_
Definition
BelosMueLuAdapter.hpp:132
Belos::MueLuOp::Apply
void Apply(const Tpetra::MultiVector< Scalar, LocalOrdinal, GlobalOrdinal, Node > &x, Tpetra::MultiVector< Scalar, LocalOrdinal, GlobalOrdinal, Node > &y, ETrans trans=NOTRANS) const
This routine takes the Tpetra::MultiVector x and applies the operator to it resulting in the Tpetra::...
Definition
BelosMueLuAdapter.hpp:108
Belos::MueLuOp::Hierarchy_
RCP< MueLu::Hierarchy< Scalar, LocalOrdinal, GlobalOrdinal, Node > > Hierarchy_
Definition
BelosMueLuAdapter.hpp:130
Belos::MueLuOp::~MueLuOp
virtual ~MueLuOp()
Destructor.
Definition
BelosMueLuAdapter.hpp:71
Belos::MueLuOp::MueLuOp
MueLuOp(const RCP< MueLu::Hierarchy< Scalar, LocalOrdinal, GlobalOrdinal, Node > > &H)
Default constructor.
Definition
BelosMueLuAdapter.hpp:64
Belos::MueLuOp::Apply
void Apply(const Xpetra::MultiVector< Scalar, LocalOrdinal, GlobalOrdinal, Node > &x, Xpetra::MultiVector< Scalar, LocalOrdinal, GlobalOrdinal, Node > &y, ETrans trans=NOTRANS) const
This routine takes the Xpetra::MultiVector x and applies the operator to it resulting in the Xpetra::...
Definition
BelosMueLuAdapter.hpp:82
Belos::MueLuOp::MueLuOp
MueLuOp(const RCP< MueLu::AMGXOperator< Scalar, LocalOrdinal, GlobalOrdinal, Node > > &A)
Definition
BelosMueLuAdapter.hpp:67
MueLu::AMGXOperator
Adapter for AmgX library from Nvidia.
Definition
MueLu_AMGXOperator_decl.hpp:44
MueLu::Hierarchy
Provides methods to build a multigrid hierarchy and apply multigrid cycles.
Definition
MueLu_Hierarchy_decl.hpp:63
Belos
Definition
BelosMueLuAdapter.hpp:25
adapters
belos
BelosMueLuAdapter.hpp
Generated by
1.17.0