KASKADE 7 development version
errorEstimationTraits.hh
Go to the documentation of this file.
1#ifndef ERRORESTIMATIONTRAITS_HH
2#define ERRORESTIMATIONTRAITS_HH
3
4#include <cmath>
5#include <memory>
6
7#include "fem/assemble.hh"
8#include "fem/variables.hh"
9
10#include "abstract_interface.hh"
11#include "errorDistribution.hh"
12
13namespace Kaskade
14{
15 namespace ErrorEstimator_Detail
16 {
17 double add(const double& x1, const std::pair<double,int>& x2)
18 {
19 return std::fabs(x1) + std::fabs(x2.first);
20 }
21 }
22
23 template < template <class,class,class> class Functional, class VariableSetDescription, class ExtensionVariableSetDescription>
25 {
28
29 typedef Functional<VariableSetDescription,VariableSetDescription,VariableSetDescription> Functional_HH;
30 typedef Functional<VariableSetDescription,ExtensionVariableSetDescription,VariableSetDescription> Functional_HE;
31 typedef Functional<ExtensionVariableSetDescription,VariableSetDescription,ExtensionVariableSetDescription> Functional_EH;
32 typedef Functional<ExtensionVariableSetDescription,ExtensionVariableSetDescription,ExtensionVariableSetDescription> Functional_EE;
33
34
35 typedef typename Functional_HH::AnsatzVars::VariableSet DomainElement;
36 typedef typename Functional_EE::AnsatzVars::VariableSet DomainExtensionElement;
37 typedef typename Functional_HH::TestVars::VariableSet ImageElement;
38 typedef typename Functional_EE::TestVars::VariableSet ImageExtensionElement;
39 typedef typename Functional_HH::OriginVars::VariableSet OriginElement;
40 typedef typename Functional_EE::OriginVars::VariableSet OriginExtensionElement;
41 typedef typename Functional_HH::Scalar Scalar;
42
47
48 static constexpr int stateId = getStateId<Functional_HH>();
49 static constexpr int controlId = getControlId<Functional_HH>();
50 static constexpr int adjointId = getAdjointId<Functional_HH>();
51
52 static constexpr int dim = VariableSetDescription::Grid::dimension;
53
54 /*
55 * operators:
56 * the state operator is called A
57 * the control enters the state equation via operator B
58 * the derivatives of the lagrange functional are called Lyy, Lyu, Luy, Luu
59 *
60 * the endings indicate which ansatz and test spaces are used (L=ansatz space H=extension space), i.e. Luy_HE maps from the
61 * ansatz space to the extension space
62 */
67
72
77
82
87
92
97
102
107
111 typedef typename VariableSetDescription::template CoefficientVectorRepresentation<>::type Vector;
112 typedef typename VariableSetDescription::template CoefficientVectorRepresentation<stateId,stateId+1>::type VectorY;
113 typedef typename VariableSetDescription::template CoefficientVectorRepresentation<controlId,controlId+1>::type VectorU;
114 typedef typename VariableSetDescription::template CoefficientVectorRepresentation<adjointId,adjointId+1>::type VectorP;
115 typedef typename ExtensionVariableSetDescription::template CoefficientVectorRepresentation<>::type ExtensionVector;
116 typedef typename ExtensionVariableSetDescription::template CoefficientVectorRepresentation<stateId,stateId+1>::type ExtensionVectorY;
117 typedef typename ExtensionVariableSetDescription::template CoefficientVectorRepresentation<controlId,controlId+1>::type ExtensionVectorU;
118 typedef typename ExtensionVariableSetDescription::template CoefficientVectorRepresentation<adjointId,adjointId+1>::type ExtensionVectorP;
119
120 /*
121 * Coefficient vector initializers
122 */
123 typedef typename VariableSetDescription::template CoefficientVectorRepresentation<> Vector_Initializer;
124 typedef typename VariableSetDescription::template CoefficientVectorRepresentation<stateId,stateId+1> VectorY_Initializer;
125 typedef typename VariableSetDescription::template CoefficientVectorRepresentation<controlId,controlId+1> VectorU_Initializer;
126 typedef typename VariableSetDescription::template CoefficientVectorRepresentation<adjointId,adjointId+1> VectorP_Initializer;
127 typedef typename ExtensionVariableSetDescription::template CoefficientVectorRepresentation<> ExtensionVector_Initializer;
128 typedef typename ExtensionVariableSetDescription::template CoefficientVectorRepresentation<stateId,stateId+1> ExtensionVectorY_Initializer;
129 typedef typename ExtensionVariableSetDescription::template CoefficientVectorRepresentation<controlId,controlId+1> ExtensionVectorU_Initializer;
130 typedef typename ExtensionVariableSetDescription::template CoefficientVectorRepresentation<adjointId,adjointId+1> ExtensionVectorP_Initializer;
131 };
132
133 template <class VariableSetDescription, class ErrorRepresentation, class ExtensionSpace, template <class> class RefinementStrategy>
134 class ErrorEstimatorBase : public AbstractHierarchicalErrorEstimator, public RefinementStrategy<typename VariableSetDescription::Grid>
135 {
136 public:
137 ErrorEstimatorBase(ExtensionSpace& extensionSpace_, double fraction, bool verbose = false)
138 : RefinementStrategy<typename VariableSetDescription::Grid>( extensionSpace_.gridManager(), fraction, verbose ),
139 extensionSpace(extensionSpace_)
140 {}
141
142 double estimatedAbsoluteError() const final { return sqrt(squaredError); }
143
144 size_t gridSize() const final { return extensionSpace.gridManager().grid().size(0); }
145
146 void refineGrid() final { if( squaredError > 0 ) this->refineGrid_impl(*mde,errorDistribution,squaredError); }
147
148 protected:
149 ExtensionSpace& extensionSpace;
150 std::vector<std::pair<double,int> > errorDistribution = {}; // store error and corresponding cell index
151 std::unique_ptr<ErrorRepresentation> mde;
152 double squaredError = 0;
153 };
154}
155
156#endif // ERRORESTIMATIONTRAITS_HH
Interfaces for function space oriented algorithms.
An adaptor presenting a Dune::LinearOperator <domain_type,range_type> interface to a contiguous sub-b...
std::unique_ptr< ErrorRepresentation > mde
double estimatedAbsoluteError() const final
ErrorEstimatorBase(ExtensionSpace &extensionSpace_, double fraction, bool verbose=false)
std::vector< std::pair< double, int > > errorDistribution
A class that stores information about a set of variables.
Definition: variables.hh:537
A class for storing a heterogeneous collection of FunctionSpaceElement s.
Definition: variables.hh:341
A class for assembling Galerkin representation matrices and right hand sides for variational function...
double add(const double &x1, const std::pair< double, int > &x2)
Functional< ExtensionVariableSetDescription, VariableSetDescription, ExtensionVariableSetDescription > Functional_EH
ExtensionVariableSetDescription::template CoefficientVectorRepresentation< stateId, stateId+1 >::type ExtensionVectorY
AssembledGalerkinOperator< Assembler_EE, stateId, stateId+1, adjointId, adjointId+1 > AT_EE
AssembledGalerkinOperator< Assembler_HE, controlId, controlId+1, stateId, stateId+1 > Luy_HE
AssembledGalerkinOperator< Assembler_EH, controlId, controlId+1, adjointId, adjointId+1 > BT_EH
VariableSetDescription::template CoefficientVectorRepresentation Vector_Initializer
AssembledGalerkinOperator< Assembler_HE, stateId, stateId+1, controlId, controlId+1 > Lyu_HE
VariableSetDescription::template CoefficientVectorRepresentation< controlId, controlId+1 > VectorU_Initializer
Functional< ExtensionVariableSetDescription, ExtensionVariableSetDescription, ExtensionVariableSetDescription > Functional_EE
AssembledGalerkinOperator< Assembler_HE, stateId, stateId+1, adjointId, adjointId+1 > AT_HE
AssembledGalerkinOperator< Assembler_HH > Operator_HH
ExtensionVariableSetDescription::template CoefficientVectorRepresentation ::type ExtensionVector
Functional_HH::AnsatzVars::VariableSet DomainElement
AssembledGalerkinOperator< Assembler_HE, adjointId, adjointId+1, stateId, stateId+1 > A_HE
VariationalFunctionalAssembler< LinearizationAt< Functional_EH > > Assembler_EH
ExtensionVariableSetDescription::template CoefficientVectorRepresentation< stateId, stateId+1 > ExtensionVectorY_Initializer
AssembledGalerkinOperator< Assembler_HE, controlId, controlId+1, adjointId, adjointId+1 > BT_HE
ExtensionVariableSetDescription::template CoefficientVectorRepresentation< adjointId, adjointId+1 >::type ExtensionVectorP
AssembledGalerkinOperator< Assembler_EE, adjointId, adjointId+1, stateId, stateId+1 > A_EE
AssembledGalerkinOperator< Assembler_HE, controlId, controlId+1, controlId, controlId+1 > Luu_HE
AssembledGalerkinOperator< Assembler_HH, adjointId, adjointId+1, controlId, controlId+1 > B_HH
AssembledGalerkinOperator< Assembler_EE, controlId, controlId+1, stateId, stateId+1 > Luy_EE
AssembledGalerkinOperator< Assembler_HH, controlId, controlId+1, adjointId, adjointId+1 > BT_HH
VariationalFunctionalAssembler< LinearizationAt< Functional_HH > > Assembler_HH
VariableSet< ExtensionVariableSetDescription > ExtensionVarSet
AssembledGalerkinOperator< Assembler_HH, stateId, stateId+1, adjointId, adjointId+1 > AT_HH
AssembledGalerkinOperator< Assembler_EH, adjointId, adjointId+1, stateId, stateId+1 > A_EH
Functional< VariableSetDescription, VariableSetDescription, VariableSetDescription > Functional_HH
AssembledGalerkinOperator< Assembler_HH, controlId, controlId+1, stateId, stateId+1 > Luy_HH
AssembledGalerkinOperator< Assembler_EH, controlId, controlId+1, controlId, controlId+1 > Luu_EH
AssembledGalerkinOperator< Assembler_EH, adjointId, adjointId+1, controlId, controlId+1 > B_EH
VariableSet< VariableSetDescription > VarSet
VariableSetDescription::template CoefficientVectorRepresentation< controlId, controlId+1 >::type VectorU
Functional< VariableSetDescription, ExtensionVariableSetDescription, VariableSetDescription > Functional_HE
AssembledGalerkinOperator< Assembler_EE, stateId, stateId+1, stateId, stateId+1 > Lyy_EE
AssembledGalerkinOperator< Assembler_HE > Operator_HE
AssembledGalerkinOperator< Assembler_HE, adjointId, adjointId+1, controlId, controlId+1 > B_HE
ExtensionVariableSetDescription::template CoefficientVectorRepresentation< controlId, controlId+1 >::type ExtensionVectorU
Functional_EE::OriginVars::VariableSet OriginExtensionElement
ExtensionVariableSetDescription::template CoefficientVectorRepresentation ExtensionVector_Initializer
VariationalFunctionalAssembler< LinearizationAt< Functional_EE > > Assembler_EE
AssembledGalerkinOperator< Assembler_EH > Operator_EH
ExtensionVariableSetDescription::template CoefficientVectorRepresentation< controlId, controlId+1 > ExtensionVectorU_Initializer
AssembledGalerkinOperator< Assembler_EH, controlId, controlId+1, stateId, stateId+1 > Luy_EH
VariableSetDescription::template CoefficientVectorRepresentation< stateId, stateId+1 >::type VectorY
Functional_EE::AnsatzVars::VariableSet DomainExtensionElement
AssembledGalerkinOperator< Assembler_HH, controlId, controlId+1, controlId, controlId+1 > Luu_HH
Functional_HH::TestVars::VariableSet ImageElement
AssembledGalerkinOperator< Assembler_EE > Operator_EE
VariableSetDescription::template CoefficientVectorRepresentation< adjointId, adjointId+1 >::type VectorP
AssembledGalerkinOperator< Assembler_EH, stateId, stateId+1, adjointId, adjointId+1 > AT_EH
AssembledGalerkinOperator< Assembler_EH, stateId, stateId+1, stateId, stateId+1 > Lyy_EH
Functional_EE::TestVars::VariableSet ImageExtensionElement
AssembledGalerkinOperator< Assembler_HE, stateId, stateId+1, stateId, stateId+1 > Lyy_HE
AssembledGalerkinOperator< Assembler_HH, stateId, stateId+1, stateId, stateId+1 > Lyy_HH
AssembledGalerkinOperator< Assembler_EE, adjointId, adjointId+1, controlId, controlId+1 > B_EE
AssembledGalerkinOperator< Assembler_HH, adjointId, adjointId+1, stateId, stateId+1 > A_HH
VariableSetDescription::template CoefficientVectorRepresentation ::type Vector
VariableSetDescription::template CoefficientVectorRepresentation< adjointId, adjointId+1 > VectorP_Initializer
ExtensionVariableSetDescription::template CoefficientVectorRepresentation< adjointId, adjointId+1 > ExtensionVectorP_Initializer
AssembledGalerkinOperator< Assembler_EE, stateId, stateId+1, controlId, controlId+1 > Lyu_EE
AssembledGalerkinOperator< Assembler_HH, stateId, stateId+1, controlId, controlId+1 > Lyu_HH
VariableSetDescription::template CoefficientVectorRepresentation< stateId, stateId+1 > VectorY_Initializer
AssembledGalerkinOperator< Assembler_EE, controlId, controlId+1, controlId, controlId+1 > Luu_EE
AssembledGalerkinOperator< Assembler_EH, stateId, stateId+1, controlId, controlId+1 > Lyu_EH
AssembledGalerkinOperator< Assembler_EE, controlId, controlId+1, adjointId, adjointId+1 > BT_EE
Functional_HH::OriginVars::VariableSet OriginElement
VariationalFunctionalAssembler< LinearizationAt< Functional_HE > > Assembler_HE
Variables and their descriptions.