Advanced Multi-Physics (AMP)
On-Line Documentation
TrilinosMueLuSolver.h
Go to the documentation of this file.
1#ifndef included_AMP_TrilinosMueLuSolver
2#define included_AMP_TrilinosMueLuSolver
3
4#include "AMP/matrices/trilinos/ManagedEpetraMatrix.h"
5#include "AMP/solvers/SolverStrategy.h"
6#include "AMP/solvers/SolverStrategyParameters.h"
7#include "AMP/solvers/trilinos/ml/MLoptions.h"
8
9// Trilinos includes
11#include "MueLu_FactoryManager.hpp"
12#include "MueLu_HierarchyManager_fwd.hpp"
13#include "Teuchos_ParameterList.hpp"
14#include "Xpetra_Matrix.hpp"
15#include "Xpetra_Operator_fwd.hpp"
16#include "Xpetra_Parameters.hpp"
18
19#include <vector>
20
21
22namespace MueLu {
23class EpetraOperator;
24template<typename Scalar, typename LocalOrdinal, typename GlobalOrdinal, typename Node>
26template<typename Scalar, typename LocalOrdinal, typename GlobalOrdinal, typename Node>
28template<typename Scalar, typename LocalOrdinal, typename GlobalOrdinal, typename Node>
30template<typename Scalar, typename LocalOrdinal, typename GlobalOrdinal, typename Node>
32template<typename Scalar, typename LocalOrdinal, typename GlobalOrdinal, typename Node>
34template<typename Scalar, typename LocalOrdinal, typename GlobalOrdinal, typename Node>
36
37using Scalar = double;
38using LocalOrdinal = int;
39using GlobalOrdinal = int;
40using Node = Xpetra::EpetraNode;
41} // namespace MueLu
42
43namespace AMP {
44
45namespace Operator {
46class LinearOperator;
47}
48
49namespace Solver {
50
51
57
65{
66
67public:
72
79 explicit TrilinosMueLuSolver( std::shared_ptr<TrilinosMueLuSolverParameters> parameters );
80
85
86 std::string type() const override { return "TrilinosMueLuSolver"; }
87
89 static std::unique_ptr<SolverStrategy>
90 createSolver( std::shared_ptr<SolverStrategyParameters> solverStrategyParameters )
91 {
92 return std::make_unique<TrilinosMueLuSolver>( solverStrategyParameters );
93 }
94
100 void apply( std::shared_ptr<const AMP::LinearAlgebra::Vector> f,
101 std::shared_ptr<AMP::LinearAlgebra::Vector> u ) override;
102
108 void solveWithHierarchy( std::shared_ptr<const AMP::LinearAlgebra::Vector> f,
109 std::shared_ptr<AMP::LinearAlgebra::Vector> u );
110
114 inline std::shared_ptr<MueLu::EpetraOperator> getMLSolver( void ) { return d_mueluSolver; }
115
125 void initialize( std::shared_ptr<const SolverStrategyParameters> parameters ) override;
126
131 void registerOperator( std::shared_ptr<AMP::Operator::Operator> op ) override;
132
138 void resetOperator( std::shared_ptr<const AMP::Operator::OperatorParameters> params ) override;
139
148 void reset( std::shared_ptr<SolverStrategyParameters> params ) override;
149
150protected:
151 void reSolveWithLU( std::shared_ptr<const AMP::LinearAlgebra::Vector> f,
152 std::shared_ptr<AMP::LinearAlgebra::Vector> u );
153
154 void getFromInput( std::shared_ptr<const AMP::Database> db );
155
158
161
164
170
171 Teuchos::ParameterList &getSmootherParameters( const int level );
172 MueLu::MsgType getVerbosityLevel();
173
174private:
175 bool d_bUseEpetra = true;
176 bool d_build_hierarchy = false;
178 true;
179#if 0
180 // ifpack related -- could be used in future
181 bool d_construct_partition = false;
182#endif
183 bool d_bCreationPhase = false;
184 bool d_bRobustMode = false;
185
187
188 size_t d_maxLevels;
189
190 std::string d_smoother_type;
191
192 std::shared_ptr<MueLu::EpetraOperator> d_mueluSolver;
193
194 std::shared_ptr<AMP::LinearAlgebra::ManagedEpetraMatrix> d_matrix;
195 Teuchos::ParameterList d_MueLuParameterList;
196
199
202
204 MueLu::FactoryManager<SC, LO, GO, NO> d_factoryManager;
206 std::vector<Teuchos::RCP<MueLu::FactoryManager<SC, LO, GO, NO>>> d_levelFactoryManager;
207};
208} // namespace Solver
209} // namespace AMP
210
211#endif
Provides C++ wrapper around MPI routines.
Definition AMP_MPI.h:63
std::shared_ptr< AMP::Solver::SolverStrategy > shared_ptr
Teuchos::ParameterList d_MueLuParameterList
Teuchos::RCP< MueLu::Hierarchy< SC, LO, GO, NO > > d_mueluHierarchy
AMG hierarchy.
std::shared_ptr< AMP::LinearAlgebra::ManagedEpetraMatrix > d_matrix
Teuchos::RCP< MueLu::SaPFactory< SC, LO, GO, NO > > getSaPFactory(void)
bool d_build_hierarchy_from_defaults
whether to explicitly build the hierarchy
TrilinosMueLuSolver(std::shared_ptr< TrilinosMueLuSolverParameters > parameters)
bool d_build_hierarchy
whether we are using Epetra
void buildHierarchyByLevel(void)
build the hierarchy level by level, potentially customizing each level
Teuchos::RCP< MueLu::SmootherFactory< SC, LO, GO, NO > > getSmootherFactory(const int level)
bool d_bCreationPhase
build the hierarchy using the defaults constructed by MueLu
void resetOperator(std::shared_ptr< const AMP::Operator::OperatorParameters > params) override
MueLu::MsgType getVerbosityLevel()
void registerOperator(std::shared_ptr< AMP::Operator::Operator > op) override
std::string d_smoother_type
maximum number of levels
void solveWithHierarchy(std::shared_ptr< const AMP::LinearAlgebra::Vector > f, std::shared_ptr< AMP::LinearAlgebra::Vector > u)
AMP_MPI d_comm
use a direct solver if the MG solve fails to converge
Teuchos::RCP< MueLu::HierarchyManager< SC, LO, GO, NO > > d_mueluHierarchyManager
manager that creates hierarchy
Teuchos::RCP< Xpetra::Matrix< SC, LO, GO, NO > > getXpetraMatrix()
utility function to extract Xpetra Matrix from AMP LinearOperator
std::shared_ptr< MueLu::EpetraOperator > d_mueluSolver
key for creating different smoothers
Teuchos::RCP< MueLu::SmootherFactory< SC, LO, GO, NO > > getCoarseSolverFactory(void)
std::vector< Teuchos::RCP< MueLu::FactoryManager< SC, LO, GO, NO > > > d_levelFactoryManager
factory manager for MueLu components by level
Teuchos::ParameterList & getSmootherParameters(const int level)
static std::unique_ptr< SolverStrategy > createSolver(std::shared_ptr< SolverStrategyParameters > solverStrategyParameters)
static create routine that is used by SolverFactory
void reset(std::shared_ptr< SolverStrategyParameters > params) override
void reSolveWithLU(std::shared_ptr< const AMP::LinearAlgebra::Vector > f, std::shared_ptr< AMP::LinearAlgebra::Vector > u)
void buildHierarchyFromDefaults(void)
build the hierarchy using the defaults constructed by MueLu
void initialize(std::shared_ptr< const SolverStrategyParameters > parameters) override
MueLu::FactoryManager< SC, LO, GO, NO > d_factoryManager
factory manager for MueLu components
Teuchos::RCP< MueLu::TransPFactory< SC, LO, GO, NO > > getRFactory(void)
Teuchos::RCP< MueLu::TentativePFactory< SC, LO, GO, NO > > getTentativePFactory(void)
std::string type() const override
Return the name of the solver.
void getFromInput(std::shared_ptr< const AMP::Database > db)
std::shared_ptr< MueLu::EpetraOperator > getMLSolver(void)
bool d_bRobustMode
set to true if the solver is yet to be initialized
void apply(std::shared_ptr< const AMP::LinearAlgebra::Vector > f, std::shared_ptr< AMP::LinearAlgebra::Vector > u) override
#define DISABLE_WARNINGS
Re-enable warnings.
#define ENABLE_WARNINGS
Suppress all warnings.
MueLu::GlobalOrdinal GO
MueLu::LocalOrdinal LO
MueLu::Scalar SC
Xpetra::EpetraNode Node



Advanced Multi-Physics (AMP)
Oak Ridge National Laboratory
Idaho National Laboratory
Los Alamos National Laboratory
This page automatically produced from the
source code by doxygen
Last updated: Tue Mar 10 2026 13:06:41.
Comments on this page