solve_lm Subroutine

private subroutine solve_lm(J, F, lambda, jscale, s, dX, cond_est)

Arguments

Type IntentOptional Attributes Name
real(kind=pr), intent(in) :: J(:,:)

Jacobian at x

real(kind=pr), intent(in) :: F(:)

Residual at x

real(kind=pr), intent(inout) :: lambda

LM damping (absolute)

real(kind=pr), intent(in) :: jscale

||J||_F^2/n

type(newton_settings), intent(in) :: s

Solver settings

real(kind=pr), intent(out) :: dX(:)

Computed Newton/LM step

real(kind=pr), intent(out) :: cond_est

cond(A) estimate


Calls

proc~~solve_lm~~CallsGraph proc~solve_lm solve_lm dgecon dgecon proc~solve_lm->dgecon dgetrf dgetrf proc~solve_lm->dgetrf dgetrs dgetrs proc~solve_lm->dgetrs proc~add_diagonal add_diagonal proc~solve_lm->proc~add_diagonal proc~mat1norm mat1norm proc~solve_lm->proc~mat1norm

Called by

proc~~solve_lm~~CalledByGraph proc~solve_lm solve_lm proc~newton newton proc~newton->proc~solve_lm

Variables

Type Visibility Attributes Name Initial
real(kind=pr), private, allocatable :: A(:,:)

Working copy of J (or J^T J + lam I)

real(kind=pr), private :: anorm

1-norm of A (input to dgecon)

integer, private :: info

LAPACK return code (0 = success)

integer, private, allocatable :: ipiv(:)

Pivot indices from dgetrf, size n

integer, private, allocatable :: iwork(:)

Integer workspace for dgecon, size n

integer, private :: n

Problem size

real(kind=pr), private :: rcond

Reciprocal condition number from dgecon

real(kind=pr), private, allocatable :: rhs(:)

Right-hand side (-F or -J^T F)

logical, private :: use_lm

.true. when the LM branch is used

real(kind=pr), private, allocatable :: work(:)

LAPACK workspace, size 4n