# Introduction¶

## Purpose¶

SyLVER is a sparse direct solver for computing the solution of **large
sparse symmetrically-structured linear systems** of equations. This
includes both positive-definite and indefinite sparse symmetric
systems as well as unsymmetric system whose sparsity pattern is
symmetric.

The solution of the system of equations:

is achived by computing a factorization of the input matrix. the following cases are covered:

- \(A\) is
**symmetric positive-definite**, we compute the**sparse Cholesky factorization**:

where the factor \(L\) is a lower triangular matrix and the matrix \(P\) is a permutation matrix used to reduce the fill-in generated during the factorization. Following the matrix factorization the solution can be retrieved by successively solving the system \(LY=PB\) (forward substitution) and \(L^{T}PX=Y\) (backward substitutions).

2. \(A\) is **symmetric indefinite**, then we compute the
sparse \(LDL^T\) decomposition:

where \(P\) is a permutation matrix, \(L\) is unit lower triangular, and \(D\) is block diagonal with blocks of size \(1 \times 1\) and \(2 \times 2\).

The code optionally supports hybrid computation using one or more NVIDIA GPUs.

SyLVER returns bit-compatible results.

An option exists to scale the matrix. In this case, the factorization of the scaled matrix \(\overline{A} = S A S\) is computed, where \(S\) is a diagonal scaling matrix.

## Usage overview¶

Solving \(AX=B\) using SyLVER is a four stage process.

If \(A\) is

*symmetric*:- Call
`spldlt_analyse()`

to perform a symbolic factorization, stored in spldlt_akeep. - Call
`spldlt_factor()`

to perform a numeric factorization, stored in spldlt_fkeep. More than one numeric factorization can refer to the same spldlt_akeep. - Call
`spldlt__solve()`

to perform a solve with the factors. More than one solve can be performed with the same spldlt_fkeep. - Once all desired solutions have been performed, free memory with
`spldlt_free()`

.

- Call

Note

The `sylver_init()`

routine must be called before any other
routines whitin SyLVER. When all the desired operations have been
performed, the `sylver_finalize()`

routine should be called.