pub unsafe extern "C" fn cusolverDnZgebrd(
handle: cusolverDnHandle_t,
m: c_int,
n: c_int,
A: *mut cuDoubleComplex,
lda: c_int,
D: *mut f64,
E: *mut f64,
TAUQ: *mut cuDoubleComplex,
TAUP: *mut cuDoubleComplex,
Work: *mut cuDoubleComplex,
Lwork: c_int,
devInfo: *mut c_int,
) -> cusolverStatus_tExpand description
These helper functions calculate the size of work buffers needed.
The S and D data types are real valued single and double precision, respectively.
The C and Z data types are complex valued single and double precision, respectively.
This function reduces a general $m \times n$ matrix A to a real upper or lower bidiagonal form B by an orthogonal transformation: $Q^{H}\*A\*P = B$
If m>=n, B is upper bidiagonal; if m<n, B is lower bidiagonal.
The matrix Q and P are overwritten into matrix A in the following sense:
- if
m>=n, the diagonal and the first superdiagonal are overwritten with the upper bidiagonal matrixB; the elements below the diagonal, with the arrayTAUQ, represent the orthogonal matrixQas a product of elementary reflectors, and the elements above the first superdiagonal, with the arrayTAUP, represent the orthogonal matrixPas a product of elementary reflectors. - if
m<n, the diagonal and the first subdiagonal are overwritten with the lower bidiagonal matrixB; the elements below the first subdiagonal, with the arrayTAUQ, represent the orthogonal matrixQas a product of elementary reflectors, and the elements above the diagonal, with the arrayTAUP, represent the orthogonal matrixPas a product of elementary reflectors.
The user has to provide working space which is pointed by input parameter Work. The input parameter Lwork is size of the working space, and it is returned by gebrd_bufferSize().
If output parameter devInfo = -i (less than zero), the i-th parameter is wrong (not counting handle).
Remark: gebrd only supports m>=n.