module Spils:sig..end
Scaled Preconditioned Iterative Linear Solvers.
include Sundials_LinearSolver.Iterative
type 'd prec_solve_arg = {
|
rhs : |
(* | Right-hand side vector of the linear system. | *) |
|
gamma : |
(* | Scalar $\gamma$ in the Newton matrix given by $M = I - \gamma J$. | *) |
|
delta : |
(* | Input tolerance for iterative methods. | *) |
|
left : |
(* |
| *) |
}
Arguments passed to the preconditioner solver function.
type'dprec_solve_fn =(unit, 'd) Cvode.jacobian_arg -> 'd prec_solve_arg -> 'd -> unit
Callback functions that solve a linear system involving a
preconditioner matrix. In the call prec_solve_fn jac arg z,
jac is a Cvode.jacobian_arg with no work vectors, arg is
a Cvode.Spils.prec_solve_arg that specifies the linear system, and z is
computed to solve $P\mathtt{z} = \mathtt{arg.rhs}$.
$P$ is a preconditioner matrix, which approximates, however crudely,
the Newton matrix $M = I - \gamma J$ where
$J = \frac{\partial f}{\partial y}$.
Raising Sundials.RecoverableFailure indicates a recoverable error.
Any other exception is treated as an unrecoverable error.
jac, arg, and z should not
be accessed after the function has returned.type'dprec_setup_fn =(unit, 'd) Cvode.jacobian_arg -> bool -> float -> bool
Callback functions that preprocess or evaluate Jacobian-related data
needed by Cvode.Spils.prec_solve_fn. In the call prec_setup_fn jac jok gamma,
jac is a Cvode.jacobian_arg with no work vectors, jok indicates
whether any saved Jacobian-related data can be reused with the current
value of gamma, and gamma is the scalar $\gamma$ in the Newton
matrix $M = I - \gamma J$ where $J$ is the Jacobian matrix.
A function should return true if Jacobian-related data was updated
and false if saved data was reused.
Raising Sundials.RecoverableFailure indicates a recoverable error.
Any other exception is treated as an unrecoverable error.
jac 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, left, right, or both) and callback functions.
The following functions and those in Cvode.Spils.Banded and Cvode_bbd
construct preconditioners.
The Cvode.Spils.prec_solve_fn is mandatory. The Cvode.Spils.prec_setup_fn can be
omitted if not needed.
val prec_none : ('d, 'k) preconditionerNo preconditioning.
val prec_left : ?setup:'d prec_setup_fn ->
'd prec_solve_fn -> ('d, 'k) preconditionerLeft preconditioning. $(P^{-1}A)x = P^{-1}b$ .
val prec_right : ?setup:'d prec_setup_fn ->
'd prec_solve_fn -> ('d, 'k) preconditionerRight preconditioning. $(AP^{-1})Px = b$ .
val prec_both : ?setup:'d prec_setup_fn ->
'd prec_solve_fn -> ('d, 'k) preconditionerLeft and right preconditioning. $(P_L^{-1}AP_R^{-1})P_Rx = P_L^{-1}b$
module Banded:sig..end
Banded preconditioners.
type'djac_times_setup_fn =(unit, 'd) Cvode.jacobian_arg -> unit
Callback functions that preprocess or evaluate Jacobian-related data
needed by the jac_times_vec_fn. In the call jac_times_setup_fn arg,
arg is a Cvode.jacobian_arg with no work vectors.
Raising Sundials.RecoverableFailure indicates a recoverable error.
Any other exception is treated as an unrecoverable error.
arg should not be accessed after the
function has returned.type'djac_times_vec_fn =('d, 'd) Cvode.jacobian_arg -> 'd -> 'd -> unit
Callback functions that compute the Jacobian times a vector. In the
call jac_times_vec_fn arg v jv, arg is a Cvode.jacobian_arg with one
work vector, v is the vector multiplying the Jacobian, and jv is
the vector in which to store the
result—$\mathtt{jv} = J\mathtt{v}$.
Raising Sundials.RecoverableFailure indicates a recoverable error.
Any other exception is treated as an unrecoverable error.
arg nor v or jv should be
accessed after the function has returned.val solver : ('m, 'd, 'k, [> `Iter ]) Sundials.LinearSolver.t ->
?jac_times_vec:'d jac_times_setup_fn option *
'd jac_times_vec_fn ->
?jac_times_rhs:'d Cvode.rhsfn ->
('d, 'k) preconditioner -> ('d, 'k) Cvode.linear_solverCreate a Cvode-specific linear solver from a generic iterative linear solver.
The jac_times_rhs argument specifies an alternative right-hand-side
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_vec function is not supported in
Config.sundials_version < 3.0.0.
NB: a jac_times_rhs function is not supported in
Config.sundials_version < 5.3.0.
val set_jac_eval_frequency : ('d, 'k) Cvode.session -> int -> unitSets the maximum number of time steps to wait before recomputation of the Jacobian or recommendation to update the preconditioner. If the integer argument is less than or equal to 0, a default value of 50 is used.
val set_lsetup_frequency : ('d, 'k) Cvode.session -> int -> unitSpecifies the frequency of calls to the linear solver setup routine. Positive values specify the number of time steps between setup calls, negative values force recomputation at each Newton step, and zero values reset to the default (20).
val set_linear_solution_scaling : ('d, 'k) Cvode.session -> bool -> unitEnables or disables scaling of the linear system solution to account for a change in $\gamma$ in the linear system. Linear solution scaling is enabled by default when a matrix-based linear solver is attached.
val set_eps_lin : ('d, 'k) Cvode.session -> float -> unitSets the factor by which the Krylov linear solver's convergence test constant is reduced from the Newton iteration test constant. This factor must be >= 0; passing 0 specifies the default (0.05).
val set_ls_norm_factor : ('d, 'k) Cvode.session -> float -> unitSets the factor for converting from the integrator tolerance (WRMS norm) to the linear solver tolerance (L2 norm). That is, $\mathit{tol}_{\mathsf{L2}} = \mathit{fact}\cdot\mathit{tol}_{\mathsf{WRMS}}$ . The given value is used directly if it is greater than zero. If it is zero (the default), then the square root of the state vector length is used. If it is less than zero, then the square root of the dot product of a state vector full of ones with itself is used.
val get_work_space : ('d, 'k) Cvode.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) Cvode.session -> intReturns the cumulative number of linear iterations.
val get_num_lin_conv_fails : ('d, 'k) Cvode.session -> intReturns the cumulative number of linear convergence failures.
val get_num_prec_evals : ('d, 'k) Cvode.session -> intReturns the cumulative number of calls to the setup function with
jok=false.
val get_num_prec_solves : ('d, 'k) Cvode.session -> intReturns the cumulative number of calls to the preconditioner solve function.
val get_num_jtsetup_evals : ('d, 'k) Cvode.session -> intReturns the cumulative number of calls to the Jacobian-vector setup function.
val get_num_jtimes_evals : ('d, 'k) Cvode.session -> intReturns the cumulative number of calls to the Jacobian-vector function.
val get_num_lin_rhs_evals : ('d, 'k) Cvode.session -> intReturns the number of calls to the right-hand side callback for finite difference Jacobian-vector product approximation. This counter is only updated if the default difference quotient function is used.
The Cvode.init and Cvode.reinit functions are the preferred way to set or
change preconditioner functions. These low-level functions are provided
for experts who want to avoid resetting internal counters and other
associated side-effects.
val set_preconditioner : ('d, 'k) Cvode.session ->
?setup:'d prec_setup_fn -> 'd prec_solve_fn -> unitChange the preconditioner functions.
val set_jac_times : ('d, 'k) Cvode.session ->
?jac_times_setup:'d jac_times_setup_fn ->
'd jac_times_vec_fn -> unitChange the Jacobian-times-vector function.
NB: the jac_times_setup argument is not supported in
Config.sundials_version < 3.0.0.
val clear_jac_times : ('d, 'k) Cvode.session -> unitRemove a Jacobian-times-vector function and use the default implementation.