SpECTRE
v2025.01.30
|
Items related to the NewtonRaphson nonlinear solver. More...
Classes | |
struct | NewtonRaphson |
A Newton-Raphson correction scheme for nonlinear systems of equations \(A_\mathrm{nonlinear}(x)=b\). More... | |
Functions | |
double | next_step_length (size_t globalization_iteration_id, double step_length, double prev_step_length, double residual, double residual_slope, double next_residual, double prev_residual) |
Find the next step length for the line-search globalization. More... | |
Items related to the NewtonRaphson nonlinear solver.
double NonlinearSolver::newton_raphson::next_step_length | ( | size_t | globalization_iteration_id, |
double | step_length, | ||
double | prev_step_length, | ||
double | residual, | ||
double | residual_slope, | ||
double | next_residual, | ||
double | prev_residual | ||
) |
Find the next step length for the line-search globalization.
The next step length is chosen such that it minimizes the quadratic (first globalization step, i.e., when globalization_iteration_id
is 0) or cubic (subsequent globalization steps) polynomial interpolation. This function implements Algorithm A6.3.1 in [50] (p. 325). This is how argument names map to symbols in that algorithm:
step_length
: \(\lambda\)prev_step_length
: \(\lambda_\mathrm{prev}\)residual
: \(f_c\)residual_slope
: \(g^T p < 0\)next_residual
: \(f_+\)prev_residual
: \(f_{+,\mathrm{prev}}\)Note that the argument residual_slope
is the derivative of the residual function \(f\) w.r.t. the step length, i.e. \(\frac{\mathrm{d}f}{\mathrm{d}\lambda}\), which must be negative. For the common scenario where \(f(x)=|\boldsymbol{r}(x)|^2\), i.e. the residual function is the L2 norm of a residual vector \(\boldsymbol{r}(x)\), and where that in turn is the residual of a nonlinear equation \(\boldsymbol{r}(x)=b-A_\mathrm{nonlinear}(x)\) in a Newton-Raphson step as described in NonlinearSolver::newton_raphson::NewtonRaphson
, then the residual_slope
reduces to
\begin{equation} \frac{\mathrm{d}f}{\mathrm{d}\lambda} = \frac{\mathrm{d}f}{\mathrm{d}x^i} \frac{\mathrm{d}x^i}{\mathrm{d}\lambda} = 2 \boldsymbol{r}(x) \cdot \frac{\mathrm{d}\boldsymbol{r}}{\mathrm{d}x^i} \frac{\mathrm{d}x^i}{\mathrm{d}\lambda} = -2 |\boldsymbol{r}(x)|^2 = -2 f(x) \equiv -2 f_c \text{.} \end{equation}
Here we have used the relation
\begin{equation} \frac{\mathrm{d}\boldsymbol{r}}{\mathrm{d}x^i} \frac{\mathrm{d}x^i}{\mathrm{d}\lambda} = -\frac{\delta A_\mathrm{nonlinear}}{\delta x}\cdot\delta x = -r \end{equation}
of a Newton-Raphson step of full length \(\delta x\).