OGS
NumLib::FixedDampingStrategy Class Referencefinal

Detailed Description

Newton step strategy that applies a fixed damping factor to every update.

The accepted step is \( x_{\rm new} = x - \alpha \cdot \Delta x \), where \( \alpha \) is the damping factor (1.0 = full Newton step, no damping).

Definition at line 15 of file FixedDampingStrategy.h.

#include <FixedDampingStrategy.h>

Inheritance diagram for NumLib::FixedDampingStrategy:
[legend]
Collaboration diagram for NumLib::FixedDampingStrategy:
[legend]

Public Member Functions

 FixedDampingStrategy (double damping)
StepResult applyStep (GlobalVector const &x, GlobalVector const &minus_delta_x, GlobalVector const &res, GlobalMatrix const &J, GlobalVector &x_new, NewtonStepContext &ctx, int iteration) override
Public Member Functions inherited from NumLib::NewtonStepStrategy
virtual void initialize (GlobalVector const &)
void setDampingPolicy (DampingPolicy const *policy)
virtual ~NewtonStepStrategy ()=default

Private Attributes

double _damping

Additional Inherited Members

Protected Attributes inherited from NumLib::NewtonStepStrategy
DampingPolicy const * _damping_policy = nullptr

Constructor & Destructor Documentation

◆ FixedDampingStrategy()

NumLib::FixedDampingStrategy::FixedDampingStrategy ( double damping)
explicit

Definition at line 11 of file FixedDampingStrategy.cpp.

11 : _damping(damping)
12{
13}

References _damping.

Member Function Documentation

◆ applyStep()

StepResult NumLib::FixedDampingStrategy::applyStep ( GlobalVector const & x,
GlobalVector const & minus_delta_x,
GlobalVector const & res,
GlobalMatrix const & J,
GlobalVector & x_new,
NewtonStepContext & ctx,
int iteration )
overridevirtual

Given the current solution x, the Newton direction minus_delta_x, the residual res, and the Jacobian J, compute and apply a step to x_new. The strategy is free to re-evaluate F(x) internally.

Parameters
[in]xcurrent solution
[in]minus_delta_xfull Newton step (J^{-1} r)
[in]resresidual at x
[in]JJacobian at x (may be used for curvature)
[out]x_newaccepted new solution
[in]ctxequation system context for re-evaluation
[in]iterationcurrent outer iteration number

Implements NumLib::NewtonStepStrategy.

Definition at line 15 of file FixedDampingStrategy.cpp.

22{
23 double damping = _damping;
24
26 {
27 damping = _damping_policy->apply(minus_delta_x, x, _damping);
28 }
29
30 MathLib::LinAlg::axpy(x_new, -damping, minus_delta_x);
31
32 return {.success = true, .step_length = damping, .x_new_is_set = true};
33}
DampingPolicy const * _damping_policy
void axpy(PETScVector &y, PetscScalar const a, PETScVector const &x)
Definition LinAlg.cpp:50

References _damping, NumLib::NewtonStepStrategy::_damping_policy, and MathLib::LinAlg::axpy().

Member Data Documentation

◆ _damping

double NumLib::FixedDampingStrategy::_damping
private

Definition at line 29 of file FixedDampingStrategy.h.

Referenced by FixedDampingStrategy(), and applyStep().


The documentation for this class was generated from the following files: