module Spils:sig..end
Scaled Preconditioned Iterative Linear Solvers.
include Sundials_LinearSolver.Iterative
type 'data solve_arg = {
|
uscale : |
(* | Diagonal elements of the scaling matrix for | *) |
|
fscale : |
(* | Diagonal elements of the scaling matrix
for | *) |
}
Arguments passed to the preconditioner solver function.
type'dprec_solve_fn =(unit, 'd) Kinsol.jacobian_arg -> 'd solve_arg -> 'd -> unit
Callback functions that solve a linear system involving a
preconditioner matrix. The call prec_solve_fn jarg sarg v must solve
$Pz = r$, where jarg is a Kinsol.jacobian_arg with no work vectors,
sarg is a Kinsol.Spils.solve_arg giving the scaling matrices, and
v is initially the right-hand side vector $r$ and is later filled
with the computed solution $z$.
$P$ is a preconditioner matrix that approximates the system
Jacobian $J = \frac{\partial F}{\partial u}$.
Raising Sundials.RecoverableFailure indicates a recoverable error.
Any other exception is treated as an unrecoverable error.
jarg or sarg, nor z should be
accessed after the function has returned.type'dprec_setup_fn =(unit, 'd) Kinsol.jacobian_arg -> 'd solve_arg -> unit
Callback functions that preprocess or evaluate Jacobian-related data
need by Kinsol.Spils.prec_solve_fn. In the call prec_setup_fn jarg sarg,
jarg is a Kinsol.jacobian_arg with no work vectors and sarg is a
Kinsol.Spils.solve_arg giving the scaling matrices.
The callback should raise an exception if unsuccessful.
jarg and sarg should not be accessed after
the function has returned.type('d, 'k)preconditioner =('d, 'k) SpilsTypes.preconditioner
Specifies a preconditioner, including the type of preconditioning
(none or right) and callback functions.
The following functions and those in Kinsol_bbd construct
preconditioners.
val prec_none : ('d, 'k) preconditionerNo preconditioning.
val prec_right : ?setup:'d prec_setup_fn ->
'd prec_solve_fn -> ('d, 'k) preconditionerRight preconditioning. The Kinsol.Spils.prec_setup_fn should compute
the right preconditioner matrix $P$ which is used to form
the scaled preconditioned linear system
$(D_F J(u) P^{-1} D_u^{-1} \cdot (D_u P x) = * -D_F F(u)$.
type'datajac_times_vec_fn ='data -> 'data -> 'data -> bool -> bool
Callback functions that compute (an approximation to) the Jacobian
times a vector. In the call jac_times_vec_fn v jv u new_u, v is the
vector multiplying the Jacobian, jv is the vector in which to store
the result—$\mathtt{jv} = J\mathtt{v}$—, u is the current
value of the dependent variable vector, and new_u=true indicates that
the Jacobian data should be recomputed. Returning false requests an
update of the Jacobian data at the next call.
v, jv, and u should not be accessed after the function
has returned.val solver : ('m, 'd, 'k, [> `Iter ]) Sundials.LinearSolver.t ->
?jac_times_vec:'d jac_times_vec_fn ->
?jac_times_sys:'d Kinsol.sysfn ->
('d, 'k) preconditioner -> ('d, 'k) Kinsol.linear_solverCreate a Kinsol-specific linear solver from a generic iterative linear solver.
The jac_times_sys argument specifies an alternative system
function for use in the internal Jacobian-vector product difference
quotient approximation. It is incorrect to specify both this argument
and jac_times_vec.
NB: a jac_times_setup_fn is not supported in
Config.sundials_version < 3.0.0.
NB: a jac_times_sys function is not supported in
Config.sundials_version < 5.3.0.
val get_work_space : ('d, 'k) Kinsol.session -> int * intReturns the sizes of the real and integer workspaces used by the spils linear solver.
real_size, integer_size)val get_num_lin_iters : ('d, 'k) Kinsol.session -> intReturns the cumulative number of linear iterations.
val get_num_lin_conv_fails : ('d, 'k) Kinsol.session -> intReturns the cumulative number of linear convergence failures.
val get_num_prec_evals : ('d, 'k) Kinsol.session -> intReturns the cumulative number of calls to the setup function.
val get_num_prec_solves : ('d, 'k) Kinsol.session -> intReturns the cumulative number of calls to the preconditioner solve function.
val get_num_jtimes_evals : ('d, 'k) Kinsol.session -> intReturns the cumulative number of calls to the Jacobian-vector function.
val get_num_lin_func_evals : ('d, 'k) Kinsol.session -> intReturns the number of calls to the system function for finite difference quotient Jacobian-vector product approximations. This counter is only updated if the default difference quotient function is used.
val set_preconditioner : ('d, 'k) Kinsol.session ->
?setup:'d prec_setup_fn -> 'd prec_solve_fn -> unitChange the preconditioner functions.
val set_jac_times : ('d, 'k) Kinsol.session -> 'd jac_times_vec_fn -> unitChange the Jacobian-times-vector function.
val clear_jac_times : ('d, 'k) Kinsol.session -> unitRemove a Jacobian-times-vector function and use the default implementation.