# rocsolver_slatrd Interface Reference#

HIPFORT API Reference: hipfort_rocsolver::rocsolver_slatrd Interface Reference
hipfort_rocsolver::rocsolver_slatrd Interface Reference

LATRD computes the tridiagonal form of k rows and columns of a symmetric/hermitian matrix A, as well as the matrix W needed to update the remaining part of A. More...

## Public Member Functions

integer(kind(rocblas_status_success)) function rocsolver_slatrd_ (handle, uplo, n, k, A, lda, E, tau, W, ldw)

integer(kind(rocblas_status_success)) function rocsolver_slatrd_full_rank (handle, uplo, n, k, A, lda, E, tau, W, ldw)

integer(kind(rocblas_status_success)) function rocsolver_slatrd_rank_0 (handle, uplo, n, k, A, lda, E, tau, W, ldw)

integer(kind(rocblas_status_success)) function rocsolver_slatrd_rank_1 (handle, uplo, n, k, A, lda, E, tau, W, ldw)

## Detailed Description

LATRD computes the tridiagonal form of k rows and columns of a symmetric/hermitian matrix A, as well as the matrix W needed to update the remaining part of A.

The reduced form is given by:

$T = Q'AQ$

If uplo is lower, the first k rows and columns of T form the tridiagonal block. If uplo is upper, then the last k rows and columns of T form the tridiagonal block. Q is an orthogonal/unitary matrix represented as the product of Householder matrices

$\begin{array}{cl} Q = H_1H_2\cdots H_k & \text{if uplo indicates lower, or}\newline Q = H_nH_{n-1}\cdots H_{n-k+1} & \text{if uplo is upper}. \end{array}$

Each Householder matrix $$H_i$$ is given by

$H_i = I - \text{tau}[i]\cdot v_iv_i'$

where tau[i] is the corresponding Householder scalar. When uplo indicates lower, the first i elements of the Householder vector $$v_i$$ are zero, and $$v_i[i+1] = 1$$. If uplo is upper, the last n-i elements of the Householder vector $$v_i$$ are zero, and $$v_i[i] = 1$$.

The unreduced part of the matrix A can be updated using a rank update of the form:

$A = A - VW' - WV'$

where V is the n-by-k matrix formed by the vectors $$v_i$$.

Parameters
 [in] handle rocblas_handle. [in] uplo rocblas_fill. Specifies whether the upper or lower part of the matrix A is stored. If uplo indicates lower (or upper), then the upper (or lower) part of A is not used. [in] n rocblas_int. n >= 0. The number of rows and columns of the matrix A. [in] k rocblas_int. 0 <= k <= n. The number of rows and columns of the matrix A to be reduced. [in,out] A pointer to type. Array on the GPU of dimension lda*n. On entry, the n-by-n matrix to be reduced. On exit, if uplo is lower, the first k columns have been reduced to tridiagonal form (given in the diagonal elements of A and the array E), the elements below the diagonal contain the possibly non-zero entries of the Householder vectors associated with Q, stored as columns. If uplo is upper, the last k columns have been reduced to tridiagonal form (given in the diagonal elements of A and the array E), the elements above the diagonal contain the possibly non-zero entries of the Householder vectors associated with Q, stored as columns. [in] lda rocblas_int. lda >= n. The leading dimension of A. [out] E pointer to real type. Array on the GPU of dimension n-1. If upper (lower), the last (first) k elements of E are the off-diagonal elements of the computed tridiagonal block. [out] tau pointer to type. Array on the GPU of dimension n-1. If upper (lower), the last (first) k elements of tau are the Householder scalars related to Q. [out] W pointer to type. Array on the GPU of dimension ldw*k. The n-by-k matrix needed to update the unreduced part of A. [in] ldw rocblas_int. ldw >= n. The leading dimension of W.

## ◆ rocsolver_slatrd_()

 integer(kind(rocblas_status_success)) function hipfort_rocsolver::rocsolver_slatrd::rocsolver_slatrd_ ( type(c_ptr), value handle, integer(kind(rocblas_fill_upper)), value uplo, integer(c_int), value n, integer(c_int), value k, type(c_ptr), value A, integer(c_int), value lda, type(c_ptr), value E, real(c_float) tau, type(c_ptr), value W, integer(c_int), value ldw )

## ◆ rocsolver_slatrd_full_rank()

 integer(kind(rocblas_status_success)) function hipfort_rocsolver::rocsolver_slatrd::rocsolver_slatrd_full_rank ( type(c_ptr) handle, integer(kind(rocblas_fill_upper)) uplo, integer(c_int) n, integer(c_int) k, real(c_float), dimension(:,:), target A, integer(c_int) lda, real(c_float), dimension(:), target E, real(c_float) tau, type(c_ptr) W, integer(c_int) ldw )

## ◆ rocsolver_slatrd_rank_0()

 integer(kind(rocblas_status_success)) function hipfort_rocsolver::rocsolver_slatrd::rocsolver_slatrd_rank_0 ( type(c_ptr) handle, integer(kind(rocblas_fill_upper)) uplo, integer(c_int) n, integer(c_int) k, real(c_float), target A, integer(c_int) lda, real(c_float), target E, real(c_float) tau, type(c_ptr) W, integer(c_int) ldw )

## ◆ rocsolver_slatrd_rank_1()

 integer(kind(rocblas_status_success)) function hipfort_rocsolver::rocsolver_slatrd::rocsolver_slatrd_rank_1 ( type(c_ptr) handle, integer(kind(rocblas_fill_upper)) uplo, integer(c_int) n, integer(c_int) k, real(c_float), dimension(:), target A, integer(c_int) lda, real(c_float), dimension(:), target E, real(c_float) tau, type(c_ptr) W, integer(c_int) ldw )

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