KASKADE 7 development version
newton_damped.hh
Go to the documentation of this file.
1#ifndef NEWTON_DAMPED_HH
2#define NEWTON_DAMPED_HH
3
4#include <memory>
5#include "newton_base.hh"
6
7namespace Kaskade
8{
9
12{
13public:
14 GuardedCovariantNewtonParameters(double desiredAccuracy_, int maxSteps_) :
15 NewtonParameters(desiredAccuracy_, maxSteps_),
17 {
18 reset();
19 }
20
21
22// Parameters with predefined values that can be changed by client
23 double maxContraction; // default = 1.0
27
28protected:
30
31 virtual void doForAll(LQAction::ToDo td)
32 {
34 Theta.doAction(td,"Theta");
35 omega.doAction(td,"omega");
36 normSCorr.doAction(td,"|SCorr|");
37 normCorrLast.doAction(td,"|corrLast|");
38 omega0.doAction(td,"omega0");
39 }
40
44
45};
46
47
48
49//------------------------------------------------------------------------------
50
53{
54public:
55 DampedCovariantNewtonParameters(double desiredAccuracy_, int maxSteps_, double minDampingFactor_=1e-12) :
56 GuardedCovariantNewtonParameters(desiredAccuracy_, maxSteps_),
58 minDampingFactor(minDampingFactor_),
61 {
63 reset();
64 }
65public:
67
70 dampingFactor.doAction(td,"dampingFactor");
71 SCorrByCorr.doAction(td,"SCorrByCorr");
72 totalCorrection.doAction(td,"totalCorrection");
73 lengthOfStep.doAction(td,"lengthOfStep");
74 absoluteAccuracyLast.doAction(td,"absoluteAccuracyLast");
77 }
78// Initial damping factor
80// Minimal damping factor, below which the Newton iteration terminates unsuccessfully
82// How to reduce the damping factor, if iterate is outside the domain of definition of f
84
86
88
94
96 {
99 };
100
102};
103
104
106
109{
110public:
112
114 AbstractChart& chart_,
115 AbstractNorm& n,
117 NewtonsMethod(l, chart_,n,p_), p(p_) {}
118
120
122
123protected:
124 virtual RegularityTest regularityTest(double scalingFactor);
126
127 virtual void initialize();
128 virtual void initNewtonStep();
129 virtual double& dampingFactor() {return p.dampingFactor.value_nonconst(); }
130
131
133
134 void setDesiredRelativeAccuracy(double ra) { assert(ra>0); p.relativeAccuracy=ra; }
135
138 AbstractLinearization const& lin);
139
142 AbstractLinearization const& lin);
143
145
147 std::unique_ptr<AbstractFunctionSpaceElement> scorrection, startIterate;
148 std::unique_ptr<AbstractFunctionSpaceElement> auxvector;
149
150};
151
152//-----------------------------------------------------------------------------------------
153
155{
156public:
157 ModifiedCovariantNewtonParameters(double desiredAccuracy_, int maxSteps_, double ThetaMaxAllowed_, double mdf_=1e-12) :
158 DampedCovariantNewtonParameters(desiredAccuracy_, maxSteps_, mdf_) , ThetaMaxAllowed(ThetaMaxAllowed_) {}
159
160
161protected:
164
165 virtual void doForAll(LQAction::ToDo td)
166 {
168 Theta0.doAction(td,"|ModCorr|");
169 normModCorr.doAction(td,"|ModCorr|");
170 normModSCorr.doAction(td,"|ModSCorr|");
171 totalCorrection.doAction(td,"|totCorr|");
172 }
178};
179
181//class ModifiedCovariantNewtonMethod : public NewtonsMethod
182//{
183//
184//public:
185// typedef ModifiedCovariantNewtonParameters Parameters;
186//
187//
188// ModifiedCovariantNewtonMethod(AbstractLinearSolver& l,
189// AbstractChart& chart_,
190// AbstractNorm& n,
191// ModifiedCovariantNewtonParameters& p_):
192// NewtonsMethod(l, chart_,n,p_), p(p_) { failedbydamping=false; }
193//
194//protected:
195//
196// void setDesiredRelativeAccuracy(double ra) { assert(ra>0); p.relativeAccuracy=ra; }
197//
198// void initialize();
199//
200// void predictNextDampingFactor(AbstractFunctionSpaceElement& correction) { p.normCorr=norm(correction); }
201//
202// void initNewtonStep();
203//
204// virtual AcceptanceTest evaluateTrialIterate(
205// AbstractFunctionSpaceElement const& trialIterate,
206// AbstractFunctionSpaceElement const& correction,
207// AbstractLinearization const& lin);
208//
209// void updateIterate(AbstractFunctionSpaceElement& iterate,
210// AbstractFunctionSpaceElement& trialIterate,
211// AbstractLinearization const& lin);
212//
213// NewtonsMethod::Convergence convergenceTest(AbstractFunctionSpaceElement const& correction, AbstractFunctionSpaceElement const& iterate);
214//
215// NewtonsMethod::RegularityTest regularityTest(double scalingFactor);
216//
217//private:
218// double mu;
219// double nsc;
220// bool failedbydamping;
221// ModifiedCovariantNewtonParameters &p;
222// std::unique_ptr<AbstractFunctionSpaceElement> scorrection;
223// std::unique_ptr<AbstractFunctionSpaceElement> startIterate;
224//};
225
226
227
230{
231
232public:
234
235
237 AbstractChart& chart_,
238 AbstractNorm& n,
239 Parameters& p_):
240 NewtonsMethod(l, chart_,n,p_), p(p_) {}
241
242protected:
243
244 void setDesiredRelativeAccuracy(double ra) { assert(ra>0); p.relativeAccuracy=ra; }
245
247
249
251
255 AbstractLinearization const& lin);
256
259 AbstractLinearization const& lin);
260
262
263 RegularityTest regularityTest(double scalingFactor);
264
265private:
266 double mu;
267 double nsc;
268 bool failedbydamping;
269 Parameters &p;
270 std::unique_ptr<AbstractFunctionSpaceElement> scorrection;
271 std::unique_ptr<AbstractFunctionSpaceElement> startIterate;
272};
273
274} // namespace Kaskade
275#endif
Abstract Vector for function space algorithms.
Class that models the functionality of a (possibly inexact) linear solver.
Damped Newton's method that measures the Newton contraction via a simplified Newton step.
virtual AcceptanceTest evaluateTrialIterate(AbstractFunctionSpaceElement const &trialIterate, AbstractFunctionSpaceElement const &correction, AbstractLinearization const &lin)
void setDesiredRelativeAccuracy(double ra)
set the desired accuracy
virtual Convergence convergenceTest(AbstractFunctionSpaceElement const &correction, AbstractFunctionSpaceElement const &iterate)
Return true, if convergence is detected, false otherwise.
DampedCovariantNewtonParameters & p
virtual void initialize()
Called before Iteration.
std::unique_ptr< AbstractFunctionSpaceElement > startIterate
std::unique_ptr< AbstractFunctionSpaceElement > scorrection
virtual DampedCovariantNewtonParameters & getParameters()
virtual void predictNextDampingFactor(AbstractFunctionSpaceElement &correction)
Should compute a damping factor.
std::unique_ptr< AbstractFunctionSpaceElement > auxvector
DampedCovariantNewtonParameters Parameters
DampedCovariantNewtonMethod(AbstractNewtonDirection &l, AbstractChart &chart_, AbstractNorm &n, DampedCovariantNewtonParameters &p_)
virtual double & dampingFactor()
Return a damping factor.
virtual void updateIterate(AbstractFunctionSpaceElement &iterate, AbstractFunctionSpaceElement &trialIterate, AbstractLinearization const &lin)
update an accepted iterate, default: iterate=trialIterate
virtual RegularityTest regularityTest(double scalingFactor)
virtual void computeTrialIterate(AbstractFunctionSpaceElement &trialIterate, AbstractFunctionSpaceElement const &direction, AbstractLinearization const &lin)
Paramters that are used and Logged by GuardedCovariantNewtonMethod.
LoggedQuantity< double > absoluteAccuracyLast
LoggedQuantity< double > SCorrByCorr
DampedCovariantNewtonParameters(double desiredAccuracy_, int maxSteps_, double minDampingFactor_=1e-12)
LoggedQuantity< double > lengthOfStep
void doForAll(LQAction::ToDo td)
To be overloaded by derived class.
LoggedQuantity< double > totalCorrection
LoggedQuantity< double > dampingFactor
Paramters that are used and Logged by GuardedCovariantNewtonMethod.
GuardedCovariantNewtonParameters(double desiredAccuracy_, int maxSteps_)
virtual void doForAll(LQAction::ToDo td)
To be overloaded by derived class.
void doAction(LQAction::ToDo td, std::string const &name_="noName")
ModifiedCovariantNewtonParameters(double desiredAccuracy_, int maxSteps_, double ThetaMaxAllowed_, double mdf_=1e-12)
virtual void doForAll(LQAction::ToDo td)
To be overloaded by derived class.
LoggedQuantity< double > normCorr
Definition: newton_base.hh:54
virtual void reset()
Reset all quantities in this class.
Definition: newton_base.hh:35
virtual void doForAll(LQAction::ToDo td)
To be overloaded by derived class.
Definition: newton_base.hh:49
Base class for Newton's method. Defines the main algorithm, potentially using damping.
Definition: newton_base.hh:89
std::unique_ptr< AbstractFunctionSpaceElement > correction
Definition: newton_base.hh:236
AbstractNorm & norm
Definition: newton_base.hh:233
std::unique_ptr< AbstractFunctionSpaceElement > iterate
Definition: newton_base.hh:236
std::unique_ptr< AbstractFunctionSpaceElement > trialIterate
Definition: newton_base.hh:236
A Newton method that uses a pointwise damping strategy to cope with bounds.
RegularityTest regularityTest(double scalingFactor)
void updateIterate(AbstractFunctionSpaceElement &iterate, AbstractFunctionSpaceElement &trialIterate, AbstractLinearization const &lin)
update an accepted iterate, default: iterate=trialIterate
ModifiedCovariantNewtonParameters Parameters
void predictNextDampingFactor(AbstractFunctionSpaceElement &correction)
Should compute a damping factor.
virtual AcceptanceTest evaluateTrialIterate(AbstractFunctionSpaceElement const &trialIterate, AbstractFunctionSpaceElement const &correction, AbstractLinearization const &lin)
StateConstraintsNewtonMethod(AbstractNewtonDirection &l, AbstractChart &chart_, AbstractNorm &n, Parameters &p_)
void initialize()
Called before Iteration.
Convergence convergenceTest(AbstractFunctionSpaceElement const &correction, AbstractFunctionSpaceElement const &iterate)
Return true, if convergence is detected, false otherwise.
void setDesiredRelativeAccuracy(double ra)
set the desired accuracy
enum toDo ToDo