# rocsolver_sbdsqr Interface Reference#

HIPFORT API Reference: hipfort_rocsolver::rocsolver_sbdsqr Interface Reference
hipfort_rocsolver::rocsolver_sbdsqr Interface Reference

BDSQR computes the singular value decomposition (SVD) of an n-by-n bidiagonal matrix B, using the implicit QR algorithm. More...

## Public Member Functions

integer(kind(rocblas_status_success)) function rocsolver_sbdsqr_ (handle, uplo, n, nv, nu, nc, D, E, V, ldv, U, ldu, C, ldc, myInfo)

integer(kind(rocblas_status_success)) function rocsolver_sbdsqr_full_rank (handle, uplo, n, nv, nu, nc, D, E, V, ldv, U, ldu, C, ldc, myInfo)

integer(kind(rocblas_status_success)) function rocsolver_sbdsqr_rank_0 (handle, uplo, n, nv, nu, nc, D, E, V, ldv, U, ldu, C, ldc, myInfo)

integer(kind(rocblas_status_success)) function rocsolver_sbdsqr_rank_1 (handle, uplo, n, nv, nu, nc, D, E, V, ldv, U, ldu, C, ldc, myInfo)

## Detailed Description

BDSQR computes the singular value decomposition (SVD) of an n-by-n bidiagonal matrix B, using the implicit QR algorithm.

The SVD of B has the form:

$B = QSP'$

where S is the n-by-n diagonal matrix of singular values of B, the columns of Q are the left singular vectors of B, and the columns of P are its right singular vectors.

The computation of the singular vectors is optional; this function accepts input matrices U (of size nu-by-n) and V (of size n-by-nv) that are overwritten with $$UQ$$ and $$P'V$$. If nu = 0 no left vectors are computed; if nv = 0 no right vectors are computed.

Optionally, this function can also compute $$Q'C$$ for a given n-by-nc input matrix C.

Parameters
 [in] handle rocblas_handle. [in] uplo rocblas_fill. Specifies whether B is upper or lower bidiagonal. [in] n rocblas_int. n >= 0. The number of rows and columns of matrix B. [in] nv rocblas_int. nv >= 0. The number of columns of matrix V. [in] nu rocblas_int. nu >= 0. The number of rows of matrix U. [in] nc rocblas_int. nu >= 0. The number of columns of matrix C. [in,out] D pointer to real type. Array on the GPU of dimension n. On entry, the diagonal elements of B. On exit, if info = 0, the singular values of B in decreasing order; if info > 0, the diagonal elements of a bidiagonal matrix orthogonally equivalent to B. [in,out] E pointer to real type. Array on the GPU of dimension n-1. On entry, the off-diagonal elements of B. On exit, if info > 0, the off-diagonal elements of a bidiagonal matrix orthogonally equivalent to B (if info = 0 this matrix converges to zero). [in,out] V pointer to type. Array on the GPU of dimension ldv*nv. On entry, the matrix V. On exit, it is overwritten with P'*V. (Not referenced if nv = 0). [in] ldv rocblas_int. ldv >= n if nv > 0, or ldv >=1 if nv = 0. The leading dimension of V. [in,out] U pointer to type. Array on the GPU of dimension ldu*n. On entry, the matrix U. On exit, it is overwritten with U*Q. (Not referenced if nu = 0). [in] ldu rocblas_int. ldu >= nu. The leading dimension of U. [in,out] C pointer to type. Array on the GPU of dimension ldc*nc. On entry, the matrix C. On exit, it is overwritten with Q'*C. (Not referenced if nc = 0). [in] ldc rocblas_int. ldc >= n if nc > 0, or ldc >=1 if nc = 0. The leading dimension of C. [out] info pointer to a rocblas_int on the GPU. If info = 0, successful exit. If info = i > 0, i elements of E have not converged to zero.

## ◆ rocsolver_sbdsqr_()

 integer(kind(rocblas_status_success)) function hipfort_rocsolver::rocsolver_sbdsqr::rocsolver_sbdsqr_ ( type(c_ptr), value handle, integer(kind(rocblas_fill_upper)), value uplo, integer(c_int), value n, integer(c_int), value nv, integer(c_int), value nu, integer(c_int), value nc, type(c_ptr), value D, type(c_ptr), value E, type(c_ptr), value V, integer(c_int), value ldv, type(c_ptr), value U, integer(c_int), value ldu, type(c_ptr), value C, integer(c_int), value ldc, integer(c_int) myInfo )

## ◆ rocsolver_sbdsqr_full_rank()

 integer(kind(rocblas_status_success)) function hipfort_rocsolver::rocsolver_sbdsqr::rocsolver_sbdsqr_full_rank ( type(c_ptr) handle, integer(kind(rocblas_fill_upper)) uplo, integer(c_int) n, integer(c_int) nv, integer(c_int) nu, integer(c_int) nc, real(c_float), dimension(:), target D, real(c_float), dimension(:), target E, real(c_float), dimension(:,:), target V, integer(c_int) ldv, real(c_float), dimension(:,:), target U, integer(c_int) ldu, real(c_float), dimension(:,:), target C, integer(c_int) ldc, integer(c_int) myInfo )

## ◆ rocsolver_sbdsqr_rank_0()

 integer(kind(rocblas_status_success)) function hipfort_rocsolver::rocsolver_sbdsqr::rocsolver_sbdsqr_rank_0 ( type(c_ptr) handle, integer(kind(rocblas_fill_upper)) uplo, integer(c_int) n, integer(c_int) nv, integer(c_int) nu, integer(c_int) nc, real(c_float), target D, real(c_float), target E, real(c_float), target V, integer(c_int) ldv, real(c_float), target U, integer(c_int) ldu, real(c_float), target C, integer(c_int) ldc, integer(c_int) myInfo )

## ◆ rocsolver_sbdsqr_rank_1()

 integer(kind(rocblas_status_success)) function hipfort_rocsolver::rocsolver_sbdsqr::rocsolver_sbdsqr_rank_1 ( type(c_ptr) handle, integer(kind(rocblas_fill_upper)) uplo, integer(c_int) n, integer(c_int) nv, integer(c_int) nu, integer(c_int) nc, real(c_float), dimension(:), target D, real(c_float), dimension(:), target E, real(c_float), dimension(:), target V, integer(c_int) ldv, real(c_float), dimension(:), target U, integer(c_int) ldu, real(c_float), dimension(:), target C, integer(c_int) ldc, integer(c_int) myInfo )

The documentation for this interface was generated from the following file: