continuation Function

public function continuation(f, X0, ns0, S0, dS0, max_points, solver_tol, update_specification, postprocess, solver, stop) result(XS)

Numerical continuation of a function.

Uses Algower method of numerical continuation to trace a line that solves a system of the kind:

Where is the variables vector and (S)\ is the value of the specification. The method works with by providing a good set of initial points to solve the system of equations with an extrapolation using the previous solved point information.

Arguments

Type IntentOptional Attributes Name
procedure(continuation_function) :: f

Function to trace

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

Initial point

integer, intent(in) :: ns0

Initial specification

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

Initial specification value

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

Initial

integer, intent(in) :: max_points

Maximum number of points to trace

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

Point solver tolerance

procedure(process), optional :: update_specification

Procedure to select the new specification and define the next step (\DeltaS)\, defaults to:

ns = maxloc(abs(dXdS), dim=1)
dS = dXdS(ns)*dS
dXdS = dXdS/dXdS(ns)
dS = sign(minval(abs([0.05_pr, dS])), dS)
procedure(process), optional :: postprocess

Any kind of postprocess that could be done after defining the next step

procedure(continuation_solver), optional :: solver

Solver procedures, uses Newton-Raphson by default

procedure(continuation_stopper), optional :: stop

Stopping procedure

Return Value real(kind=pr), (max_points,size(X0))


Variables

Type Visibility Attributes Name Initial
real(kind=pr), public :: S
real(kind=pr), public :: X(size(X0))
real(kind=pr), public :: dF(size(X0),size(X0))
real(kind=pr), public :: dFdS(size(X0))
real(kind=pr), public :: dS
real(kind=pr), public :: dXdS(size(X0))
real(kind=pr), public :: fval(size(X0))
integer, public :: i
integer, public :: max_iters = 500
integer, public :: newton_its
integer, public :: ns