KASKADE 7 development version
adaptive_refinement.hh
Go to the documentation of this file.
1#ifndef ADAPTIVE_REFINEMENT_HH
2#define ADAPTIVE_REFINEMENT_HH
3
5#include "algorithm_base.hh"
6#include <limits>
7#include <memory>
8#include <utility>
9
10namespace Kaskade
11{
12
18{
19public:
20 AdaptiveParameters(double desiredAccuracy_, int maxSteps_, double bulkmin_, double bulkmax_,
21 double desAbsAcc_=0.0, int maxpatches_=std::numeric_limits<int>::max(), double minRelAcc=10.0)
22 : desiredAccuracy(desiredAccuracy_),
23 maxSteps(maxSteps_),
24 bulkmin(bulkmin_),
25 bulkmax(bulkmax_),
26 desiredAbsAccuracy(desAbsAcc_),
27 maxpatches(maxpatches_),
28 maxSizeReached(false),
29 minRelAccuracy(minRelAcc),
30 gridHasChanged(false),
31 relativeAccuracy("relativeAccuracy"),
32 absoluteAccuracy("absoluteAccuracy")
33 {}
34
35//Parameters with values that must be supplied by client
44
46
47protected:
49 friend class TestErrorEstimator;
52
56};
57
58
60
68{
69// Public interface as Algorithm
70public:
75 AbstractNorm& an,
77 : fixedSolver(als), errorEstimator(aee), norm(an), grid(ag), p(p_), alwaysestimate(true)
78 {}
79
81 virtual int runAlgorithm();
83
84//Protected interface as Algorithm for inheritance
85protected:
87
88 virtual double getBulk(int step) const;
89
90public:
92 virtual void setRelativeAccuracy(double accuracy) {p.desiredAccuracy=accuracy;}
94 virtual void setAbsoluteAccuracy(double accuracy) { p.desiredAbsAccuracy=accuracy;}
99
101
104
106 AbstractLinearization const& lin,
107 AbstractLinearization const& olin) const
108 { fixedSolver.doResolve(correction, lin, olin); }
109
111 AbstractLinearization const& lin) const
113
114
115 virtual bool changedGrid() { return p.gridHasChanged; }
116
117
118protected:
119 std::shared_ptr<AbstractErrorEstimate> estimate;
126 std::unique_ptr<AbstractFunctionSpaceElement> oldcorrection;
127 double noldold;
128 virtual void initialize();
129 virtual void finalize(int flag);
130 virtual void terminationMessage(int flag);
131public:
134};
135
136
139{
140public:
144 AbstractNorm& an,
145 AdaptiveParameters& p_) : SimpleAdaptiveRefinement(als,aee,ag,an,p_)
146 {}
147 virtual double getBulk(int step) const;
149 virtual void setRelativeAccuracy(double accuracy) {p.desiredAccuracy=accuracy*0.9;}
151 virtual void setAbsoluteAccuracy(double accuracy) { p.desiredAbsAccuracy=accuracy*0.9;}
152};
153
156{
157public:
161 AbstractNorm& an,
162 AdaptiveParameters& p_) : SimpleAdaptiveRefinement(als,aee,ag,an,p_)
163 {}
164 virtual int runAlgorithm();
165};
166
168{
169// Public interface as Algorithm
170public:
175 AbstractNorm& an,
177 : fixedSolver(als), errorEstimator(aee), norm(an), grid(ag), p(p_), alwaysestimate(true)
178 {}
179
181 virtual int runAlgorithm();
182// virtual ~SimpleAdaptiveRefinement() {};
183
184//Protected interface as Algorithm for inheritance
185protected:
186 virtual bool convergenceTest(AbstractErrorEstimate const& estimate, AbstractAdaptiveGrid const&);
187
188 virtual double getBulk(int step) const;
189
190public:
192 void setRelativeAccuracy(double accuracy) {p.desiredAccuracy=accuracy;}
194 void setAbsoluteAccuracy(double accuracy) { p.desiredAbsAccuracy=accuracy;}
199
201
204
205protected:
212 std::unique_ptr<AbstractFunctionSpaceElement> oldcorrection;
213 double noldold;
214 virtual void initialize();
215 virtual void finalize(int flag);
216 virtual void terminationMessage(int flag);
217public:
220};
221
222
224} // namespace Kaskade
225#endif
Interfaces for function space oriented algorithms.
Representation of an adaptive grid and a simple set of operations thereon.
Representation of an error estimate, i.e. the output of an error estimator.
Representation of an error estimator.
Abstract Vector for function space algorithms.
Class that models the functionality of a (possibly inexact) linear solver.
virtual void doResolve(AbstractFunctionSpaceElement &correction, AbstractLinearization const &lin, AbstractLinearization const &olin) const =0
Solve simplified Newton system: scorrection = +F'(iterate)^{-1}F(trialIterate)
Parameters that are used by SimpleAdaptiveRefinement.
AdaptiveParameters(double desiredAccuracy_, int maxSteps_, double bulkmin_, double bulkmax_, double desAbsAcc_=0.0, int maxpatches_=std::numeric_limits< int >::max(), double minRelAcc=10.0)
LoggedQuantity< double > absoluteAccuracy
LoggedQuantity< double > relativeAccuracy
Base class for algorithms. Provides a unified interface and some simple wrapper routines,...
Performs error estimation and creates error indicators, but does not refine. Good for testing error e...
virtual void setRelativeAccuracy(double accuracy)
set relative accuracy
FinalAdaptiveRefinement(AbstractNewtonDirection &als, AbstractErrorEstimator &aee, AbstractAdaptiveGrid &ag, AbstractNorm &an, AdaptiveParameters &p_)
virtual double getBulk(int step) const
virtual void setAbsoluteAccuracy(double accuracy)
set absolute accuracy
Performs error estimation and creates error indicators, but does not refine. Good for testing error e...
virtual int runAlgorithm()
To be used as an algorithm.
FixedSolverWithErrorEstimate(AbstractNewtonDirection &als, AbstractErrorEstimator &aee, AbstractAdaptiveGrid &ag, AbstractNorm &an, AdaptiveParameters &p_)
void logValue()
Insert current value into log buffer.
Adaptive refinement algorithm.
virtual void finalize(int flag)
virtual bool convergenceTest(AbstractErrorEstimate const &estimate, AbstractAdaptiveGrid const &)
virtual void terminationMessage(int flag)
virtual void setAbsoluteAccuracy(double accuracy)
set absolute accuracy
virtual void doSolve(AbstractFunctionSpaceElement &corr, AbstractLinearization &lin)
solve problem
virtual void doResolve(AbstractFunctionSpaceElement &correction, AbstractLinearization const &lin, AbstractLinearization const &olin) const
Solve simplified Newton system: scorrection = +F'(iterate)^{-1}F(trialIterate)
AbstractFunctionSpaceElement * correction
double getRelativeAccuracy()
get achieved relative accuracy
std::unique_ptr< AbstractFunctionSpaceElement > oldcorrection
SimpleAdaptiveRefinement(AbstractNewtonDirection &als, AbstractErrorEstimator &aee, AbstractAdaptiveGrid &ag, AbstractNorm &an, AdaptiveParameters &p_)
Construction.
double getAbsoluteAccuracy()
get achieved absolute accuracy
virtual int runAlgorithm()
To be used as an algorithm.
virtual double getBulk(int step) const
std::shared_ptr< AbstractErrorEstimate > estimate
AbstractNewtonDirection & fixedSolver
AbstractErrorEstimator & errorEstimator
virtual void setRelativeAccuracy(double accuracy)
set relative accuracy
virtual void doResolve(AbstractFunctionSpaceElement &correction, AbstractLinearization const &lin) const
Solve simplified Newton system: scorrection = +F'(iterate)^{-1}F(trialIterate)
void setRelativeAccuracy(double accuracy)
set relative accuracy
AbstractNewtonDirection & fixedSolver
double getAbsoluteAccuracy()
get achieved absolute accuracy
virtual void terminationMessage(int flag)
virtual int runAlgorithm()
To be used as an algorithm.
virtual bool convergenceTest(AbstractErrorEstimate const &estimate, AbstractAdaptiveGrid const &)
std::unique_ptr< AbstractFunctionSpaceElement > oldcorrection
virtual double getBulk(int step) const
void setAbsoluteAccuracy(double accuracy)
set absolute accuracy
AbstractLinearization * linearization
AbstractFunctionSpaceElement * correction
AbstractErrorEstimator & errorEstimator
void solve(AbstractFunctionSpaceElement &corr, AbstractLinearization &lin)
solve problem
double getRelativeAccuracy()
get achieved relative accuracy
virtual void finalize(int flag)
TestErrorEstimator(AbstractNewtonDirection &als, AbstractErrorEstimator &aee, AbstractAdaptiveGrid &ag, AbstractNorm &an, AdaptiveParameters &p_)
Construction.
Dune::FieldVector< T, n > max(Dune::FieldVector< T, n > x, Dune::FieldVector< T, n > const &y)
Componentwise maximum.
Definition: fixdune.hh:110