module Sundials_Matrix:sig
..end
Generic matrices.
type ('m, 'd)
matrix_ops = {
|
m_clone : |
(* | Create a new, distinct matrix from an existing one without copying the contents of the original matrix. | *) |
|
m_zero : |
(* | Set all elements to zero. | *) |
|
m_copy : |
(* |
| *) |
|
m_scale_add : |
(* |
| *) |
|
m_scale_addi : |
(* |
| *) |
|
m_matvec : |
(* |
| *) |
|
m_space : |
(* |
| *) |
Generic operations that all matrix types must implement. Failure is signalled by raising an exception.
There are two type variables:
'm
represents the matrix data manipulated by the operations;'d
is the type of the vector arguments to m_matvec
.exception Invalidated
Raised in Config.sundials_version < 3.0.0 on an attempt to access a value that has become invalid. Such values refer to matrices that no longer exist in the underlying library. Values never become invalid in Config.sundials_version >= 3.0.0.
exception IncompatibleArguments
Raised if matrix operation arguments are mutually incompatible.
exception ZeroDiagonalElement of int
Raised if a zero diagonal element is found during factorization using a
low-level routine like
LinearSolver.Iterative.Algorithms.qr_fact,
LinearSolver.Iterative.Algorithms.qr_sol,
or Sundials_Matrix.ArrayDense.getrf
.
The argument gives the equation number (from 1).
module Dense:sig
..end
Dense matrices
module Band:sig
..end
Banded matrices
module Sparse:sig
..end
Sparse matrices
module ArrayDense:sig
..end
General purpose dense matrix operations on arrays.
module ArrayBand:sig
..end
General-purpose band matrix operations on arrays.
type
standard
Distinguishes a library-supplied matrix from a custom one.
type
custom
Distinguishes a user-supplied matrix from a standard one.
type ('k, 'm, 'nd, 'nk)
t
A generic matrix with a payload of type 'm
. The 'k
type argument tracks
whether the matrix is Sundials_Matrix.standard
or Sundials_Matrix.custom
. The 'nd
and 'nk
type
arguments track the compatiblity of the m_matvec vector
parameters.
type[> Nvector_serial.kind ]
dense =(standard, Dense.t, Nvector_serial.data,
[> Nvector_serial.kind ] as 'nk)
t
Generic matrix with Dense content.
val dense : ?m:int -> ?i:float -> int -> [> Nvector_serial.kind ] dense
val wrap_dense : Dense.t -> [> Nvector_serial.kind ] dense
Creates a (dense) matrix by wrapping an existing dense matrix. The two values share the same underlying storage.
type[> Nvector_serial.kind ]
band =(standard, Band.t, Nvector_serial.data,
[> Nvector_serial.kind ] as 'nk)
t
Generic matrix with Band content.
val band : ?mu:int ->
?smu:int ->
?ml:int -> ?i:float -> int -> [> Nvector_serial.kind ] band
By default, band n
returns an n
by n
band matrix with all bandwidths
equal to 2 and all values initialized to 0.0
.
Optional arguments allow specifying the upper bandwidth mu
, the lower
bandwidth ml
, the storage upper bandwidth smu
and the initial
values i
. If mu
is given but not smu
, then smu
is set to mu
.
If mu
is given but not ml
, then ml
is set to mu
.
val wrap_band : Band.t -> [> Nvector_serial.kind ] band
Creates a (band) matrix by wrapping an existing band matrix. The two values share the same underlying storage.
type('s, [> Nvector_serial.kind ])
sparse =(standard, 's Sparse.t, Nvector_serial.data,
[> Nvector_serial.kind ] as 'nk)
t
Generic matrix with Sparse content.
val sparse_csc : ?m:int ->
?nnz:int ->
int ->
(Sparse.csc, [> Nvector_serial.kind ]) sparse
By default, sparse_csc n
returns an n
by n
sparse matrix in
CSC format with the capacity for n / 10
non-zero
elements and all elements initialized to 0.0
. Optional arguments allow
specifying the number of rows m
, and the number of non-zero
elements nnz
.
val sparse_csr : ?m:int ->
?nnz:int ->
int ->
(Sparse.csr, [> Nvector_serial.kind ]) sparse
As for Sundials_Matrix.sparse_csc
but the returned matrix is in CSR
format.
The CSR format is only available from Sundials 2.7.0 onwards.
val wrap_sparse : 's Sparse.t ->
('s, [> Nvector_serial.kind ]) sparse
Creates a (sparse) matrix by wrapping an existing sparse matrix. The two values share the same underlying storage.
type'nk
arraydense =(custom, ArrayDense.t, Sundials.RealArray.t,
'nk)
t
Generic matrix with array-based dense content.
val arraydense : ?m:int -> ?i:float -> int -> 'nk arraydense
By default, arraydense n
returns an n
by n
dense matrix with all
elements initialized to 0.0
. Optional arguments allow specifying the
number of rows (m
) and the initial value (i
).
val wrap_arraydense : ArrayDense.t -> 'nk arraydense
Creates an (array-based dense) matrix by wrapping an existing array-based dense matrix. The two values share the same underlying storage.
type'nk
arrayband =(custom, ArrayBand.t, Sundials.RealArray.t,
'nk)
t
Generic matrix with array-based band content.
val arrayband : ?mu:int ->
?smu:int -> ?ml:int -> ?i:float -> int -> 'nk arrayband
By default, band n
returns an n
by n
band matrix with all bandwidths
equal to 2 and all values initialized to 0.0
.
Optional arguments allow specifying the upper bandwidth mu
, the lower
bandwidth ml
, the storage upper bandwidth smu
and the initial
values i
. If mu
is given but not smu
, then smu
is set to mu
,
otherwise if smu
is given but not mu
, then mu
is set to smu
.
If ml
is not given, then it is set to mu
.
val wrap_arrayband : ArrayBand.t -> 'nk arrayband
Creates an (array-based band) matrix by wrapping an existing array-based band matrix. The two values share the same underlying storage.
val wrap_custom : ('m, 'nd) matrix_ops ->
'm -> (custom, 'm, 'nd, 'nk) t
Wrap a custom matrix value.
type
id =
| |
Dense |
| |
Band |
| |
Sparse |
| |
Custom |
Matrix internal type identifiers.
val get_ops : ('k, 'm, 'nd, 'nk) t -> ('m, 'nd) matrix_ops
Return a record of matrix operations.
val get_id : ('k, 'm, 'nd, 'nk) t -> id
Return the internal type identifier of a matrix.
val unwrap : ('k, 'm, 'nd, 'nk) t -> 'm
Direct access to the underlying storage array, which is accessed
column first (unlike in Sundials_Matrix.Dense.get
, Sundials_Matrix.Band.get
, and Sundials_Matrix.Sparse.get
).
val scale_add : float ->
('k, 'm, 'nd, 'nk) t ->
('k, 'm, 'nd, 'nk) t -> unit
scale_add c A B
calculates $A = cA + B$.
val scale_addi : float -> ('k, 'm, 'nd, 'nk) t -> unit
scale_addi c A
calculates $A = cA + I$.
val matvec : ('k, 'm, 'nd, 'nk) t ->
('nd, 'nk) Nvector.t -> ('nd, 'nk) Nvector.t -> unit
The call matvec a x y
computes the matrix-vector product $y = Ax$.
val set_to_zero : ('k, 'm, 'nd, 'nk) t -> unit
Fills a matrix with zeros.
val blit : ('k, 'm, 'nd, 'nk) t ->
('k, 'm, 'nd, 'nk) t -> unit
blit src dst
copies the contents of src
into dst
. Both
must have the same size.
val space : ('k, 'm, 'nd, 'nk) t -> int * int
lrw, liw = space a
returns the storage requirements of a
as
lrw
realtype words and liw
integer words.
val print_dense : [> Nvector_serial.kind ] dense -> Sundials.Logfile.t -> unit
Prints a dense matrix to the given log file.
NB: Not supported in Config.sundials_version < 3.0.0.
val print_band : [> Nvector_serial.kind ] band -> Sundials.Logfile.t -> unit
Prints a band matrix to the given log file.
NB: Not supported in Config.sundials_version < 3.0.0.
val print_sparse : ('s, [> Nvector_serial.kind ]) sparse ->
Sundials.Logfile.t -> unit
Prints a sparse matrix to the given log file.
NB: Not supported in Config.sundials_version < 3.0.0.