KASKADE 7 development version
opt_interface.hh
Go to the documentation of this file.
1#ifndef OPT_INTERFACE_HH
2#define OPT_INTERFACE_HH
3
4#include <memory>
5#include <vector>
6#include "dune/common/fvector.hh"
7#include "dune/istl/bvector.hh"
8#include "dune/istl/matrix.hh"
9
10namespace Kaskade
11{
12
13 class LagrangeLinearization;
14 class AbstractFunctionSpaceElement;
15 class AbstractLinearization;
16 class AbstractErrorEstimate;
17
20 {
21 public:
23
25
27 int basis(std::vector<std::shared_ptr<AbstractFunctionSpaceElement> >& corrections,
28 LagrangeLinearization& linearization,
29 AbstractFunctionSpaceElement const& normalStep,
30 double nu0, AbstractFunctionSpaceElement* residual=nullptr)
31 { return computeBasis(corrections, linearization, normalStep, nu0, residual); }
32
34 virtual void setRelativeAccuracy(double accuracy) = 0;
35
37 virtual int nSolutionVectors() const = 0;
38
40
42 virtual bool getNorms(Dune::Matrix<field_type>& M) const { return false; }
43
44 virtual bool localConvergenceLikely() { return true; }
45
46 virtual void regularize(bool) {}
47
48 virtual bool regularizationEnabled() const { return false; }
49
50 virtual void setEps(double) {}
51
52 virtual void setLipschitzConstant(double) {}
53
54 private:
55 virtual int computeBasis(std::vector<std::shared_ptr<AbstractFunctionSpaceElement> >& correction,
57 AbstractFunctionSpaceElement const& normalStep, double nu0, AbstractFunctionSpaceElement* residual) = 0;
58 };
59
61 {
62 public:
67 void ordinaryAndAdjoint(AbstractFunctionSpaceElement& correction, AbstractFunctionSpaceElement& adjointCorrection, AbstractLinearization& linearization, AbstractFunctionSpaceElement* correctionResidual=nullptr, AbstractFunctionSpaceElement* adjointResidual=nullptr)
68 { return computeCorrectionAndAdjointCorrection(correction, adjointCorrection, linearization, correctionResidual, adjointResidual); }
69
73 void simplified(AbstractFunctionSpaceElement& correction, AbstractLinearization const& linearization, AbstractFunctionSpaceElement *residual=nullptr) const
74 { computeSimplifiedCorrection(correction, linearization, residual); }
75
76 virtual void setRelativeAccuracy(double accuracy) {}
77
78 virtual void setEps(double) {}
79
80 private:
81 virtual void computeCorrectionAndAdjointCorrection(AbstractFunctionSpaceElement& correction, AbstractFunctionSpaceElement& adjointCorrection, AbstractLinearization& linearization, AbstractFunctionSpaceElement* correctionResidual, AbstractFunctionSpaceElement* adjointResidual) = 0;
82
83 virtual void computeSimplifiedCorrection(AbstractFunctionSpaceElement& correction,
84 AbstractLinearization const& lin, AbstractFunctionSpaceElement* residual) const = 0;
85
86 };
87
88 class SearchSpaceCreator;
89
92 {
93 public:
94 virtual std::unique_ptr<AbstractErrorEstimate> createEstimate(
96 SearchSpaceCreator const& searchSpace,
97 std::vector<AbstractFunctionSpaceElement*> const& basisVectors,
98 std::vector<double>const & coeff,
99 AbstractLinearization const& linN,
100 AbstractLinearization const& linT) const = 0;
102 };
103
104} // namespace Kaskade
105#endif
Representation of an error estimator.
virtual std::unique_ptr< AbstractErrorEstimate > createEstimate(AbstractFunctionSpaceElement &iterate, SearchSpaceCreator const &searchSpace, std::vector< AbstractFunctionSpaceElement * > const &basisVectors, std::vector< double >const &coeff, AbstractLinearization const &linN, AbstractLinearization const &linT) const =0
Abstract Vector for function space algorithms.
void simplified(AbstractFunctionSpaceElement &correction, AbstractLinearization const &linearization, AbstractFunctionSpaceElement *residual=nullptr) const
virtual void setRelativeAccuracy(double accuracy)
void ordinaryAndAdjoint(AbstractFunctionSpaceElement &correction, AbstractFunctionSpaceElement &adjointCorrection, AbstractLinearization &linearization, AbstractFunctionSpaceElement *correctionResidual=nullptr, AbstractFunctionSpaceElement *adjointResidual=nullptr)
Class that models the functionality of a (possibly inexact) linear solver.
virtual bool getNorms(Dune::Matrix< field_type > &M) const
Returns true, if some information on the norm is available.
Dune::FieldVector< double, 1 > field_type
virtual AbstractFunctionSpaceElement & getCorrectRhs()=0
int basis(std::vector< std::shared_ptr< AbstractFunctionSpaceElement > > &corrections, LagrangeLinearization &linearization, AbstractFunctionSpaceElement const &normalStep, double nu0, AbstractFunctionSpaceElement *residual=nullptr)
virtual void setRelativeAccuracy(double accuracy)=0
Specify accuracy that should be achieved.
virtual bool regularizationEnabled() const
virtual void setLipschitzConstant(double)
virtual int nSolutionVectors() const =0
The maximal number of solution vectors, returned by basis.