OGS
NumLib::DampingReductionStrategy Class Referencefinal

Detailed Description

Newton step strategy that applies a fixed base damping factor and relaxes it linearly toward 1.0 as iterations proceed.

The effective damping at iteration \( k \) is

\[ \alpha_k = \alpha + (1 - \alpha)\,\mathrm{clamp}(k / r,\, 0,\, 1), \]

where \( \alpha \) is the base damping factor and \( r \) is the reduction parameter. The accepted step is \( x_{\rm new} = x - \alpha_k \cdot \Delta x \).

Definition at line 21 of file DampingReductionStrategy.h.

#include <DampingReductionStrategy.h>

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

Public Member Functions

 DampingReductionStrategy (double damping, double damping_reduction)
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
double _damping_reduction

Additional Inherited Members

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

Constructor & Destructor Documentation

◆ DampingReductionStrategy()

NumLib::DampingReductionStrategy::DampingReductionStrategy ( double damping,
double damping_reduction )

Definition at line 13 of file DampingReductionStrategy.cpp.

References _damping, and _damping_reduction.

Member Function Documentation

◆ applyStep()

StepResult NumLib::DampingReductionStrategy::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 19 of file DampingReductionStrategy.cpp.

27{
28 double damping = _damping;
29
31 {
32 damping = _damping_policy->apply(minus_delta_x, x, _damping);
33 }
34
35 damping +=
36 (1.0 - damping) * std::clamp(iteration / _damping_reduction, 0.0, 1.0);
37
38 MathLib::LinAlg::axpy(x_new, -damping, minus_delta_x);
39
40 return {.success = true, .step_length = damping, .x_new_is_set = true};
41}
DampingPolicy const * _damping_policy
void axpy(PETScVector &y, PetscScalar const a, PETScVector const &x)
Definition LinAlg.cpp:50

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

Member Data Documentation

◆ _damping

double NumLib::DampingReductionStrategy::_damping
private

Definition at line 35 of file DampingReductionStrategy.h.

Referenced by DampingReductionStrategy(), and applyStep().

◆ _damping_reduction

double NumLib::DampingReductionStrategy::_damping_reduction
private

Definition at line 36 of file DampingReductionStrategy.h.

Referenced by DampingReductionStrategy(), and applyStep().


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