63 std::vector<std::shared_ptr<AbstractFunctionSpaceElement> > basis = std::vector<std::shared_ptr<AbstractFunctionSpaceElement> >())
const
66 newIterate += perturbation;
111 std::cout <<
"No Factorization available: set NewtonParameters::reuseFactorization=true" << std::endl;
197 if(quantityCycle.size()!=0)
198 if(*std::min_element(quantityCycle.begin(),quantityCycle.end())<quantity) hasIncreased=
true;
200 if(hasIncreased && quantity < *std::min_element(quantityCycle.begin(),quantityCycle.end()))
202 quantity = *std::min_element(quantityCycle.begin(),quantityCycle.end());
203 std::cout <<
"Detected Cycling: decreased below already accepted step size:" << quantity << std::endl;
207 for(
int i = 0; i< quantityCycle.size(); i++)
208 if(std::abs(quantityCycle[i]-quantity)<std::abs(quantity)*std::numeric_limits<double>::epsilon()){
209 quantity = quantityCycle[i+1];
210 std::cout <<
"Detected Cycling: two identical step sizes:" << quantity << std::endl;
214 if(quantityCycle.size() > 20){
215 quantity=quantity/4.0;
216 std::cout <<
"Detected Cycling: too many trials:" << quantity << std::endl;
219 quantityCycle.push_back(quantity);
224 std::vector<T> quantityCycle;
Interfaces for function space oriented algorithms.
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
Abstract Vector for function space algorithms.
Representation of a nonlinear functional.
virtual AbstractFunctionSpaceElement const & getOrigin() const =0
Get point of linearization.
Class that models the functionality of a (possibly inexact) linear solver.
void ordinary(AbstractFunctionSpaceElement &correction, AbstractLinearization &linearization)
void simplified(AbstractFunctionSpaceElement &correction, AbstractLinearization const &linearization, AbstractLinearization const &oldlinearization) const
Base class for algorithms. Provides a unified interface and some simple wrapper routines,...
void addPerturbation(AbstractFunctionSpaceElement &newIterate, AbstractFunctionSpaceElement const &perturbation, AbstractLinearization const &lin, std::vector< std::shared_ptr< AbstractFunctionSpaceElement > > basis=std::vector< std::shared_ptr< AbstractFunctionSpaceElement > >()) const
Base class for algorithmic parameters.
void doAction(LQAction::ToDo td, std::string const &name_="noName")
LoggedQuantity< double > normCorr
virtual void reset()
Reset all quantities in this class.
NewtonParameters(double desiredAccuracy_, int maxSteps_)
virtual void doForAll(LQAction::ToDo td)
To be overloaded by derived class.
virtual ~NewtonParameters()
friend class SimpleNewtonMethod
bool detectCycling(T &quantity)
Base class for Newton's method. Defines the main algorithm, potentially using damping.
virtual double maxSteps()
return the maximal number of steps
virtual void initialize()
Called before Iteration.
virtual AcceptanceTest evaluateTrialIterate(AbstractFunctionSpaceElement const &trialIterate, AbstractFunctionSpaceElement const &correction, AbstractLinearization const &lin)=0
void setDesiredAccuracy(double da)
set the desired accuracy
AbstractLinearization * newtonPtr
AbstractLinearization const & getLastSimplifiedLinearization()
std::unique_ptr< AbstractFunctionSpaceElement > correction
virtual void finalize(int)
Called after Iteration.
void solve(AbstractFunctional *f, AbstractFunctionSpaceElement &x)
Solve the system f=0 with starting value x. On (successful) exit, the solution is x,...
void resetParameters()
Reset all algorithmic parameters to their default values.
AbstractLinearization const & getLastLinearization()
std::unique_ptr< AbstractFunctionSpaceElement > iterate
AbstractFunctional * functional
virtual void terminationMessage(int flag)
void oneStep(AbstractFunctional *f, AbstractLinearization *l, AbstractFunctionSpaceElement &x)
Perform one Newton step (which may be several trial steps, if damping is applied)
virtual void predictNextDampingFactor(AbstractFunctionSpaceElement &correction)
Should compute a damping factor.
AbstractNewtonDirection & linearSolver
virtual void computeTrialIterate(AbstractFunctionSpaceElement &trialIterate, AbstractFunctionSpaceElement const &direction, AbstractLinearization const &lin)
NewtonsMethod(AbstractNewtonDirection &l, AbstractChart &chart_, AbstractNorm &n, Parameters &p_)
Create Newton's Method, providing a solver, a norm and algorithmic parameters.
virtual double & dampingFactor()
Return a damping factor.
virtual void getSearchDirection(AbstractFunctionSpaceElement &direction)
void resolve(AbstractFunctionSpaceElement &x, AbstractLinearization const &l)
virtual void setDesiredRelativeAccuracy(double ra)
set the desired accuracy
virtual Convergence convergenceTest(AbstractFunctionSpaceElement const &correction, AbstractFunctionSpaceElement const &iterate)=0
Return true, if convergence is detected, false otherwise.
std::unique_ptr< AbstractFunctionSpaceElement > trialIterate
virtual void initNewtonStep()
std::unique_ptr< AbstractLinearization > newtonLinearization
std::unique_ptr< AbstractLinearization > simplifiedLinearization
virtual void logQuantities()
Performs logging of quantities.
NewtonParameters Parameters
virtual Parameters & getParameters()
virtual void updateIterate(AbstractFunctionSpaceElement &iterate, AbstractFunctionSpaceElement &trialIterate, AbstractLinearization const &lin)
update an accepted iterate, default: iterate=trialIterate
virtual RegularityTest regularityTest(double scalingFactor)