1#ifndef ABSTRACT_INTERFACE_HH
2#define ABSTRACT_INTERFACE_HH
6#include <boost/signals2.hpp>
11#include <dune/grid/config.h>
38 std::vector<double> alphaV(
nComponents(),alpha+1.0);
39 return doscale(alphaV);
64 std::vector<double> alphaV(
nComponents(),alpha+1.0);
65 return doscale(alphaV);
68 return doaxpy_(alpha, l);
75 if(
this!=&v)
return doassign(v);
87 return doscale(lambdaV);
93 return doscale(lambda);
136 virtual void writeToFile(std::string
const& file,
bool append,
int order=1)
const {}
139 virtual void print(std::string
const& message=
"")
const { std::cout <<
"AbstractFunctionSpaceElement: No printing available!" << std::endl;}
142 virtual std::unique_ptr<AbstractFunctionSpaceElement>
clone()
const = 0;
145 virtual std::unique_ptr<AbstractFunctionSpaceElement>
initZeroVector()
const = 0;
170 virtual double eval()
const = 0;
178 d2axpy(1.0,y,x,rbegin,rend,cbegin,cend);
183 d2taxpy(1.0,y,x,rbegin,rend,cbegin,cend);
242 template<
typename ParameterType>
247 ParameterType
const&
getPars()
const {
return pref;}
249 ParameterType
const& pref;
253 template<
class ParameterType>
263 { assert(!
"ParameterFunctional: Linearization not Implemented");
return getFunctional(p);}
265 { assert(!
"ParameterFunctional: Linearization not Implemented");
return getFunctional(p);}
276 {
doSolve(correction, linearization);
281 {
doResolve(correction, linearization, oldlinearization);
319 mutable boost::signals2::signal<void()>
changed;
330 std::vector<std::shared_ptr<AbstractFunctionSpaceElement> > basis = std::vector<std::shared_ptr<AbstractFunctionSpaceElement> >())
const = 0;
332 virtual std::unique_ptr<AbstractChart>
clone()
const = 0;
351 if(sc < 0) std::cout <<
"Warning: scalar product not positive definite! Taking absolute value" << std::endl;
352 return sqrt(std::fabs(sc));
413 virtual double d0(std::vector<double>
const&)
const = 0;
421 virtual std::vector<double>
d1(std::vector<double>
const&)
const = 0;
Representation of an adaptive grid and a simple set of operations thereon.
virtual void mark(AbstractErrorEstimate &, double portion)=0
Mark elements, using an error estimate that hold error indicators.
virtual ~AbstractAdaptiveGrid()
virtual void adapt()=0
Change grid according to marked elements.
virtual void flushMarks()=0
Remove all marks in the grid.
virtual int getNMarked()=0
boost::signals2::signal< void()> gridWillChange
Inform others that the grid will change.
virtual int size()=0
Number of patches.
virtual void addPerturbation(AbstractFunctionSpaceElement &newIterate, AbstractFunctionSpaceElement const &perturbation, AbstractLinearization const &lin, std::vector< std::shared_ptr< AbstractFunctionSpaceElement > > basis=std::vector< std::shared_ptr< AbstractFunctionSpaceElement > >()) const =0
virtual std::unique_ptr< AbstractChart > clone() const =0
Representation of an error estimate, i.e. the output of an error estimator.
virtual double absoluteError() const =0
virtual ~AbstractErrorEstimate()
Representation of an error estimator.
virtual ~AbstractErrorEstimator()
virtual std::unique_ptr< AbstractErrorEstimate > createEstimate(AbstractFunctionSpaceElement const &correction, AbstractLinearization const &lin) const =0
virtual ~AbstractFlushConnection()
virtual void connectToSignalForFlush(boost::signals2::signal< void()> &)=0
Abstract Vector for function space algorithms.
AbstractFunctionSpaceElement & operator-=(AbstractFunctionSpaceElement const &v)
Basic vector arithmetic.
AbstractFunctionSpaceElement & operator=(AbstractFunctionSpaceElement const &v)
Assignment.
virtual void writeToFile(std::string const &file, bool append, int order=1) const
Optional output.
AbstractFunctionSpaceElement & operator+=(AbstractFunctionSpaceElement const &v)
Basic vector arithmetic.
AbstractFunctionSpaceElement & axpy(double alpha, AbstractFunctionSpaceElement const &l, int component)
*this += alpha*l
double applyAsDualTo(AbstractFunctionSpaceElement const &v) const
AbstractFunctionSpaceElement & operator*=(std::vector< double >const &lambda)
Scaling each component of the vector separately.
virtual std::string getRole(int component) const =0
virtual ~AbstractFunctionSpaceElement()
virtual std::unique_ptr< AbstractFunctionSpaceElement > clone() const =0
Construction of a vector of the same type.
virtual void print(std::string const &message="") const
Optional output.
AbstractFunctionSpaceElement & axpy_role(double alpha, AbstractFunctionSpaceElement const &l, std::string const role)
virtual int nComponents() const =0
AbstractFunctionSpaceElement(AbstractFunctionSpaceElement const &)=delete
double applyAsDualTo_role(AbstractFunctionSpaceElement const &v, std::string const role) const
AbstractFunctionSpaceElement & axpy(double alpha, AbstractFunctionSpaceElement const &l)
*this += alpha*l
virtual std::unique_ptr< AbstractFunctionSpaceElement > initZeroVector() const =0
Construction of a vector of the same type.
AbstractFunctionSpaceElement & operator*=(double lambda)
Basic vector arithmetic.
AbstractFunctionSpaceElement & axpy(double alpha, AbstractFunctionSpaceElement const &l, std::string const role)
double applyAsDualTo(AbstractFunctionSpaceElement const &v, int component) const
Interpret *this as a dual vector, and apply it to v.
void swap(AbstractFunctionSpaceElement &v)
Shallow swap.
double applyAsDualTo(AbstractFunctionSpaceElement const &v, std::string const &role) const
AbstractFunctionSpaceElement()
Representation of a nonlinear functional.
virtual double evaluate(AbstractFunctionSpaceElement const &x) const
virtual bool inDomain(AbstractFunctionSpaceElement const &x) const
virtual std::unique_ptr< AbstractFunctionSpaceElement > getImageVector(AbstractFunctionSpaceElement const &x) const =0
virtual std::unique_ptr< AbstractLinearization > getLinearization(AbstractFunctionSpaceElement const &x) const =0
virtual ~AbstractFunctional()
virtual void refineGrid()=0
virtual double estimatedAbsoluteError() const =0
virtual size_t gridSize() const =0
virtual ~AbstractHierarchicalErrorEstimator()
virtual void operator()(AbstractLinearization const &lin, AbstractFunctionSpaceElement const &x, AbstractFunctionSpaceElement const &dx, int, AbstractFunctionSpaceElement const &rhs)=0
void ddxpy(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+ddf*x.
virtual void getMatrixBlocks(MatrixAsTriplet< double > &mat, int rbegin=0, int rend=-1, int cbegin=0, int cend=-1) const =0
Access matrix representation if available.
virtual double eval() const =0
Evaluate functional.
virtual ~AbstractLinearization()
virtual double evalL1norm() const =0
Evaluate L1 norm of integrand.
void ddtxpy(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+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 =0
Evaluate hessian times second argument: y = y+a*ddf*x.
virtual void evald(AbstractFunctionSpaceElement &g, int rbegin=0, int rend=-1) const =0
Evaluate derivative.
virtual void d2taxpy(double a, AbstractFunctionSpaceElement &y, AbstractFunctionSpaceElement const &x, int rbegin=0, int rend=-1, int cbegin=0, int cend=-1) const =0
Evaluate hessian times second argument: y = y+a*ddf*x.
virtual void precompute()=0
virtual AbstractFunctionSpaceElement const & getOrigin() const =0
Get point of linearization.
Class that models the functionality of a (possibly inexact) linear solver.
virtual void setAbsoluteAccuracy(double)
Specify accuracy that should be achieved.
virtual double getRelativeAccuracy()=0
Get accuracy that was actually achieved.
virtual bool improvementPossible()=0
boost::signals2::signal< void()> changed
virtual ~AbstractNewtonDirection()
virtual void doSolve(AbstractFunctionSpaceElement &correction, AbstractLinearization &lin)=0
Solve Newton System: correction = +F'(iterate)^{-1}F(iterate)
virtual double getAbsoluteAccuracy()=0
Get accuracy that was actually achieved.
virtual bool changedGrid()
void ordinary(AbstractFunctionSpaceElement &correction, AbstractLinearization &linearization)
virtual void setRelativeAccuracy(double accuracy)=0
Specify accuracy that should be achieved.
virtual void doResolve(AbstractFunctionSpaceElement &correction, AbstractLinearization const &lin) const =0
Solve simplified Newton system: scorrection = +F'(iterate)^{-1}F(trialIterate)
virtual void doResolve(AbstractFunctionSpaceElement &correction, AbstractLinearization const &lin, AbstractLinearization const &olin) const =0
Solve simplified Newton system: scorrection = +F'(iterate)^{-1}F(trialIterate)
void simplified(AbstractFunctionSpaceElement &correction, AbstractLinearization const &linearization, AbstractLinearization const &oldlinearization) const
void simplified(AbstractFunctionSpaceElement &correction, AbstractLinearization const &linearization) const
virtual double operator()(AbstractFunctionSpaceElement const &) const =0
virtual void setOrigin(AbstractLinearization const &)
Creates a functional from a homotopy of functionals by inserting a parameter.
virtual std::unique_ptr< AbstractFunctional > getLinFunctionValue(AbstractParameters const &p) const
virtual std::unique_ptr< AbstractFunctional > getParameterLinFunctional(AbstractParameters const &p) const
virtual ~AbstractParameterFunctional()
virtual std::unique_ptr< AbstractFunctional > getFunctional(AbstractParameters const &) const =0
Representation of parameters.
virtual ~AbstractParameters()
virtual void apply(AbstractFunctionSpaceElement const &x, AbstractFunctionSpaceElement &Px)=0
virtual void setLinearization(AbstractLinearization &)=0
virtual double operator()(AbstractFunctionSpaceElement const &, AbstractFunctionSpaceElement const &) const =0
double operator()(AbstractFunctionSpaceElement const &v) const
virtual ~ContinuousScalarFunction()
virtual double d0(std::vector< double > const &) const =0
virtual std::vector< double > d1(std::vector< double > const &) const =0
virtual ~DifferentiableScalarFunction()
...for parameter dependent functionals, implements AbstractParameters
Parameters(ParameterType const &p)
ParameterType const & getPars() const
Parameters< ParameterType > makePars(ParameterType const &p)
auto & component(LinearProductSpace< Scalar, Sequence > &x)