1#ifndef DUNE_FEM_AMGXSOLVER_HH
2#define DUNE_FEM_AMGXSOLVER_HH
18#include <AmgXSolver.hpp>
58 const std::string modes [] = {
"dDDI" ,
"dDFI",
"dFFI",
"hDDI",
"hDFI",
"hFFI" };
65 return parameter().template getValue< std::string >(
keyPrefix() +
"amgx.config",
"amgxconfig.json");
74 template<
class DiscreteFunction >
75 class AMGXInverseOperator;
77 template<
class DiscreteFunction >
136 bind( op, preconditioner );
155 amgXSolver_->finalize();
158 BaseType :: unbind();
166 std::string mode =
parameter.solvermode();
167 std::string config =
parameter.solverconfig();
169 amgXSolver_.reset(
new AmgXSolver() );
170 amgXSolver_->initialize(PETSC_COMM_WORLD, mode, config );
174 DUNE_THROW(InvalidStateException,
"AMGXInverseOperator only works with PetscLinearOperator in non-blocked mode!");
180 amgXSolver_->setA( A );
182 DUNE_THROW(InvalidStateException,
"AMGX solver or PETSc not found during cmake config. Please reconfigure!");
190 DUNE_THROW(NotImplemented,
"AMGX solver with matrix free implementations is not supported!");
195 assert( amgXSolver_ );
198 if( dest.space().continuous() )
199 dest.dofVector().clearGhost();
202 Vec& x = *dest.petscVec();
204 amgXSolver_->solve( x, rhs );
207 if( dest.space().continuous() )
215 DUNE_THROW(InvalidStateException,
"AMGX solver or PETSc not found during cmake config. Please reconfigure!");
222 mutable std::unique_ptr< AmgXSolver > amgXSolver_;
Definition: bindguard.hh:11
static ParameterContainer & container()
Definition: io/parameter.hh:193
Definition: io/parameter.hh:551
int getEnum(const std::string &key, const std::string(&values)[n]) const
Definition: reader.hh:225
Definition: amgxsolver.hh:36
AMGXSolverParameter(const SolverParameter &sp)
Definition: amgxsolver.hh:52
virtual std::string solvermode() const
Definition: amgxsolver.hh:56
virtual std::string solverconfig() const
Definition: amgxsolver.hh:63
LocalParameter< SolverParameter, AMGXSolverParameter > BaseType
Definition: amgxsolver.hh:37
AMGXSolverParameter(const std::string &keyPrefix, const ParameterReader ¶meter=Parameter::container())
Definition: amgxsolver.hh:48
AMGXSolverParameter(const ParameterReader ¶meter=Parameter::container())
Definition: amgxsolver.hh:43
AMGX solver context for PETSc Mat and PETSc Vec.
Definition: amgxsolver.hh:104
BaseType::SolverDiscreteFunctionType SolverDiscreteFunctionType
Definition: amgxsolver.hh:111
void init(const AMGXSolverParameter ¶meter)
Definition: amgxsolver.hh:162
AMGXInverseOperator(const AMGXSolverParameter ¶meter=AMGXSolverParameter())
constructor
Definition: amgxsolver.hh:120
int apply(const SolverDiscreteFunctionType &arg, SolverDiscreteFunctionType &dest) const
Definition: amgxsolver.hh:187
void bind(const OperatorType &op)
Definition: amgxsolver.hh:146
AMGXInverseOperator(const AMGXInverseOperator &other)
Definition: amgxsolver.hh:139
void unbind()
Definition: amgxsolver.hh:152
BaseType::PreconditionerType PreconditionerType
Definition: amgxsolver.hh:113
AMGXInverseOperator(const OperatorType &op, const AMGXSolverParameter ¶meter=AMGXSolverParameter())
Definition: amgxsolver.hh:125
BaseType::AssembledOperatorType AssembledOperatorType
Definition: amgxsolver.hh:114
AMGXInverseOperator(const OperatorType &op, PreconditionerType &preconditioner, const AMGXSolverParameter ¶meter=AMGXSolverParameter())
Definition: amgxsolver.hh:132
BaseType::OperatorType OperatorType
Definition: amgxsolver.hh:112
Definition: amgxsolver.hh:79
OperatorType PreconditionerType
Definition: amgxsolver.hh:84
DiscreteFunction DiscreteFunctionType
Definition: amgxsolver.hh:80
PetscDiscreteFunction< typename DiscreteFunction::DiscreteFunctionSpaceType > SolverDiscreteFunctionType
Definition: amgxsolver.hh:81
Dune::Fem::Operator< DiscreteFunction, DiscreteFunction > OperatorType
Definition: amgxsolver.hh:83
OperatorType AssembledOperatorType
Definition: amgxsolver.hh:89
AMGXSolverParameter SolverParameterType
Definition: amgxsolver.hh:94
AMGXInverseOperator< DiscreteFunction > InverseOperatorType
Definition: amgxsolver.hh:92
Definition: inverseoperatorinterface.hh:17
SolverParameterType & parameter() const
Definition: inverseoperatorinterface.hh:127
const OperatorType * operator_
Definition: inverseoperatorinterface.hh:197
Traits::AssembledOperatorType AssembledOperatorType
Definition: inverseoperatorinterface.hh:31
Traits::SolverDiscreteFunctionType SolverDiscreteFunctionType
Definition: inverseoperatorinterface.hh:29
std::shared_ptr< SolverParameterType > parameter_
Definition: inverseoperatorinterface.hh:195
Traits::PreconditionerType PreconditionerType
Definition: inverseoperatorinterface.hh:32
const AssembledOperatorType * assembledOperator_
Definition: inverseoperatorinterface.hh:198
void bind(const OperatorType &op)
store pointer to linear operator
Definition: inverseoperatorinterface.hh:81
Traits::OperatorType OperatorType
Definition: inverseoperatorinterface.hh:30
int iterations() const
return number of iterations used in previous call of application operator
Definition: inverseoperatorinterface.hh:103
Definition: solver/parameter.hh:15
const ParameterReader & parameter() const
Definition: solver/parameter.hh:68
const std::string & keyPrefix() const
Definition: solver/parameter.hh:66
Definition: cachedcommmanager.hh:47