pdbsv
The pdbsv solver supports the following input types.
- data type: DSZC
- index type:
std::int32_t,std::int64_t
pdbsv solves a square banded system A * X = B with bandwidth \(KL\), \(KU\) using LU decomposition without pivoting.
The matrix A of size \(N\) is stored in a memory block of size \(N \times (KL + KU + 1)\).
!!! note
pdbsv does not perform partial pivoting.
It is faster than pgbsv but requires the matrix to be diagonally dominant or positive definite to remain numerically stable.
Use pgbsv for general banded matrices.
Although KL = 0 and KU = 0 are supported, a zero bandwidth triggers an unwanted warning from ScaLAPACK.
Constructor
The solver takes two template arguments.
- data type, e.g.,
double,float,std::complex<double>,std::complex<float>; - index type, e.g.,
std::int32_t,std::int64_t.
The solver uses a 1D process grid. It takes a single argument representing the number of rows in the grid.
Indexer
A nested indexer converts logical 2D indices \((i, j)\) into the correct 1D offset for the ScaLAPACK band storage layout.
See Fig. 4.9 for the exact storage format.
The leading dimension of the stored matrix is KL + KU + 1.