|
dune-fem 2.12-git
|
Loading...
Searching...
No Matches
newtoninverseoperator.hh
Go to the documentation of this file.
103 : public Dune::Fem::LocalParameter< NewtonParameter<SolverParam>, NewtonParameter<SolverParam> >
119 DUNE_THROW(InvalidStateException,"Keyprefix 'newton' is deprecated, replace with 'nonlinear'!");
129 DUNE_THROW(InvalidStateException,"Keyprefix 'newton' is deprecated, replace with 'nonlinear'!");
143 NewtonParameter( const SolverParam& baseParameter, const std::string keyPrefix = "fem.solver.nonlinear." )
152 template <class Parameter, std::enable_if_t<!std::is_base_of<SolverParam,Parameter>::value && !std::is_same<Parameter,ParameterReader>::value,int> i=0>
153 NewtonParameter( const Parameter& solverParameter, const std::string keyPrefix = "fem.solver.nonlinear." )
162 template <class ParamReader, std::enable_if_t<!std::is_same<ParamReader,SolverParam>::value && std::is_same<ParamReader,ParameterReader>::value,int> i=0>
163 NewtonParameter( const ParamReader ¶meter, const std::string keyPrefix = "fem.solver.nonlinear." )
164 // pass keyprefix for linear solvers, which is the same as keyprefix with nonlinear replaced by linear
165 : baseParam_( std::make_shared<SolverParam>( replaceNonLinearWithLinear(keyPrefix), parameter) ),
179 DUNE_THROW( InvalidStateException, "Parameter `linear.errormeasure` selecting the tolerance criteria in the linear solver must be `residualreduction` when using Eisenstat-Walker." );
234 maxIterations_ = parameter_.getValue< int >( keyPrefix_ + "maxiterations", std::numeric_limits< int >::max() );
262 maxLineSearchIterations_ = parameter_.getValue< int >( keyPrefix_ + "maxlinesearchiterations", std::numeric_limits< int >::max() );
283 return Forcing::to_id( parameter_.getEnum( keyPrefix_ + "lineSearch", LineSearchMethod::names(), LineSearchMethod::none ) );
285 return Forcing::to_id( parameter_.getEnum( keyPrefix_ + "linesearch", LineSearchMethod::names(), LineSearchMethod::none ) );
310 std::cout << "WARNING: using old parameter name '" << keypref + "linear.tolerance.strategy" << "',\n"
312 return Forcing::to_id( parameter_.getEnum( keyPrefix_ + "linear.tolerance.strategy", Forcing::names(), Forcing::none ) );
314 return Forcing::to_id( parameter_.getEnum( keyPrefix_ + "forcing", Forcing::names(), Forcing::none ) );
425 : public Operator< typename JacobianOperator::RangeFunctionType, typename JacobianOperator::DomainFunctionType >
428 typedef Operator< typename JacobianOperator::RangeFunctionType, typename JacobianOperator::DomainFunctionType > BaseType;
439 struct CheckMember<T, decltype((void) T::preconditioningAvailable, true)> : public std::true_type { };
470 static constexpr bool preconditioningAvailable = SelectPreconditioning< LinearInverseOperatorType > :: value;
480 typedef std::function< bool ( const RangeFunctionType &w, const RangeFunctionType &dw, double residualNorm ) > ErrorMeasureType;
488 NewtonInverseOperator ( LinearInverseOperatorType jInv, const DomainFieldType &epsilon, const ParameterType ¶meter )
494 finished_( [ epsilon ] ( const RangeFunctionType &w, const RangeFunctionType &dw, double res ) { return res < epsilon; } ),
509 explicit NewtonInverseOperator ( const ParameterType ¶meter = ParameterType( Parameter::container() ) )
558 void setMaxLinearIterations ( int maxLinearIterations ) { parameter_.setMaxLinearIterations( maxLinearIterations ); }
634 SolverInfoType info() const { return SolverInfoType( converged(), linearIterations(), iterations(), timing() ); }
653 // hold pointer to jacobian operator, if memory reallocation is needed, the operator should know how to handle this.
658 jOp_.reset( new JacobianOperatorType( std::forward< Args >( args ) ...) ); //, parameter_.parameter() ) );
704 JacobianOperatorType& jOp = jacobian( "jacobianOperator", dw.space(), u.space(), parameter_.solverParameter() );
virtual void operator()()=0
#define DUNE_THROW(E,...)
STL namespace.
@ InvalidResidual
@ Success
@ LineSearchFailed
@ LinearSolverFailed
@ LinearIterationsExceeded
@ IterationsExceeded
@ TooManyLinearIterations
@ TooManyIterations
void reset() noexcept
double elapsed() const noexcept
static ParameterContainer & container()
Definition io/parameter.hh:199
static bool verbose()
obtain the cached value for fem.verbose with default verbosity level 2
Definition io/parameter.hh:466
static const int extendedStatistics
Definition io/parameter.hh:194
static void append(int &argc, char **argv)
add parameters from the command line RangeType gRight;
Definition io/parameter.hh:219
static const int solverStatistics
Definition io/parameter.hh:193
Definition io/parameter.hh:576
int getEnum(const std::string &key, const std::string(&values)[n]) const
Definition reader.hh:227
T getValue(const std::string &key) const
get mandatory parameter
Definition reader.hh:161
bool exists(const std::string &key) const
check, whether a parameter is defined
Definition reader.hh:46
abstract differentiable operator
Definition differentiableoperator.hh:29
DomainFunction DomainFunctionType
type of discrete function in the operator's domain
Definition operator.hh:36
DomainFunction::RangeFieldType DomainFieldType
field type of the operator's domain
Definition operator.hh:41
RangeFunction RangeFunctionType
type of discrete function in the operator's range
Definition operator.hh:38
Adaptive tolerance selection for linear solver.
Definition newtoninverseoperator.hh:45
double newtonTolerance_
Definition newtoninverseoperator.hh:51
double etaMax() const
Definition newtoninverseoperator.hh:94
void setGamma(const double gamma)
Definition newtoninverseoperator.hh:92
void setTolerance(const double newtonTolerance)
Definition newtoninverseoperator.hh:84
double nextLinearTolerance(const double currentResidual) const
Definition newtoninverseoperator.hh:64
EisenstatWalkerStrategy(const double newtonTolerance, const double etaMax=0.99, const double gamma=0.1)
Definition newtoninverseoperator.hh:59
double previousEta_
Definition newtoninverseoperator.hh:49
void setEtaMax(const double etaMax)
Definition newtoninverseoperator.hh:88
double previousResidual_
Definition newtoninverseoperator.hh:50
Definition newtoninverseoperator.hh:104
virtual void setVerbose(bool verb)
Definition newtoninverseoperator.hh:226
virtual void setForcing(const int strategy)
Definition newtoninverseoperator.hh:317
NewtonParameter(const SolverParam &baseParameter, const std::string keyPrefix="fem.solver.nonlinear.")
Definition newtoninverseoperator.hh:143
virtual void setEisenstatWalkerEtaMax(const double etaMax)
Definition newtoninverseoperator.hh:334
virtual int forcing() const
Definition newtoninverseoperator.hh:298
virtual int maxLinearIterations() const
= max iterations of each linear solve
Definition newtoninverseoperator.hh:246
virtual void setEisenstatWalkerGamma(const double gamma)
Definition newtoninverseoperator.hh:351
NewtonParameter(const Parameter &solverParameter, const std::string keyPrefix="fem.solver.nonlinear.")
Definition newtoninverseoperator.hh:153
LIST_OF_INT(Forcing, none=0, eisenstatwalker=1)
virtual int maxLineSearchIterations() const
Definition newtoninverseoperator.hh:259
virtual void setMaxLineSearchIterations(const int maxLineSearchIter)
Definition newtoninverseoperator.hh:266
void checkForcingErrorMeasure()
Definition newtoninverseoperator.hh:173
virtual double eisenstatWalkerGamma() const
Definition newtoninverseoperator.hh:343
virtual void setLineSearch(const int method)
Definition newtoninverseoperator.hh:288
std::string replaceNonLinearWithLinear(const std::string &keyPrefix) const
Definition newtoninverseoperator.hh:133
virtual void setMaxLinearIterations(const int maxLinearIter)
Definition newtoninverseoperator.hh:253
virtual int maxIterations() const
Definition newtoninverseoperator.hh:231
LIST_OF_INT(LineSearchMethod, none=0, simple=1)
const SolverParam & linear() const
Definition newtoninverseoperator.hh:185
const ParameterReader & parameter() const
Definition newtoninverseoperator.hh:183
void checkDeprecatedParameters() const
Definition newtoninverseoperator.hh:113
const SolverParam & solverParameter() const
Definition newtoninverseoperator.hh:184
std::shared_ptr< SolverParam > baseParam_
Definition newtoninverseoperator.hh:107
virtual double tolerance() const
Definition newtoninverseoperator.hh:203
virtual double eisenstatWalkerEtaMax() const
Definition newtoninverseoperator.hh:326
virtual bool simplified() const
return true if simplified Newton is to be used
Definition newtoninverseoperator.hh:359
virtual void setTolerance(const double tol)
Definition newtoninverseoperator.hh:210
const std::string keyPrefix_
Definition newtoninverseoperator.hh:109
virtual void setMaxIterations(const int maxIter)
Definition newtoninverseoperator.hh:238
ParameterReader parameter_
Definition newtoninverseoperator.hh:111
virtual bool verbose() const
Definition newtoninverseoperator.hh:216
virtual int lineSearch() const
Definition newtoninverseoperator.hh:277
virtual bool forceNonLinear() const
Definition newtoninverseoperator.hh:366
NewtonParameter(const ParamReader ¶meter, const std::string keyPrefix="fem.solver.nonlinear.")
Definition newtoninverseoperator.hh:163
inverse operator based on a newton scheme
Definition newtoninverseoperator.hh:426
std::function< bool(const RangeFunctionType &w, const RangeFunctionType &dw, double residualNorm) > ErrorMeasureType
Definition newtoninverseoperator.hh:480
ErrorMeasureType finished_
Definition newtoninverseoperator.hh:677
void bind(const OperatorType &op, const PreconditionerType &preconditioner)
Definition newtoninverseoperator.hh:542
int linearIterations_
Definition newtoninverseoperator.hh:671
SelectPreconditioning< LinearInverseOperatorType >::type PreconditionerType
Definition newtoninverseoperator.hh:471
NewtonInverseOperator(LinearInverseOperatorType jInv, const DomainFieldType &epsilon, const ParameterType ¶meter)
Definition newtoninverseoperator.hh:488
DomainFieldType delta_
Definition newtoninverseoperator.hh:669
const int lsMethod_
Definition newtoninverseoperator.hh:676
Impl::SolverInfo SolverInfoType
performance info about last solver call
Definition newtoninverseoperator.hh:483
const OperatorType * op_
Definition newtoninverseoperator.hh:663
int linearIterations() const
Definition newtoninverseoperator.hh:557
int stepCompleted_
Definition newtoninverseoperator.hh:675
const bool verbose_
Definition newtoninverseoperator.hh:666
static constexpr bool preconditioningAvailable
type of preconditioner for linear solver
Definition newtoninverseoperator.hh:470
ParameterType parameter_
Definition newtoninverseoperator.hh:674
JacobianOperator JacobianOperatorType
type of operator's Jacobian
Definition newtoninverseoperator.hh:461
bool converged() const
Definition newtoninverseoperator.hh:586
std::unique_ptr< JacobianOperatorType > jOp_
Definition newtoninverseoperator.hh:673
void setMaxIterations(int maxIterations)
Definition newtoninverseoperator.hh:556
BaseType::DomainFieldType DomainFieldType
Definition newtoninverseoperator.hh:476
std::vector< double > timing_
Definition newtoninverseoperator.hh:681
EisenstatWalkerStrategy eisenstatWalker_
Definition newtoninverseoperator.hh:679
NewtonInverseOperator(const ParameterType ¶meter=ParameterType(Parameter::container()))
Definition newtoninverseoperator.hh:509
int iterations() const
Definition newtoninverseoperator.hh:555
const std::vector< double > & timing() const
returns [overall, jacobian, solve] timings in seconds for last operator () call.
Definition newtoninverseoperator.hh:631
void bindOperatorAndPreconditioner(JacobianOperatorType &jOp) const
Definition newtoninverseoperator.hh:637
SolverInfoType info() const
return performance information about last solver run */
Definition newtoninverseoperator.hh:634
BaseType::DomainFunctionType DomainFunctionType
Definition newtoninverseoperator.hh:473
void bind(const OperatorType &op)
Definition newtoninverseoperator.hh:540
LinearInverseOperatorType jInv_
Definition newtoninverseoperator.hh:672
NewtonInverseOperator(const DomainFieldType &epsilon, const ParameterReader ¶meter=Parameter::container())
Definition newtoninverseoperator.hh:531
BaseType::RangeFunctionType RangeFunctionType
Definition newtoninverseoperator.hh:474
void setErrorMeasure(ErrorMeasureType finished)
Definition newtoninverseoperator.hh:536
DifferentiableOperator< JacobianOperatorType > OperatorType
type of operator to invert
Definition newtoninverseoperator.hh:464
void setMaxLinearIterations(int maxLinearIterations)
Definition newtoninverseoperator.hh:558
bool verbose() const
Definition newtoninverseoperator.hh:565
const int maxLineSearchIterations_
Definition newtoninverseoperator.hh:667
LInvOp LinearInverseOperatorType
type of linear inverse operator
Definition newtoninverseoperator.hh:467
JacobianOperatorType & jacobian(Args &&... args) const
Definition newtoninverseoperator.hh:655
NewtonInverseOperator(const DomainFieldType &epsilon, const ParameterType ¶meter)
Definition newtoninverseoperator.hh:520
NewtonFailure failed() const
Definition newtoninverseoperator.hh:568
virtual int lineSearch(RangeFunctionType &w, RangeFunctionType &dw, const DomainFunctionType &u, DomainFunctionType &residual) const
Definition newtoninverseoperator.hh:588
void updateLinearTolerance() const
Definition newtoninverseoperator.hh:559
const PreconditionerType * preconditioner_
Definition newtoninverseoperator.hh:664
EisenstatWalkerStrategy & eisenstatWalker()
Definition newtoninverseoperator.hh:538
NewtonParameter< typename LinearInverseOperatorType::SolverParameterType > ParameterType
Definition newtoninverseoperator.hh:478
double residual() const
Definition newtoninverseoperator.hh:566
static const int residualReduction
Definition solver/parameter.hh:17
T endl(T... args)
T erase(T... args)
T fill(T... args)
T find(T... args)
T flush(T... args)
T forward(T... args)
T isnan(T... args)
T max(T... args)
T min(T... args)
T regex_replace(T... args)
T reset(T... args)
T length(T... args)
T sqrt(T... args)
Legal Statements / Impressum | Hosted by TU Dresden & Uni Heidelberg | Generated by
1.9.8