KASKADE 7 development version
lagrangeLinearization.hh
Go to the documentation of this file.
1#ifndef LAGRANGELINEARIZATION_HH
2#define LAGRANGELINEARIZATION_HH
3
4#include "linalg/triplet.hh"
5
6namespace Kaskade
7{
8 class AbstractLinearization;
9 class AbstractFunctionSpaceElement;
10
12 {
13 public:
14 LagrangeLinearization(AbstractLinearization* Nlin_, AbstractLinearization* Tlin_, AbstractFunctionSpaceElement const& adjointCorrection, int stateId_=1, int controlId_=0, bool hasTlin_uu_=false);
15
17
19 virtual double eval() const;
20
21 virtual double evalL1norm() const;
22
24 virtual void evald(AbstractFunctionSpaceElement &g, int rbegin=0, int rend=-1) const;
25
27 virtual void d2axpy(double a, AbstractFunctionSpaceElement& y, AbstractFunctionSpaceElement const& x, int rbegin=0, int rend=-1, int cbegin=0, int cend=-1) const;
28
29 virtual void d2taxpy(double a, AbstractFunctionSpaceElement& y, AbstractFunctionSpaceElement const& x, int rbegin=0, int rend=-1, int cbegin=0, int cend=-1) const;
30
33
35 // be careful, are Lagrange-Multipliers (needed for Tlin) up to date?
36 virtual void precompute();
37
38 virtual void flush();
39
40 // virtual void touch();
41 //
42 // virtual void connectToSignalForFlush(boost::signals2::signal0<void>& sig);
43
46
49
50 virtual void getMatrixBlocks(MatrixAsTriplet<double>& mat, int rbegin=0, int rend=-1, int cbegin=0, int cend=-1) const;
51
52 private:
55 std::unique_ptr<AbstractFunctionSpaceElement> origin;
56 std::unique_ptr<AbstractFunctionSpaceElement> lagrangeCorrection;
57 int stateId, controlId;
58 bool hasTlin_uu = false;
59 // bool existsLagrangian;
60 };
61}
62
63#endif // LAGRANGELINEARIZATION_HH
Abstract Vector for function space algorithms.
virtual double eval() const
Evaluate f(origin)
virtual AbstractFunctionSpaceElement const & getOrigin() const
Get point of linearization.
LagrangeLinearization(AbstractLinearization *Nlin_, AbstractLinearization *Tlin_, AbstractFunctionSpaceElement const &adjointCorrection, int stateId_=1, int controlId_=0, bool hasTlin_uu_=false)
AbstractLinearization const & getNormalLinearization() const
virtual double evalL1norm() const
Evaluate L1 norm of integrand.
virtual void d2taxpy(double a, AbstractFunctionSpaceElement &y, AbstractFunctionSpaceElement const &x, int rbegin=0, int rend=-1, int cbegin=0, int cend=-1) const
Evaluate hessian times second argument: y = y+a*ddf*x.
virtual void d2axpy(double a, AbstractFunctionSpaceElement &y, AbstractFunctionSpaceElement const &x, int rbegin=0, int rend=-1, int cbegin=0, int cend=-1) const
Evaluate scaled hessian (of Lagrangian) times second argument.
virtual void evald(AbstractFunctionSpaceElement &g, int rbegin=0, int rend=-1) const
Evaluate f'(origin)(.) + <Lag. Multiplier, c'(origin)(.) > this is dual element.
AbstractLinearization & getTangentialLinearization()
AbstractLinearization & getNormalLinearization()
virtual void getMatrixBlocks(MatrixAsTriplet< double > &mat, int rbegin=0, int rend=-1, int cbegin=0, int cend=-1) const
Access matrix representation if available.
virtual void precompute()
Precompute data.
AbstractLinearization const & getTangentialLinearization() const