6#include "dune/grid/config.h"
17 class QuadraticFunction;
18 class RegularizedQuadraticFunction;
34 X const& x = Bridge::getImpl<X>(v);
35 X const& y = Bridge::getImpl<X>(w);
39 int sizeu=x.descriptions.degreesOfFreedom(0,1);
40 int sizey=x.descriptions.degreesOfFreedom(1,2);
44 std::vector<double> Hx(sizeu,0.0), argument1(sizeu,0.0), argument2(sizeu,0.0);
47 Hu.
axpy(Hx, argument1);
48 for(
int i=0; i<sizeu; ++i) sumu += Hx[i]*argument2[i];
54 std::vector<double> Hx(sizey,0.0), argument1(sizey,0.0),argument2(sizey,0.0);
57 Hy.
axpy(Hx, argument1);
58 for(
int i=0; i<sizey; ++i) sumy += Hx[i]*argument2[i];
91 void setThetas(
double thetaNormal,
double thetaAim,
double thetaMax);
102 void ensureAdmissibleThetas();
104 double ThetaAim = 0.25;
105 double ThetaNormal = 0.1;
106 double ThetaMax = 0.5;
108 double sqrtEps = sqrt(1e-15);
109 double thirdSqrtEps = 1e-5;
119 std::vector<std::shared_ptr<AbstractFunctionSpaceElement> > basis = std::vector<std::shared_ptr<AbstractFunctionSpaceElement> >())
const
122 newIterate.
axpy_role(1.0,perturbation,
"primal");
125 std::unique_ptr<AbstractChart>
clone()
const {
return std::unique_ptr<PrimalChart>(
new PrimalChart(*
this)); }
178 void updateConstraintD1LipschitzConstant(
double normSimplifiedNormal,
double normCAtCorr);
179 double updateLagrangianD2LipschitzConstant(
AbstractLinearization const& lin_x0,
AbstractFunctionSpaceElement const& secondOrderCorrected,
double normCAtCorr,
double quadraticModelAtCorr,
RegularizedQuadraticFunction const& cubic,
double nu, std::vector<double>
const& tau,
AbstractFunctionSpaceElement const& normalStep,
AbstractFunctionSpaceElement const& trialIterate,
AbstractFunctionSpaceElement const& sNormalStep,
AbstractFunctionSpaceElement const& correction,
double Lxdn_res);
181 double updateNormalStepDampingFactor(
double normNormal)
const;
182 void updateTangentialDampingFactor(
double nu,
double normNormal,
double normTangential,
RegularizedQuadraticFunction const& cubic, std::vector<double>& tau)
const;
185 AcceptanceTest acceptanceTest(
double eta,
double nu, std::vector<double>
const& tau,
double normOfCorrection)
const;
186 bool regularityTest(
double nu, std::vector<double>
const& tau,
bool reliableQuadraticModel)
const;
187 Convergence convergenceTest(
double nu, std::vector<double>
const& tau,
double normOfCorrection)
const;
189 void terminationMessage(
int flag);
190 void printNormalStep(
double normNormal,
double nu)
const;
191 void printTangentialStep(
double normTangential,
double tau)
const;
193 bool noDamping(
double d)
const;
194 bool noDamping(std::vector<double>
const& tau)
const;
196 std::unique_ptr<AbstractFunctionSpaceElement> createCorrection(
double nu,
AbstractFunctionSpaceElement const& normalStep, std::vector<double>
const& tau, std::vector<std::shared_ptr<AbstractFunctionSpaceElement> >
const& tangentialBasis)
const;
201 std::unique_ptr<AbstractChart const> chart = std::unique_ptr<AbstractChart const>(
new PrimalChart());
204 std::shared_ptr<AbstractLinearization> normalLinearization =
nullptr, tangentialLinearization =
nullptr;
210 std::string csPre = std::string(
"COMPOSITE STEP: ");
211 std::unique_ptr<AbstractFunctionSpaceElement> iterate;
214 double dampingFactorTolerance = 1e-2;
215 double normalStepComputationTime = 0, tangentialStepComputationTime = 0;
218 double normOfLastCorrection = -1., normOfLastCorrection_Undamped = -1., normOfIterate = 0;
Interfaces for function space oriented algorithms.
Representation of an error estimator.
Abstract Vector for function space algorithms.
AbstractFunctionSpaceElement & axpy_role(double alpha, AbstractFunctionSpaceElement const &l, std::string const role)
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.
Base class for algorithms. Provides a unified interface and some simple wrapper routines,...
void axpy(Y &out, X const &in, Scalar alpha=1.0, int nvectors=1) const
Matrix-vector multiplication: out += alpha * (*this) * in.
void solve(AbstractFunctional &fN, AbstractFunctional &fT, AbstractFunctionSpaceElement &x, AbstractHierarchicalErrorEstimator &hbErrorEstimator_)
Solve the system f=0 with starting value x. On (successful) exit, the solution is x,...
void solve(AbstractFunctional &fN, AbstractFunctional &fT, AbstractFunctionSpaceElement &x)
Solve the system f=0 with starting value x. On (successful) exit, the solution is x,...
Optimization(AbstractNormalDirection &normalSolver, AbstractTangentialSpace &tangentSpace_, AbstractScalarProduct &nL, OptimizationParameters const &p_, double omegaCinit=1, double omegaLinit=1, int verbose=1)
Create Newton's Method, providing a solver, a norm and algorithmic parameters.
Optimization(AbstractScalarProduct &nL, AbstractScalarProduct &nC, AbstractChart const &chart_, OptimizationParameters const &p_, AbstractCompositeStepErrorEstimator *errorEstimator_, int verbose=1)
Create Newton's Method, providing a solver, a norm and algorithmic parameters.
Optimization(AbstractNormalDirection &normalSolver, AbstractScalarProduct &nL, AbstractScalarProduct &nC, AbstractChart const &chart_, OptimizationParameters const &p_, int verbose=1)
void solve(AbstractFunctional &f, AbstractFunctionSpaceElement &x, AbstractHierarchicalErrorEstimator &errorEstimator)
double minimalDampingFactor
OptimizationParameters & operator=(OptimizationParameters const &)=default
OptimizationParameters(double desiredAccuracy_, int maxSteps_)
double getThetaNormal() const
double getThirdSqrtEps() const
void setThetaAim(double theta)
double requiredRelativeError
void setThetas(double thetaNormal, double thetaAim, double thetaMax)
double getSqrtEps() const
double getThetaMax() const
void setThetaNormal(double theta)
void setThetaMax(double theta)
double getThetaAim() const
OptimizationParameters(OptimizationParameters const &)=default
double desiredEstimatorAccuracy
std::unique_ptr< AbstractChart > clone() const
void addPerturbation(AbstractFunctionSpaceElement &newIterate, AbstractFunctionSpaceElement const &perturbation, AbstractLinearization const &lin, std::vector< std::shared_ptr< AbstractFunctionSpaceElement > > basis=std::vector< std::shared_ptr< AbstractFunctionSpaceElement > >()) const
Abstract base class for a sparse linear system.
virtual void getMatrixBlocks(MatrixAsTriplet< double > &mat, int rbegin, int rend, int colbegin, int colend) const =0
Return matrix blocks of the linear system in triplet format.
OutIter vectorToSequence(double x, OutIter iter)
Bridge classes that connect low level FE algorithms to higher level algorithms.
virtual void setOrigin(AbstractLinearization const &linearization)
virtual double operator()(AbstractFunctionSpaceElement const &v, AbstractFunctionSpaceElement const &w) const
virtual ~EnergyScalarProduct()