1#ifndef DUNE_FEM_SOLVER_INVERSEOPERATORS_HH
2#define DUNE_FEM_SOLVER_INVERSEOPERATORS_HH
27 template<
class DiscreteFunction,
int method = -1 >
28 class KrylovInverseOperator;
30 template<
class DiscreteFunction,
int method >
45 template<
class DiscreteFunction,
int method >
92 bool preconditioning =
parameter.parameter().template getValue< bool >(
"fem.preconditioning",
false );
94 preconditioning =
parameter.preconditionMethod(
100 template <
class Operator>
118 std::ostream* os =
nullptr;
121 if(
verbose_ && Parameter :: verbose() )
133 for(
int i=0; i<=
parameter_->gmresRestart(); ++i )
135 v_.emplace_back( DiscreteFunction(
"GMRes::v", u.space() ) );
138 v_.emplace_back( DiscreteFunction(
"GMRes::z", u.space() ) );
189 DUNE_THROW(InvalidStateException,
"KrylovInverseOperator: invalid method " <<
method_ );
195 template <
class LinearOperator>
204 bool preconditioning =
parameter.parameter().template getValue< bool >(
"fem.preconditioning",
false );
205 if (!preconditioning)
206 preconditioning =
parameter.preconditionMethod(
227 mutable std::vector< DomainFunctionType >
v_;
238 template<
class DiscreteFunction >
245 template<
class DiscreteFunction >
252 template<
class DiscreteFunction >
259 template<
class DiscreteFunction >
265 template<
class DiscreteFunction >
268 template <
class DiscreteFunctionType,
class OpType >
271 template <
class DiscreteFunctionType,
class OpType >
274 template <
class DiscreteFunctionType,
class OpType >
277 template <
class DiscreteFunctionType,
class OpType >
280 template <
class DiscreteFunctionType,
class OpType >
Definition: bindguard.hh:11
int gmres(Operator &op, Preconditioner *preconditioner, std::vector< DiscreteFunction > &v, DiscreteFunction &u, const DiscreteFunction &b, const int m, const double tolerance, const int maxIterations, const int toleranceCriteria, std::ostream *os=nullptr)
Definition: gmres.hh:120
int cg(Operator &op, Precoditioner *preconditioner, std::vector< DiscreteFunction > &tempMem, DiscreteFunction &x, const DiscreteFunction &b, const double epsilon, const int maxIterations, const int toleranceCriteria, std::ostream *os=nullptr)
Definition: cg.hh:24
int bicgstab(Operator &op, Precoditioner *preconditioner, std::vector< DiscreteFunction > &tempMem, DiscreteFunction &x, const DiscreteFunction &b, const double tolerance, const int maxIterations, const int toleranceCriteria, std::ostream *os=nullptr)
Definition: bicgstab.hh:64
static ParameterContainer & container()
Definition: io/parameter.hh:193
abstract affine-linear operator
Definition: operator.hh:87
abstract matrix operator
Definition: operator.hh:124
Precondtioner, multiplies with inverse of the diagonal works with.
Definition: diagonalpreconditioner.hh:152
Definition: inverseoperatorinterface.hh:17
virtual void setMaxIterations(const int iter)
Definition: inverseoperatorinterface.hh:113
int iterations_
Definition: inverseoperatorinterface.hh:205
const PreconditionerType * preconditioner_
Definition: inverseoperatorinterface.hh:199
SolverParameterType & parameter() const
Definition: inverseoperatorinterface.hh:127
const OperatorType * operator_
Definition: inverseoperatorinterface.hh:197
virtual void setMaxLinearIterations(const int iter)
set number of max linear iterations to be used before an exception is thrown
Definition: inverseoperatorinterface.hh:108
void unbind()
reset all pointers and internal temporary memory
Definition: inverseoperatorinterface.hh:100
bool verbose() const
Definition: inverseoperatorinterface.hh:132
Traits::AssembledOperatorType AssembledOperatorType
Definition: inverseoperatorinterface.hh:31
std::shared_ptr< SolverParameterType > parameter_
Definition: inverseoperatorinterface.hh:195
Traits::PreconditionerType PreconditionerType
Definition: inverseoperatorinterface.hh:32
BaseType::DomainFunctionType DomainFunctionType
Definition: inverseoperatorinterface.hh:26
void bind(const OperatorType &op)
store pointer to linear operator
Definition: inverseoperatorinterface.hh:81
Traits::OperatorType OperatorType
Definition: inverseoperatorinterface.hh:30
BaseType::RangeFunctionType RangeFunctionType
Definition: inverseoperatorinterface.hh:27
Definition: krylovinverseoperators.hh:48
int apply(const DomainFunctionType &u, RangeFunctionType &w) const
Definition: krylovinverseoperators.hh:116
BaseType::AssembledOperatorType AssembledOperatorType
Definition: krylovinverseoperators.hh:58
BaseType::RangeFunctionType RangeFunctionType
Definition: krylovinverseoperators.hh:55
void bind(const Operator &op)
Definition: krylovinverseoperators.hh:101
BaseType::DomainFunctionType DomainFunctionType
Definition: krylovinverseoperators.hh:54
BaseType::PreconditionerType PreconditionerType
Definition: krylovinverseoperators.hh:57
BaseType::OperatorType OperatorType
Definition: krylovinverseoperators.hh:56
const int method_
Definition: krylovinverseoperators.hh:231
bool useDiagonalPreconder_
Definition: krylovinverseoperators.hh:225
KrylovInverseOperator(const SolverParameter ¶meter=SolverParameter(Parameter::container()))
main constructor
Definition: krylovinverseoperators.hh:78
KrylovInverseOperator(const LinearOperator &op, const PreconditionerType *preconditioner, const SolverParameter ¶meter=SolverParameter(Parameter::container()))
Definition: krylovinverseoperators.hh:196
std::unique_ptr< PreconditionerType > precondObj_
Definition: krylovinverseoperators.hh:224
KrylovInverseOperator(const OperatorType &op, const SolverParameter ¶meter=SolverParameter(Parameter::container()))
Definition: krylovinverseoperators.hh:66
std::vector< DomainFunctionType > v_
Definition: krylovinverseoperators.hh:227
const bool verbose_
Definition: krylovinverseoperators.hh:229
KrylovInverseOperator(const OperatorType &op, const PreconditionerType &preconditioner, const SolverParameter ¶meter=SolverParameter(Parameter::container()))
Definition: krylovinverseoperators.hh:72
Definition: krylovinverseoperators.hh:32
KrylovInverseOperator< DiscreteFunction, method > InverseOperatorType
Definition: krylovinverseoperators.hh:40
DiscreteFunction DiscreteFunctionType
Definition: krylovinverseoperators.hh:33
OperatorType PreconditionerType
Definition: krylovinverseoperators.hh:35
SolverParameter SolverParameterType
Definition: krylovinverseoperators.hh:41
OperatorType AssembledOperatorType
Definition: krylovinverseoperators.hh:37
Operator< DiscreteFunction, DiscreteFunction > OperatorType
Definition: krylovinverseoperators.hh:34
DiscreteFunction SolverDiscreteFunctionType
Definition: krylovinverseoperators.hh:38
Definition: solver/parameter.hh:15
static const int none
Definition: solver/parameter.hh:40
static const int cg
Definition: solver/parameter.hh:24
static const int gmres
Definition: solver/parameter.hh:26
static const int bicgstab
Definition: solver/parameter.hh:25
static const int jacobi
Definition: solver/parameter.hh:45