MAGMA
2.3.0
Matrix Algebra for GPU and Multicore Architectures

Functions  
magma_int_t  magma_chetrd (magma_uplo_t uplo, magma_int_t n, magmaFloatComplex *A, magma_int_t lda, float *d, float *e, magmaFloatComplex *tau, magmaFloatComplex *work, magma_int_t lwork, magma_int_t *info) 
CHETRD reduces a complex Hermitian matrix A to real symmetric tridiagonal form T by an orthogonal similarity transformation: Q**H * A * Q = T. More...  
magma_int_t  magma_chetrd2_gpu (magma_uplo_t uplo, magma_int_t n, magmaFloatComplex_ptr dA, magma_int_t ldda, float *d, float *e, magmaFloatComplex *tau, magmaFloatComplex *A, magma_int_t lda, magmaFloatComplex *work, magma_int_t lwork, magmaFloatComplex_ptr dwork, magma_int_t ldwork, magma_int_t *info) 
CHETRD2_GPU reduces a complex Hermitian matrix A to real symmetric tridiagonal form T by an orthogonal similarity transformation: Q**H * A * Q = T. More...  
magma_int_t  magma_chetrd_gpu (magma_uplo_t uplo, magma_int_t n, magmaFloatComplex_ptr dA, magma_int_t ldda, float *d, float *e, magmaFloatComplex *tau, magmaFloatComplex *A, magma_int_t lda, magmaFloatComplex *work, magma_int_t lwork, magma_int_t *info) 
CHETRD_GPU reduces a complex Hermitian matrix A to real symmetric tridiagonal form T by an orthogonal similarity transformation: Q**H * A * Q = T. More...  
magma_int_t  magma_chetrd_mgpu (magma_int_t ngpu, magma_int_t nqueue, magma_uplo_t uplo, magma_int_t n, magmaFloatComplex *A, magma_int_t lda, float *d, float *e, magmaFloatComplex *tau, magmaFloatComplex *work, magma_int_t lwork, magma_int_t *info) 
CHETRD reduces a complex Hermitian matrix A to real symmetric tridiagonal form T by an orthogonal similarity transformation: Q**H * A * Q = T. More...  
magma_int_t  magma_dsytrd (magma_uplo_t uplo, magma_int_t n, double *A, magma_int_t lda, double *d, double *e, double *tau, double *work, magma_int_t lwork, magma_int_t *info) 
DSYTRD reduces a real symmetric matrix A to real symmetric tridiagonal form T by an orthogonal similarity transformation: Q**H * A * Q = T. More...  
magma_int_t  magma_dsytrd2_gpu (magma_uplo_t uplo, magma_int_t n, magmaDouble_ptr dA, magma_int_t ldda, double *d, double *e, double *tau, double *A, magma_int_t lda, double *work, magma_int_t lwork, magmaDouble_ptr dwork, magma_int_t ldwork, magma_int_t *info) 
DSYTRD2_GPU reduces a real symmetric matrix A to real symmetric tridiagonal form T by an orthogonal similarity transformation: Q**H * A * Q = T. More...  
magma_int_t  magma_dsytrd_gpu (magma_uplo_t uplo, magma_int_t n, magmaDouble_ptr dA, magma_int_t ldda, double *d, double *e, double *tau, double *A, magma_int_t lda, double *work, magma_int_t lwork, magma_int_t *info) 
DSYTRD_GPU reduces a real symmetric matrix A to real symmetric tridiagonal form T by an orthogonal similarity transformation: Q**H * A * Q = T. More...  
magma_int_t  magma_dsytrd_mgpu (magma_int_t ngpu, magma_int_t nqueue, magma_uplo_t uplo, magma_int_t n, double *A, magma_int_t lda, double *d, double *e, double *tau, double *work, magma_int_t lwork, magma_int_t *info) 
DSYTRD reduces a real symmetric matrix A to real symmetric tridiagonal form T by an orthogonal similarity transformation: Q**H * A * Q = T. More...  
magma_int_t  magma_ssytrd (magma_uplo_t uplo, magma_int_t n, float *A, magma_int_t lda, float *d, float *e, float *tau, float *work, magma_int_t lwork, magma_int_t *info) 
SSYTRD reduces a real symmetric matrix A to real symmetric tridiagonal form T by an orthogonal similarity transformation: Q**H * A * Q = T. More...  
magma_int_t  magma_ssytrd2_gpu (magma_uplo_t uplo, magma_int_t n, magmaFloat_ptr dA, magma_int_t ldda, float *d, float *e, float *tau, float *A, magma_int_t lda, float *work, magma_int_t lwork, magmaFloat_ptr dwork, magma_int_t ldwork, magma_int_t *info) 
SSYTRD2_GPU reduces a real symmetric matrix A to real symmetric tridiagonal form T by an orthogonal similarity transformation: Q**H * A * Q = T. More...  
magma_int_t  magma_ssytrd_gpu (magma_uplo_t uplo, magma_int_t n, magmaFloat_ptr dA, magma_int_t ldda, float *d, float *e, float *tau, float *A, magma_int_t lda, float *work, magma_int_t lwork, magma_int_t *info) 
SSYTRD_GPU reduces a real symmetric matrix A to real symmetric tridiagonal form T by an orthogonal similarity transformation: Q**H * A * Q = T. More...  
magma_int_t  magma_ssytrd_mgpu (magma_int_t ngpu, magma_int_t nqueue, magma_uplo_t uplo, magma_int_t n, float *A, magma_int_t lda, float *d, float *e, float *tau, float *work, magma_int_t lwork, magma_int_t *info) 
SSYTRD reduces a real symmetric matrix A to real symmetric tridiagonal form T by an orthogonal similarity transformation: Q**H * A * Q = T. More...  
magma_int_t  magma_zhetrd (magma_uplo_t uplo, magma_int_t n, magmaDoubleComplex *A, magma_int_t lda, double *d, double *e, magmaDoubleComplex *tau, magmaDoubleComplex *work, magma_int_t lwork, magma_int_t *info) 
ZHETRD reduces a complex Hermitian matrix A to real symmetric tridiagonal form T by an orthogonal similarity transformation: Q**H * A * Q = T. More...  
magma_int_t  magma_zhetrd2_gpu (magma_uplo_t uplo, magma_int_t n, magmaDoubleComplex_ptr dA, magma_int_t ldda, double *d, double *e, magmaDoubleComplex *tau, magmaDoubleComplex *A, magma_int_t lda, magmaDoubleComplex *work, magma_int_t lwork, magmaDoubleComplex_ptr dwork, magma_int_t ldwork, magma_int_t *info) 
ZHETRD2_GPU reduces a complex Hermitian matrix A to real symmetric tridiagonal form T by an orthogonal similarity transformation: Q**H * A * Q = T. More...  
magma_int_t  magma_zhetrd_gpu (magma_uplo_t uplo, magma_int_t n, magmaDoubleComplex_ptr dA, magma_int_t ldda, double *d, double *e, magmaDoubleComplex *tau, magmaDoubleComplex *A, magma_int_t lda, magmaDoubleComplex *work, magma_int_t lwork, magma_int_t *info) 
ZHETRD_GPU reduces a complex Hermitian matrix A to real symmetric tridiagonal form T by an orthogonal similarity transformation: Q**H * A * Q = T. More...  
magma_int_t  magma_zhetrd_mgpu (magma_int_t ngpu, magma_int_t nqueue, magma_uplo_t uplo, magma_int_t n, magmaDoubleComplex *A, magma_int_t lda, double *d, double *e, magmaDoubleComplex *tau, magmaDoubleComplex *work, magma_int_t lwork, magma_int_t *info) 
ZHETRD reduces a complex Hermitian matrix A to real symmetric tridiagonal form T by an orthogonal similarity transformation: Q**H * A * Q = T. More...  
magma_int_t magma_chetrd  (  magma_uplo_t  uplo, 
magma_int_t  n,  
magmaFloatComplex *  A,  
magma_int_t  lda,  
float *  d,  
float *  e,  
magmaFloatComplex *  tau,  
magmaFloatComplex *  work,  
magma_int_t  lwork,  
magma_int_t *  info  
) 
CHETRD reduces a complex Hermitian matrix A to real symmetric tridiagonal form T by an orthogonal similarity transformation: Q**H * A * Q = T.
[in]  uplo  magma_uplo_t

[in]  n  INTEGER The order of the matrix A. N >= 0. 
[in,out]  A  COMPLEX array, dimension (LDA,N) On entry, the Hermitian matrix A. If UPLO = MagmaUpper, the leading NbyN upper triangular part of A contains the upper triangular part of the matrix A, and the strictly lower triangular part of A is not referenced. If UPLO = MagmaLower, the leading NbyN lower triangular part of A contains the lower triangular part of the matrix A, and the strictly upper triangular part of A is not referenced. On exit, if UPLO = MagmaUpper, the diagonal and first superdiagonal of A are overwritten by the corresponding elements of the tridiagonal matrix T, and the elements above the first superdiagonal, with the array TAU, represent the orthogonal matrix Q as a product of elementary reflectors; if UPLO = MagmaLower, the diagonal and first subdiagonal of A are over written by the corresponding elements of the tridiagonal matrix T, and the elements below the first subdiagonal, with the array TAU, represent the orthogonal matrix Q as a product of elementary reflectors. See Further Details. 
[in]  lda  INTEGER The leading dimension of the array A. LDA >= max(1,N). 
[out]  d  COMPLEX array, dimension (N) The diagonal elements of the tridiagonal matrix T: D(i) = A(i,i). 
[out]  e  COMPLEX array, dimension (N1) The offdiagonal elements of the tridiagonal matrix T: E(i) = A(i,i+1) if UPLO = MagmaUpper, E(i) = A(i+1,i) if UPLO = MagmaLower. 
[out]  tau  COMPLEX array, dimension (N1) The scalar factors of the elementary reflectors (see Further Details). 
[out]  work  (workspace) COMPLEX array, dimension (MAX(1,LWORK)) On exit, if INFO = 0, WORK[0] returns the optimal LWORK. 
[in]  lwork  INTEGER The dimension of the array WORK. LWORK >= N*NB, where NB is the optimal blocksize given by magma_get_chetrd_nb(). If LWORK = 1, then a workspace query is assumed; the routine only calculates the optimal size of the WORK array, returns this value as the first entry of the WORK array, and no error message related to LWORK is issued by XERBLA. 
[out]  info  INTEGER

If UPLO = MagmaUpper, the matrix Q is represented as a product of elementary reflectors
Q = H(n1) . . . H(2) H(1).
Each H(i) has the form
H(i) = I  tau * v * v'
where tau is a complex scalar, and v is a complex vector with v(i+1:n) = 0 and v(i) = 1; v(1:i1) is stored on exit in A(1:i1,i+1), and tau in TAU(i).
If UPLO = MagmaLower, the matrix Q is represented as a product of elementary reflectors
Q = H(1) H(2) . . . H(n1).
Each H(i) has the form
H(i) = I  tau * v * v'
where tau is a complex scalar, and v is a complex vector with v(1:i) = 0 and v(i+1) = 1; v(i+2:n) is stored on exit in A(i+2:n,i), and tau in TAU(i).
The contents of A on exit are illustrated by the following examples with n = 5:
if UPLO = MagmaUpper: if UPLO = MagmaLower:
( d e v2 v3 v4 ) ( d ) ( d e v3 v4 ) ( e d ) ( d e v4 ) ( v1 e d ) ( d e ) ( v1 v2 e d ) ( d ) ( v1 v2 v3 e d )
where d and e denote diagonal and offdiagonal elements of T, and vi denotes an element of the vector defining H(i).
magma_int_t magma_chetrd2_gpu  (  magma_uplo_t  uplo, 
magma_int_t  n,  
magmaFloatComplex_ptr  dA,  
magma_int_t  ldda,  
float *  d,  
float *  e,  
magmaFloatComplex *  tau,  
magmaFloatComplex *  A,  
magma_int_t  lda,  
magmaFloatComplex *  work,  
magma_int_t  lwork,  
magmaFloatComplex_ptr  dwork,  
magma_int_t  ldwork,  
magma_int_t *  info  
) 
CHETRD2_GPU reduces a complex Hermitian matrix A to real symmetric tridiagonal form T by an orthogonal similarity transformation: Q**H * A * Q = T.
This version passes a workspace that is used in an optimized GPU matrixvector product.
[in]  uplo  magma_uplo_t

[in]  n  INTEGER The order of the matrix A. N >= 0. 
[in,out]  dA  COMPLEX array on the GPU, dimension (LDDA,N) On entry, the Hermitian matrix A. If UPLO = MagmaUpper, the leading NbyN upper triangular part of A contains the upper triangular part of the matrix A, and the strictly lower triangular part of A is not referenced. If UPLO = MagmaLower, the leading NbyN lower triangular part of A contains the lower triangular part of the matrix A, and the strictly upper triangular part of A is not referenced. On exit, if UPLO = MagmaUpper, the diagonal and first superdiagonal of A are overwritten by the corresponding elements of the tridiagonal matrix T, and the elements above the first superdiagonal, with the array TAU, represent the orthogonal matrix Q as a product of elementary reflectors; if UPLO = MagmaLower, the diagonal and first subdiagonal of A are over written by the corresponding elements of the tridiagonal matrix T, and the elements below the first subdiagonal, with the array TAU, represent the orthogonal matrix Q as a product of elementary reflectors. See Further Details. 
[in]  ldda  INTEGER The leading dimension of the array A. LDDA >= max(1,N). 
[out]  d  COMPLEX array, dimension (N) The diagonal elements of the tridiagonal matrix T: D(i) = A(i,i). 
[out]  e  COMPLEX array, dimension (N1) The offdiagonal elements of the tridiagonal matrix T: E(i) = A(i,i+1) if UPLO = MagmaUpper, E(i) = A(i+1,i) if UPLO = MagmaLower. 
[out]  tau  COMPLEX array, dimension (N1) The scalar factors of the elementary reflectors (see Further Details). 
[out]  A  (workspace) COMPLEX array, dimension (LDA,N) On exit the diagonal, the upper part (if uplo=MagmaUpper) or the lower part (if uplo=MagmaLower) are copies of DA 
[in]  lda  INTEGER The leading dimension of the array A. LDA >= max(1,N). 
[out]  work  (workspace) COMPLEX array, dimension (MAX(1,LWORK)) On exit, if INFO = 0, WORK[0] returns the optimal LWORK. 
[in]  lwork  INTEGER The dimension of the array WORK. LWORK >= N*NB, where NB is the optimal blocksize given by magma_get_chetrd_nb(). If LWORK = 1, then a workspace query is assumed; the routine only calculates the optimal size of the WORK array, returns this value as the first entry of the WORK array, and no error message related to LWORK is issued by XERBLA. 
[out]  dwork  (workspace) COMPLEX array on the GPU, dim (MAX(1,LDWORK)) 
[in]  ldwork  INTEGER The dimension of the array DWORK. LDWORK >= ldda*ceil(n/64) + 2*ldda*nb, where nb = magma_get_chetrd_nb(n), and 64 is for the blocksize of magmablas_chemv. 
[out]  info  INTEGER

If UPLO = MagmaUpper, the matrix Q is represented as a product of elementary reflectors
Q = H(n1) . . . H(2) H(1).
Each H(i) has the form
H(i) = I  tau * v * v'
where tau is a complex scalar, and v is a complex vector with v(i+1:n) = 0 and v(i) = 1; v(1:i1) is stored on exit in A(1:i1,i+1), and tau in TAU(i).
If UPLO = MagmaLower, the matrix Q is represented as a product of elementary reflectors
Q = H(1) H(2) . . . H(n1).
Each H(i) has the form
H(i) = I  tau * v * v'
where tau is a complex scalar, and v is a complex vector with v(1:i) = 0 and v(i+1) = 1; v(i+2:n) is stored on exit in A(i+2:n,i), and tau in TAU(i).
The contents of A on exit are illustrated by the following examples with n = 5:
if UPLO = MagmaUpper: if UPLO = MagmaLower:
( d e v2 v3 v4 ) ( d ) ( d e v3 v4 ) ( e d ) ( d e v4 ) ( v1 e d ) ( d e ) ( v1 v2 e d ) ( d ) ( v1 v2 v3 e d )
where d and e denote diagonal and offdiagonal elements of T, and vi denotes an element of the vector defining H(i).
magma_int_t magma_chetrd_gpu  (  magma_uplo_t  uplo, 
magma_int_t  n,  
magmaFloatComplex_ptr  dA,  
magma_int_t  ldda,  
float *  d,  
float *  e,  
magmaFloatComplex *  tau,  
magmaFloatComplex *  A,  
magma_int_t  lda,  
magmaFloatComplex *  work,  
magma_int_t  lwork,  
magma_int_t *  info  
) 
CHETRD_GPU reduces a complex Hermitian matrix A to real symmetric tridiagonal form T by an orthogonal similarity transformation: Q**H * A * Q = T.
[in]  uplo  magma_uplo_t

[in]  n  INTEGER The order of the matrix A. N >= 0. 
[in,out]  dA  COMPLEX array on the GPU, dimension (LDDA,N) On entry, the Hermitian matrix A. If UPLO = MagmaUpper, the leading NbyN upper triangular part of A contains the upper triangular part of the matrix A, and the strictly lower triangular part of A is not referenced. If UPLO = MagmaLower, the leading NbyN lower triangular part of A contains the lower triangular part of the matrix A, and the strictly upper triangular part of A is not referenced. On exit, if UPLO = MagmaUpper, the diagonal and first superdiagonal of A are overwritten by the corresponding elements of the tridiagonal matrix T, and the elements above the first superdiagonal, with the array TAU, represent the orthogonal matrix Q as a product of elementary reflectors; if UPLO = MagmaLower, the diagonal and first subdiagonal of A are over written by the corresponding elements of the tridiagonal matrix T, and the elements below the first subdiagonal, with the array TAU, represent the orthogonal matrix Q as a product of elementary reflectors. See Further Details. 
[in]  ldda  INTEGER The leading dimension of the array A. LDDA >= max(1,N). 
[out]  d  COMPLEX array, dimension (N) The diagonal elements of the tridiagonal matrix T: D(i) = A(i,i). 
[out]  e  COMPLEX array, dimension (N1) The offdiagonal elements of the tridiagonal matrix T: E(i) = A(i,i+1) if UPLO = MagmaUpper, E(i) = A(i+1,i) if UPLO = MagmaLower. 
[out]  tau  COMPLEX array, dimension (N1) The scalar factors of the elementary reflectors (see Further Details). 
[out]  A  (workspace) COMPLEX array, dimension (LDA,N) On exit the diagonal, the upper part (if uplo=MagmaUpper) or the lower part (if uplo=MagmaLower) are copies of dA 
[in]  lda  INTEGER The leading dimension of the array A. LDA >= max(1,N). 
[out]  work  (workspace) COMPLEX array, dimension (MAX(1,LWORK)) On exit, if INFO = 0, WORK[0] returns the optimal LWORK. 
[in]  lwork  INTEGER The dimension of the array WORK. LWORK >= N*NB, where NB is the optimal blocksize given by magma_get_chetrd_nb(). If LWORK = 1, then a workspace query is assumed; the routine only calculates the optimal size of the WORK array, returns this value as the first entry of the WORK array, and no error message related to LWORK is issued by XERBLA. 
[out]  info  INTEGER

If UPLO = MagmaUpper, the matrix Q is represented as a product of elementary reflectors
Q = H(n1) . . . H(2) H(1).
Each H(i) has the form
H(i) = I  tau * v * v'
where tau is a complex scalar, and v is a complex vector with v(i+1:n) = 0 and v(i) = 1; v(1:i1) is stored on exit in A(1:i1,i+1), and tau in TAU(i).
If UPLO = MagmaLower, the matrix Q is represented as a product of elementary reflectors
Q = H(1) H(2) . . . H(n1).
Each H(i) has the form
H(i) = I  tau * v * v'
where tau is a complex scalar, and v is a complex vector with v(1:i) = 0 and v(i+1) = 1; v(i+2:n) is stored on exit in A(i+2:n,i), and tau in TAU(i).
The contents of A on exit are illustrated by the following examples with n = 5:
if UPLO = MagmaUpper: if UPLO = MagmaLower:
( d e v2 v3 v4 ) ( d ) ( d e v3 v4 ) ( e d ) ( d e v4 ) ( v1 e d ) ( d e ) ( v1 v2 e d ) ( d ) ( v1 v2 v3 e d )
where d and e denote diagonal and offdiagonal elements of T, and vi denotes an element of the vector defining H(i).
magma_int_t magma_chetrd_mgpu  (  magma_int_t  ngpu, 
magma_int_t  nqueue,  
magma_uplo_t  uplo,  
magma_int_t  n,  
magmaFloatComplex *  A,  
magma_int_t  lda,  
float *  d,  
float *  e,  
magmaFloatComplex *  tau,  
magmaFloatComplex *  work,  
magma_int_t  lwork,  
magma_int_t *  info  
) 
CHETRD reduces a complex Hermitian matrix A to real symmetric tridiagonal form T by an orthogonal similarity transformation: Q**H * A * Q = T.
[in]  ngpu  INTEGER Number of GPUs to use. ngpu > 0. 
[in]  nqueue  INTEGER The number of GPU queues used for update. 10 >= nqueue > 0. 
[in]  uplo  magma_uplo_t

[in]  n  INTEGER The order of the matrix A. N >= 0. 
[in,out]  A  COMPLEX array, dimension (LDA,N) On entry, the Hermitian matrix A. If UPLO = MagmaUpper, the leading NbyN upper triangular part of A contains the upper triangular part of the matrix A, and the strictly lower triangular part of A is not referenced. If UPLO = MagmaLower, the leading NbyN lower triangular part of A contains the lower triangular part of the matrix A, and the strictly upper triangular part of A is not referenced. On exit, if UPLO = MagmaUpper, the diagonal and first superdiagonal of A are overwritten by the corresponding elements of the tridiagonal matrix T, and the elements above the first superdiagonal, with the array TAU, represent the orthogonal matrix Q as a product of elementary reflectors; if UPLO = MagmaLower, the diagonal and first subdiagonal of A are over written by the corresponding elements of the tridiagonal matrix T, and the elements below the first subdiagonal, with the array TAU, represent the orthogonal matrix Q as a product of elementary reflectors. See Further Details. 
[in]  lda  INTEGER The leading dimension of the array A. LDA >= max(1,N). 
[out]  d  COMPLEX array, dimension (N) The diagonal elements of the tridiagonal matrix T: D(i) = A(i,i). 
[out]  e  COMPLEX array, dimension (N1) The offdiagonal elements of the tridiagonal matrix T: E(i) = A(i,i+1) if UPLO = MagmaUpper, E(i) = A(i+1,i) if UPLO = MagmaLower. 
[out]  tau  COMPLEX array, dimension (N1) The scalar factors of the elementary reflectors (see Further Details). 
[out]  work  (workspace) COMPLEX array, dimension (MAX(1,LWORK)) On exit, if INFO = 0, WORK[0] returns the optimal LWORK. 
[in]  lwork  INTEGER The dimension of the array WORK. LWORK >= N*NB, where NB is the optimal blocksize given by magma_get_chetrd_nb(). If LWORK = 1, then a workspace query is assumed; the routine only calculates the optimal size of the WORK array, returns this value as the first entry of the WORK array, and no error message related to LWORK is issued by XERBLA. 
[out]  info  INTEGER

If UPLO = MagmaUpper, the matrix Q is represented as a product of elementary reflectors
Q = H(n1) . . . H(2) H(1).
Each H(i) has the form
H(i) = I  tau * v * v'
where tau is a complex scalar, and v is a complex vector with v(i+1:n) = 0 and v(i) = 1; v(1:i1) is stored on exit in A(1:i1,i+1), and tau in TAU(i).
If UPLO = MagmaLower, the matrix Q is represented as a product of elementary reflectors
Q = H(1) H(2) . . . H(n1).
Each H(i) has the form
H(i) = I  tau * v * v'
where tau is a complex scalar, and v is a complex vector with v(1:i) = 0 and v(i+1) = 1; v(i+2:n) is stored on exit in A(i+2:n,i), and tau in TAU(i).
The contents of A on exit are illustrated by the following examples with n = 5:
if UPLO = MagmaUpper: if UPLO = MagmaLower:
( d e v2 v3 v4 ) ( d ) ( d e v3 v4 ) ( e d ) ( d e v4 ) ( v1 e d ) ( d e ) ( v1 v2 e d ) ( d ) ( v1 v2 v3 e d )
where d and e denote diagonal and offdiagonal elements of T, and vi denotes an element of the vector defining H(i).
magma_int_t magma_dsytrd  (  magma_uplo_t  uplo, 
magma_int_t  n,  
double *  A,  
magma_int_t  lda,  
double *  d,  
double *  e,  
double *  tau,  
double *  work,  
magma_int_t  lwork,  
magma_int_t *  info  
) 
DSYTRD reduces a real symmetric matrix A to real symmetric tridiagonal form T by an orthogonal similarity transformation: Q**H * A * Q = T.
[in]  uplo  magma_uplo_t

[in]  n  INTEGER The order of the matrix A. N >= 0. 
[in,out]  A  DOUBLE PRECISION array, dimension (LDA,N) On entry, the symmetric matrix A. If UPLO = MagmaUpper, the leading NbyN upper triangular part of A contains the upper triangular part of the matrix A, and the strictly lower triangular part of A is not referenced. If UPLO = MagmaLower, the leading NbyN lower triangular part of A contains the lower triangular part of the matrix A, and the strictly upper triangular part of A is not referenced. On exit, if UPLO = MagmaUpper, the diagonal and first superdiagonal of A are overwritten by the corresponding elements of the tridiagonal matrix T, and the elements above the first superdiagonal, with the array TAU, represent the orthogonal matrix Q as a product of elementary reflectors; if UPLO = MagmaLower, the diagonal and first subdiagonal of A are over written by the corresponding elements of the tridiagonal matrix T, and the elements below the first subdiagonal, with the array TAU, represent the orthogonal matrix Q as a product of elementary reflectors. See Further Details. 
[in]  lda  INTEGER The leading dimension of the array A. LDA >= max(1,N). 
[out]  d  DOUBLE PRECISION array, dimension (N) The diagonal elements of the tridiagonal matrix T: D(i) = A(i,i). 
[out]  e  DOUBLE PRECISION array, dimension (N1) The offdiagonal elements of the tridiagonal matrix T: E(i) = A(i,i+1) if UPLO = MagmaUpper, E(i) = A(i+1,i) if UPLO = MagmaLower. 
[out]  tau  DOUBLE PRECISION array, dimension (N1) The scalar factors of the elementary reflectors (see Further Details). 
[out]  work  (workspace) DOUBLE PRECISION array, dimension (MAX(1,LWORK)) On exit, if INFO = 0, WORK[0] returns the optimal LWORK. 
[in]  lwork  INTEGER The dimension of the array WORK. LWORK >= N*NB, where NB is the optimal blocksize given by magma_get_dsytrd_nb(). If LWORK = 1, then a workspace query is assumed; the routine only calculates the optimal size of the WORK array, returns this value as the first entry of the WORK array, and no error message related to LWORK is issued by XERBLA. 
[out]  info  INTEGER

If UPLO = MagmaUpper, the matrix Q is represented as a product of elementary reflectors
Q = H(n1) . . . H(2) H(1).
Each H(i) has the form
H(i) = I  tau * v * v'
where tau is a real scalar, and v is a real vector with v(i+1:n) = 0 and v(i) = 1; v(1:i1) is stored on exit in A(1:i1,i+1), and tau in TAU(i).
If UPLO = MagmaLower, the matrix Q is represented as a product of elementary reflectors
Q = H(1) H(2) . . . H(n1).
Each H(i) has the form
H(i) = I  tau * v * v'
where tau is a real scalar, and v is a real vector with v(1:i) = 0 and v(i+1) = 1; v(i+2:n) is stored on exit in A(i+2:n,i), and tau in TAU(i).
The contents of A on exit are illustrated by the following examples with n = 5:
if UPLO = MagmaUpper: if UPLO = MagmaLower:
( d e v2 v3 v4 ) ( d ) ( d e v3 v4 ) ( e d ) ( d e v4 ) ( v1 e d ) ( d e ) ( v1 v2 e d ) ( d ) ( v1 v2 v3 e d )
where d and e denote diagonal and offdiagonal elements of T, and vi denotes an element of the vector defining H(i).
magma_int_t magma_dsytrd2_gpu  (  magma_uplo_t  uplo, 
magma_int_t  n,  
magmaDouble_ptr  dA,  
magma_int_t  ldda,  
double *  d,  
double *  e,  
double *  tau,  
double *  A,  
magma_int_t  lda,  
double *  work,  
magma_int_t  lwork,  
magmaDouble_ptr  dwork,  
magma_int_t  ldwork,  
magma_int_t *  info  
) 
DSYTRD2_GPU reduces a real symmetric matrix A to real symmetric tridiagonal form T by an orthogonal similarity transformation: Q**H * A * Q = T.
This version passes a workspace that is used in an optimized GPU matrixvector product.
[in]  uplo  magma_uplo_t

[in]  n  INTEGER The order of the matrix A. N >= 0. 
[in,out]  dA  DOUBLE PRECISION array on the GPU, dimension (LDDA,N) On entry, the symmetric matrix A. If UPLO = MagmaUpper, the leading NbyN upper triangular part of A contains the upper triangular part of the matrix A, and the strictly lower triangular part of A is not referenced. If UPLO = MagmaLower, the leading NbyN lower triangular part of A contains the lower triangular part of the matrix A, and the strictly upper triangular part of A is not referenced. On exit, if UPLO = MagmaUpper, the diagonal and first superdiagonal of A are overwritten by the corresponding elements of the tridiagonal matrix T, and the elements above the first superdiagonal, with the array TAU, represent the orthogonal matrix Q as a product of elementary reflectors; if UPLO = MagmaLower, the diagonal and first subdiagonal of A are over written by the corresponding elements of the tridiagonal matrix T, and the elements below the first subdiagonal, with the array TAU, represent the orthogonal matrix Q as a product of elementary reflectors. See Further Details. 
[in]  ldda  INTEGER The leading dimension of the array A. LDDA >= max(1,N). 
[out]  d  DOUBLE PRECISION array, dimension (N) The diagonal elements of the tridiagonal matrix T: D(i) = A(i,i). 
[out]  e  DOUBLE PRECISION array, dimension (N1) The offdiagonal elements of the tridiagonal matrix T: E(i) = A(i,i+1) if UPLO = MagmaUpper, E(i) = A(i+1,i) if UPLO = MagmaLower. 
[out]  tau  DOUBLE PRECISION array, dimension (N1) The scalar factors of the elementary reflectors (see Further Details). 
[out]  A  (workspace) DOUBLE PRECISION array, dimension (LDA,N) On exit the diagonal, the upper part (if uplo=MagmaUpper) or the lower part (if uplo=MagmaLower) are copies of DA 
[in]  lda  INTEGER The leading dimension of the array A. LDA >= max(1,N). 
[out]  work  (workspace) DOUBLE PRECISION array, dimension (MAX(1,LWORK)) On exit, if INFO = 0, WORK[0] returns the optimal LWORK. 
[in]  lwork  INTEGER The dimension of the array WORK. LWORK >= N*NB, where NB is the optimal blocksize given by magma_get_dsytrd_nb(). If LWORK = 1, then a workspace query is assumed; the routine only calculates the optimal size of the WORK array, returns this value as the first entry of the WORK array, and no error message related to LWORK is issued by XERBLA. 
[out]  dwork  (workspace) DOUBLE PRECISION array on the GPU, dim (MAX(1,LDWORK)) 
[in]  ldwork  INTEGER The dimension of the array DWORK. LDWORK >= ldda*ceil(n/64) + 2*ldda*nb, where nb = magma_get_dsytrd_nb(n), and 64 is for the blocksize of magmablas_dsymv. 
[out]  info  INTEGER

If UPLO = MagmaUpper, the matrix Q is represented as a product of elementary reflectors
Q = H(n1) . . . H(2) H(1).
Each H(i) has the form
H(i) = I  tau * v * v'
where tau is a real scalar, and v is a real vector with v(i+1:n) = 0 and v(i) = 1; v(1:i1) is stored on exit in A(1:i1,i+1), and tau in TAU(i).
If UPLO = MagmaLower, the matrix Q is represented as a product of elementary reflectors
Q = H(1) H(2) . . . H(n1).
Each H(i) has the form
H(i) = I  tau * v * v'
where tau is a real scalar, and v is a real vector with v(1:i) = 0 and v(i+1) = 1; v(i+2:n) is stored on exit in A(i+2:n,i), and tau in TAU(i).
The contents of A on exit are illustrated by the following examples with n = 5:
if UPLO = MagmaUpper: if UPLO = MagmaLower:
( d e v2 v3 v4 ) ( d ) ( d e v3 v4 ) ( e d ) ( d e v4 ) ( v1 e d ) ( d e ) ( v1 v2 e d ) ( d ) ( v1 v2 v3 e d )
where d and e denote diagonal and offdiagonal elements of T, and vi denotes an element of the vector defining H(i).
magma_int_t magma_dsytrd_gpu  (  magma_uplo_t  uplo, 
magma_int_t  n,  
magmaDouble_ptr  dA,  
magma_int_t  ldda,  
double *  d,  
double *  e,  
double *  tau,  
double *  A,  
magma_int_t  lda,  
double *  work,  
magma_int_t  lwork,  
magma_int_t *  info  
) 
DSYTRD_GPU reduces a real symmetric matrix A to real symmetric tridiagonal form T by an orthogonal similarity transformation: Q**H * A * Q = T.
[in]  uplo  magma_uplo_t

[in]  n  INTEGER The order of the matrix A. N >= 0. 
[in,out]  dA  DOUBLE PRECISION array on the GPU, dimension (LDDA,N) On entry, the symmetric matrix A. If UPLO = MagmaUpper, the leading NbyN upper triangular part of A contains the upper triangular part of the matrix A, and the strictly lower triangular part of A is not referenced. If UPLO = MagmaLower, the leading NbyN lower triangular part of A contains the lower triangular part of the matrix A, and the strictly upper triangular part of A is not referenced. On exit, if UPLO = MagmaUpper, the diagonal and first superdiagonal of A are overwritten by the corresponding elements of the tridiagonal matrix T, and the elements above the first superdiagonal, with the array TAU, represent the orthogonal matrix Q as a product of elementary reflectors; if UPLO = MagmaLower, the diagonal and first subdiagonal of A are over written by the corresponding elements of the tridiagonal matrix T, and the elements below the first subdiagonal, with the array TAU, represent the orthogonal matrix Q as a product of elementary reflectors. See Further Details. 
[in]  ldda  INTEGER The leading dimension of the array A. LDDA >= max(1,N). 
[out]  d  DOUBLE PRECISION array, dimension (N) The diagonal elements of the tridiagonal matrix T: D(i) = A(i,i). 
[out]  e  DOUBLE PRECISION array, dimension (N1) The offdiagonal elements of the tridiagonal matrix T: E(i) = A(i,i+1) if UPLO = MagmaUpper, E(i) = A(i+1,i) if UPLO = MagmaLower. 
[out]  tau  DOUBLE PRECISION array, dimension (N1) The scalar factors of the elementary reflectors (see Further Details). 
[out]  A  (workspace) DOUBLE PRECISION array, dimension (LDA,N) On exit the diagonal, the upper part (if uplo=MagmaUpper) or the lower part (if uplo=MagmaLower) are copies of dA 
[in]  lda  INTEGER The leading dimension of the array A. LDA >= max(1,N). 
[out]  work  (workspace) DOUBLE PRECISION array, dimension (MAX(1,LWORK)) On exit, if INFO = 0, WORK[0] returns the optimal LWORK. 
[in]  lwork  INTEGER The dimension of the array WORK. LWORK >= N*NB, where NB is the optimal blocksize given by magma_get_dsytrd_nb(). If LWORK = 1, then a workspace query is assumed; the routine only calculates the optimal size of the WORK array, returns this value as the first entry of the WORK array, and no error message related to LWORK is issued by XERBLA. 
[out]  info  INTEGER

If UPLO = MagmaUpper, the matrix Q is represented as a product of elementary reflectors
Q = H(n1) . . . H(2) H(1).
Each H(i) has the form
H(i) = I  tau * v * v'
where tau is a real scalar, and v is a real vector with v(i+1:n) = 0 and v(i) = 1; v(1:i1) is stored on exit in A(1:i1,i+1), and tau in TAU(i).
If UPLO = MagmaLower, the matrix Q is represented as a product of elementary reflectors
Q = H(1) H(2) . . . H(n1).
Each H(i) has the form
H(i) = I  tau * v * v'
where tau is a real scalar, and v is a real vector with v(1:i) = 0 and v(i+1) = 1; v(i+2:n) is stored on exit in A(i+2:n,i), and tau in TAU(i).
The contents of A on exit are illustrated by the following examples with n = 5:
if UPLO = MagmaUpper: if UPLO = MagmaLower:
( d e v2 v3 v4 ) ( d ) ( d e v3 v4 ) ( e d ) ( d e v4 ) ( v1 e d ) ( d e ) ( v1 v2 e d ) ( d ) ( v1 v2 v3 e d )
where d and e denote diagonal and offdiagonal elements of T, and vi denotes an element of the vector defining H(i).
magma_int_t magma_dsytrd_mgpu  (  magma_int_t  ngpu, 
magma_int_t  nqueue,  
magma_uplo_t  uplo,  
magma_int_t  n,  
double *  A,  
magma_int_t  lda,  
double *  d,  
double *  e,  
double *  tau,  
double *  work,  
magma_int_t  lwork,  
magma_int_t *  info  
) 
DSYTRD reduces a real symmetric matrix A to real symmetric tridiagonal form T by an orthogonal similarity transformation: Q**H * A * Q = T.
[in]  ngpu  INTEGER Number of GPUs to use. ngpu > 0. 
[in]  nqueue  INTEGER The number of GPU queues used for update. 10 >= nqueue > 0. 
[in]  uplo  magma_uplo_t

[in]  n  INTEGER The order of the matrix A. N >= 0. 
[in,out]  A  DOUBLE PRECISION array, dimension (LDA,N) On entry, the symmetric matrix A. If UPLO = MagmaUpper, the leading NbyN upper triangular part of A contains the upper triangular part of the matrix A, and the strictly lower triangular part of A is not referenced. If UPLO = MagmaLower, the leading NbyN lower triangular part of A contains the lower triangular part of the matrix A, and the strictly upper triangular part of A is not referenced. On exit, if UPLO = MagmaUpper, the diagonal and first superdiagonal of A are overwritten by the corresponding elements of the tridiagonal matrix T, and the elements above the first superdiagonal, with the array TAU, represent the orthogonal matrix Q as a product of elementary reflectors; if UPLO = MagmaLower, the diagonal and first subdiagonal of A are over written by the corresponding elements of the tridiagonal matrix T, and the elements below the first subdiagonal, with the array TAU, represent the orthogonal matrix Q as a product of elementary reflectors. See Further Details. 
[in]  lda  INTEGER The leading dimension of the array A. LDA >= max(1,N). 
[out]  d  DOUBLE PRECISION array, dimension (N) The diagonal elements of the tridiagonal matrix T: D(i) = A(i,i). 
[out]  e  DOUBLE PRECISION array, dimension (N1) The offdiagonal elements of the tridiagonal matrix T: E(i) = A(i,i+1) if UPLO = MagmaUpper, E(i) = A(i+1,i) if UPLO = MagmaLower. 
[out]  tau  DOUBLE PRECISION array, dimension (N1) The scalar factors of the elementary reflectors (see Further Details). 
[out]  work  (workspace) DOUBLE PRECISION array, dimension (MAX(1,LWORK)) On exit, if INFO = 0, WORK[0] returns the optimal LWORK. 
[in]  lwork  INTEGER The dimension of the array WORK. LWORK >= N*NB, where NB is the optimal blocksize given by magma_get_dsytrd_nb(). If LWORK = 1, then a workspace query is assumed; the routine only calculates the optimal size of the WORK array, returns this value as the first entry of the WORK array, and no error message related to LWORK is issued by XERBLA. 
[out]  info  INTEGER

If UPLO = MagmaUpper, the matrix Q is represented as a product of elementary reflectors
Q = H(n1) . . . H(2) H(1).
Each H(i) has the form
H(i) = I  tau * v * v'
where tau is a real scalar, and v is a real vector with v(i+1:n) = 0 and v(i) = 1; v(1:i1) is stored on exit in A(1:i1,i+1), and tau in TAU(i).
If UPLO = MagmaLower, the matrix Q is represented as a product of elementary reflectors
Q = H(1) H(2) . . . H(n1).
Each H(i) has the form
H(i) = I  tau * v * v'
where tau is a real scalar, and v is a real vector with v(1:i) = 0 and v(i+1) = 1; v(i+2:n) is stored on exit in A(i+2:n,i), and tau in TAU(i).
The contents of A on exit are illustrated by the following examples with n = 5:
if UPLO = MagmaUpper: if UPLO = MagmaLower:
( d e v2 v3 v4 ) ( d ) ( d e v3 v4 ) ( e d ) ( d e v4 ) ( v1 e d ) ( d e ) ( v1 v2 e d ) ( d ) ( v1 v2 v3 e d )
where d and e denote diagonal and offdiagonal elements of T, and vi denotes an element of the vector defining H(i).
magma_int_t magma_ssytrd  (  magma_uplo_t  uplo, 
magma_int_t  n,  
float *  A,  
magma_int_t  lda,  
float *  d,  
float *  e,  
float *  tau,  
float *  work,  
magma_int_t  lwork,  
magma_int_t *  info  
) 
SSYTRD reduces a real symmetric matrix A to real symmetric tridiagonal form T by an orthogonal similarity transformation: Q**H * A * Q = T.
[in]  uplo  magma_uplo_t

[in]  n  INTEGER The order of the matrix A. N >= 0. 
[in,out]  A  REAL array, dimension (LDA,N) On entry, the symmetric matrix A. If UPLO = MagmaUpper, the leading NbyN upper triangular part of A contains the upper triangular part of the matrix A, and the strictly lower triangular part of A is not referenced. If UPLO = MagmaLower, the leading NbyN lower triangular part of A contains the lower triangular part of the matrix A, and the strictly upper triangular part of A is not referenced. On exit, if UPLO = MagmaUpper, the diagonal and first superdiagonal of A are overwritten by the corresponding elements of the tridiagonal matrix T, and the elements above the first superdiagonal, with the array TAU, represent the orthogonal matrix Q as a product of elementary reflectors; if UPLO = MagmaLower, the diagonal and first subdiagonal of A are over written by the corresponding elements of the tridiagonal matrix T, and the elements below the first subdiagonal, with the array TAU, represent the orthogonal matrix Q as a product of elementary reflectors. See Further Details. 
[in]  lda  INTEGER The leading dimension of the array A. LDA >= max(1,N). 
[out]  d  REAL array, dimension (N) The diagonal elements of the tridiagonal matrix T: D(i) = A(i,i). 
[out]  e  REAL array, dimension (N1) The offdiagonal elements of the tridiagonal matrix T: E(i) = A(i,i+1) if UPLO = MagmaUpper, E(i) = A(i+1,i) if UPLO = MagmaLower. 
[out]  tau  REAL array, dimension (N1) The scalar factors of the elementary reflectors (see Further Details). 
[out]  work  (workspace) REAL array, dimension (MAX(1,LWORK)) On exit, if INFO = 0, WORK[0] returns the optimal LWORK. 
[in]  lwork  INTEGER The dimension of the array WORK. LWORK >= N*NB, where NB is the optimal blocksize given by magma_get_ssytrd_nb(). If LWORK = 1, then a workspace query is assumed; the routine only calculates the optimal size of the WORK array, returns this value as the first entry of the WORK array, and no error message related to LWORK is issued by XERBLA. 
[out]  info  INTEGER

If UPLO = MagmaUpper, the matrix Q is represented as a product of elementary reflectors
Q = H(n1) . . . H(2) H(1).
Each H(i) has the form
H(i) = I  tau * v * v'
where tau is a real scalar, and v is a real vector with v(i+1:n) = 0 and v(i) = 1; v(1:i1) is stored on exit in A(1:i1,i+1), and tau in TAU(i).
If UPLO = MagmaLower, the matrix Q is represented as a product of elementary reflectors
Q = H(1) H(2) . . . H(n1).
Each H(i) has the form
H(i) = I  tau * v * v'
where tau is a real scalar, and v is a real vector with v(1:i) = 0 and v(i+1) = 1; v(i+2:n) is stored on exit in A(i+2:n,i), and tau in TAU(i).
The contents of A on exit are illustrated by the following examples with n = 5:
if UPLO = MagmaUpper: if UPLO = MagmaLower:
( d e v2 v3 v4 ) ( d ) ( d e v3 v4 ) ( e d ) ( d e v4 ) ( v1 e d ) ( d e ) ( v1 v2 e d ) ( d ) ( v1 v2 v3 e d )
where d and e denote diagonal and offdiagonal elements of T, and vi denotes an element of the vector defining H(i).
magma_int_t magma_ssytrd2_gpu  (  magma_uplo_t  uplo, 
magma_int_t  n,  
magmaFloat_ptr  dA,  
magma_int_t  ldda,  
float *  d,  
float *  e,  
float *  tau,  
float *  A,  
magma_int_t  lda,  
float *  work,  
magma_int_t  lwork,  
magmaFloat_ptr  dwork,  
magma_int_t  ldwork,  
magma_int_t *  info  
) 
SSYTRD2_GPU reduces a real symmetric matrix A to real symmetric tridiagonal form T by an orthogonal similarity transformation: Q**H * A * Q = T.
This version passes a workspace that is used in an optimized GPU matrixvector product.
[in]  uplo  magma_uplo_t

[in]  n  INTEGER The order of the matrix A. N >= 0. 
[in,out]  dA  REAL array on the GPU, dimension (LDDA,N) On entry, the symmetric matrix A. If UPLO = MagmaUpper, the leading NbyN upper triangular part of A contains the upper triangular part of the matrix A, and the strictly lower triangular part of A is not referenced. If UPLO = MagmaLower, the leading NbyN lower triangular part of A contains the lower triangular part of the matrix A, and the strictly upper triangular part of A is not referenced. On exit, if UPLO = MagmaUpper, the diagonal and first superdiagonal of A are overwritten by the corresponding elements of the tridiagonal matrix T, and the elements above the first superdiagonal, with the array TAU, represent the orthogonal matrix Q as a product of elementary reflectors; if UPLO = MagmaLower, the diagonal and first subdiagonal of A are over written by the corresponding elements of the tridiagonal matrix T, and the elements below the first subdiagonal, with the array TAU, represent the orthogonal matrix Q as a product of elementary reflectors. See Further Details. 
[in]  ldda  INTEGER The leading dimension of the array A. LDDA >= max(1,N). 
[out]  d  REAL array, dimension (N) The diagonal elements of the tridiagonal matrix T: D(i) = A(i,i). 
[out]  e  REAL array, dimension (N1) The offdiagonal elements of the tridiagonal matrix T: E(i) = A(i,i+1) if UPLO = MagmaUpper, E(i) = A(i+1,i) if UPLO = MagmaLower. 
[out]  tau  REAL array, dimension (N1) The scalar factors of the elementary reflectors (see Further Details). 
[out]  A  (workspace) REAL array, dimension (LDA,N) On exit the diagonal, the upper part (if uplo=MagmaUpper) or the lower part (if uplo=MagmaLower) are copies of DA 
[in]  lda  INTEGER The leading dimension of the array A. LDA >= max(1,N). 
[out]  work  (workspace) REAL array, dimension (MAX(1,LWORK)) On exit, if INFO = 0, WORK[0] returns the optimal LWORK. 
[in]  lwork  INTEGER The dimension of the array WORK. LWORK >= N*NB, where NB is the optimal blocksize given by magma_get_ssytrd_nb(). If LWORK = 1, then a workspace query is assumed; the routine only calculates the optimal size of the WORK array, returns this value as the first entry of the WORK array, and no error message related to LWORK is issued by XERBLA. 
[out]  dwork  (workspace) REAL array on the GPU, dim (MAX(1,LDWORK)) 
[in]  ldwork  INTEGER The dimension of the array DWORK. LDWORK >= ldda*ceil(n/64) + 2*ldda*nb, where nb = magma_get_ssytrd_nb(n), and 64 is for the blocksize of magmablas_ssymv. 
[out]  info  INTEGER

If UPLO = MagmaUpper, the matrix Q is represented as a product of elementary reflectors
Q = H(n1) . . . H(2) H(1).
Each H(i) has the form
H(i) = I  tau * v * v'
where tau is a real scalar, and v is a real vector with v(i+1:n) = 0 and v(i) = 1; v(1:i1) is stored on exit in A(1:i1,i+1), and tau in TAU(i).
If UPLO = MagmaLower, the matrix Q is represented as a product of elementary reflectors
Q = H(1) H(2) . . . H(n1).
Each H(i) has the form
H(i) = I  tau * v * v'
where tau is a real scalar, and v is a real vector with v(1:i) = 0 and v(i+1) = 1; v(i+2:n) is stored on exit in A(i+2:n,i), and tau in TAU(i).
The contents of A on exit are illustrated by the following examples with n = 5:
if UPLO = MagmaUpper: if UPLO = MagmaLower:
( d e v2 v3 v4 ) ( d ) ( d e v3 v4 ) ( e d ) ( d e v4 ) ( v1 e d ) ( d e ) ( v1 v2 e d ) ( d ) ( v1 v2 v3 e d )
where d and e denote diagonal and offdiagonal elements of T, and vi denotes an element of the vector defining H(i).
magma_int_t magma_ssytrd_gpu  (  magma_uplo_t  uplo, 
magma_int_t  n,  
magmaFloat_ptr  dA,  
magma_int_t  ldda,  
float *  d,  
float *  e,  
float *  tau,  
float *  A,  
magma_int_t  lda,  
float *  work,  
magma_int_t  lwork,  
magma_int_t *  info  
) 
SSYTRD_GPU reduces a real symmetric matrix A to real symmetric tridiagonal form T by an orthogonal similarity transformation: Q**H * A * Q = T.
[in]  uplo  magma_uplo_t

[in]  n  INTEGER The order of the matrix A. N >= 0. 
[in,out]  dA  REAL array on the GPU, dimension (LDDA,N) On entry, the symmetric matrix A. If UPLO = MagmaUpper, the leading NbyN upper triangular part of A contains the upper triangular part of the matrix A, and the strictly lower triangular part of A is not referenced. If UPLO = MagmaLower, the leading NbyN lower triangular part of A contains the lower triangular part of the matrix A, and the strictly upper triangular part of A is not referenced. On exit, if UPLO = MagmaUpper, the diagonal and first superdiagonal of A are overwritten by the corresponding elements of the tridiagonal matrix T, and the elements above the first superdiagonal, with the array TAU, represent the orthogonal matrix Q as a product of elementary reflectors; if UPLO = MagmaLower, the diagonal and first subdiagonal of A are over written by the corresponding elements of the tridiagonal matrix T, and the elements below the first subdiagonal, with the array TAU, represent the orthogonal matrix Q as a product of elementary reflectors. See Further Details. 
[in]  ldda  INTEGER The leading dimension of the array A. LDDA >= max(1,N). 
[out]  d  REAL array, dimension (N) The diagonal elements of the tridiagonal matrix T: D(i) = A(i,i). 
[out]  e  REAL array, dimension (N1) The offdiagonal elements of the tridiagonal matrix T: E(i) = A(i,i+1) if UPLO = MagmaUpper, E(i) = A(i+1,i) if UPLO = MagmaLower. 
[out]  tau  REAL array, dimension (N1) The scalar factors of the elementary reflectors (see Further Details). 
[out]  A  (workspace) REAL array, dimension (LDA,N) On exit the diagonal, the upper part (if uplo=MagmaUpper) or the lower part (if uplo=MagmaLower) are copies of dA 
[in]  lda  INTEGER The leading dimension of the array A. LDA >= max(1,N). 
[out]  work  (workspace) REAL array, dimension (MAX(1,LWORK)) On exit, if INFO = 0, WORK[0] returns the optimal LWORK. 
[in]  lwork  INTEGER The dimension of the array WORK. LWORK >= N*NB, where NB is the optimal blocksize given by magma_get_ssytrd_nb(). If LWORK = 1, then a workspace query is assumed; the routine only calculates the optimal size of the WORK array, returns this value as the first entry of the WORK array, and no error message related to LWORK is issued by XERBLA. 
[out]  info  INTEGER

If UPLO = MagmaUpper, the matrix Q is represented as a product of elementary reflectors
Q = H(n1) . . . H(2) H(1).
Each H(i) has the form
H(i) = I  tau * v * v'
where tau is a real scalar, and v is a real vector with v(i+1:n) = 0 and v(i) = 1; v(1:i1) is stored on exit in A(1:i1,i+1), and tau in TAU(i).
If UPLO = MagmaLower, the matrix Q is represented as a product of elementary reflectors
Q = H(1) H(2) . . . H(n1).
Each H(i) has the form
H(i) = I  tau * v * v'
where tau is a real scalar, and v is a real vector with v(1:i) = 0 and v(i+1) = 1; v(i+2:n) is stored on exit in A(i+2:n,i), and tau in TAU(i).
The contents of A on exit are illustrated by the following examples with n = 5:
if UPLO = MagmaUpper: if UPLO = MagmaLower:
( d e v2 v3 v4 ) ( d ) ( d e v3 v4 ) ( e d ) ( d e v4 ) ( v1 e d ) ( d e ) ( v1 v2 e d ) ( d ) ( v1 v2 v3 e d )
where d and e denote diagonal and offdiagonal elements of T, and vi denotes an element of the vector defining H(i).
magma_int_t magma_ssytrd_mgpu  (  magma_int_t  ngpu, 
magma_int_t  nqueue,  
magma_uplo_t  uplo,  
magma_int_t  n,  
float *  A,  
magma_int_t  lda,  
float *  d,  
float *  e,  
float *  tau,  
float *  work,  
magma_int_t  lwork,  
magma_int_t *  info  
) 
SSYTRD reduces a real symmetric matrix A to real symmetric tridiagonal form T by an orthogonal similarity transformation: Q**H * A * Q = T.
[in]  ngpu  INTEGER Number of GPUs to use. ngpu > 0. 
[in]  nqueue  INTEGER The number of GPU queues used for update. 10 >= nqueue > 0. 
[in]  uplo  magma_uplo_t

[in]  n  INTEGER The order of the matrix A. N >= 0. 
[in,out]  A  REAL array, dimension (LDA,N) On entry, the symmetric matrix A. If UPLO = MagmaUpper, the leading NbyN upper triangular part of A contains the upper triangular part of the matrix A, and the strictly lower triangular part of A is not referenced. If UPLO = MagmaLower, the leading NbyN lower triangular part of A contains the lower triangular part of the matrix A, and the strictly upper triangular part of A is not referenced. On exit, if UPLO = MagmaUpper, the diagonal and first superdiagonal of A are overwritten by the corresponding elements of the tridiagonal matrix T, and the elements above the first superdiagonal, with the array TAU, represent the orthogonal matrix Q as a product of elementary reflectors; if UPLO = MagmaLower, the diagonal and first subdiagonal of A are over written by the corresponding elements of the tridiagonal matrix T, and the elements below the first subdiagonal, with the array TAU, represent the orthogonal matrix Q as a product of elementary reflectors. See Further Details. 
[in]  lda  INTEGER The leading dimension of the array A. LDA >= max(1,N). 
[out]  d  REAL array, dimension (N) The diagonal elements of the tridiagonal matrix T: D(i) = A(i,i). 
[out]  e  REAL array, dimension (N1) The offdiagonal elements of the tridiagonal matrix T: E(i) = A(i,i+1) if UPLO = MagmaUpper, E(i) = A(i+1,i) if UPLO = MagmaLower. 
[out]  tau  REAL array, dimension (N1) The scalar factors of the elementary reflectors (see Further Details). 
[out]  work  (workspace) REAL array, dimension (MAX(1,LWORK)) On exit, if INFO = 0, WORK[0] returns the optimal LWORK. 
[in]  lwork  INTEGER The dimension of the array WORK. LWORK >= N*NB, where NB is the optimal blocksize given by magma_get_ssytrd_nb(). If LWORK = 1, then a workspace query is assumed; the routine only calculates the optimal size of the WORK array, returns this value as the first entry of the WORK array, and no error message related to LWORK is issued by XERBLA. 
[out]  info  INTEGER

If UPLO = MagmaUpper, the matrix Q is represented as a product of elementary reflectors
Q = H(n1) . . . H(2) H(1).
Each H(i) has the form
H(i) = I  tau * v * v'
where tau is a real scalar, and v is a real vector with v(i+1:n) = 0 and v(i) = 1; v(1:i1) is stored on exit in A(1:i1,i+1), and tau in TAU(i).
If UPLO = MagmaLower, the matrix Q is represented as a product of elementary reflectors
Q = H(1) H(2) . . . H(n1).
Each H(i) has the form
H(i) = I  tau * v * v'
where tau is a real scalar, and v is a real vector with v(1:i) = 0 and v(i+1) = 1; v(i+2:n) is stored on exit in A(i+2:n,i), and tau in TAU(i).
The contents of A on exit are illustrated by the following examples with n = 5:
if UPLO = MagmaUpper: if UPLO = MagmaLower:
( d e v2 v3 v4 ) ( d ) ( d e v3 v4 ) ( e d ) ( d e v4 ) ( v1 e d ) ( d e ) ( v1 v2 e d ) ( d ) ( v1 v2 v3 e d )
where d and e denote diagonal and offdiagonal elements of T, and vi denotes an element of the vector defining H(i).
magma_int_t magma_zhetrd  (  magma_uplo_t  uplo, 
magma_int_t  n,  
magmaDoubleComplex *  A,  
magma_int_t  lda,  
double *  d,  
double *  e,  
magmaDoubleComplex *  tau,  
magmaDoubleComplex *  work,  
magma_int_t  lwork,  
magma_int_t *  info  
) 
ZHETRD reduces a complex Hermitian matrix A to real symmetric tridiagonal form T by an orthogonal similarity transformation: Q**H * A * Q = T.
[in]  uplo  magma_uplo_t

[in]  n  INTEGER The order of the matrix A. N >= 0. 
[in,out]  A  COMPLEX_16 array, dimension (LDA,N) On entry, the Hermitian matrix A. If UPLO = MagmaUpper, the leading NbyN upper triangular part of A contains the upper triangular part of the matrix A, and the strictly lower triangular part of A is not referenced. If UPLO = MagmaLower, the leading NbyN lower triangular part of A contains the lower triangular part of the matrix A, and the strictly upper triangular part of A is not referenced. On exit, if UPLO = MagmaUpper, the diagonal and first superdiagonal of A are overwritten by the corresponding elements of the tridiagonal matrix T, and the elements above the first superdiagonal, with the array TAU, represent the orthogonal matrix Q as a product of elementary reflectors; if UPLO = MagmaLower, the diagonal and first subdiagonal of A are over written by the corresponding elements of the tridiagonal matrix T, and the elements below the first subdiagonal, with the array TAU, represent the orthogonal matrix Q as a product of elementary reflectors. See Further Details. 
[in]  lda  INTEGER The leading dimension of the array A. LDA >= max(1,N). 
[out]  d  COMPLEX_16 array, dimension (N) The diagonal elements of the tridiagonal matrix T: D(i) = A(i,i). 
[out]  e  COMPLEX_16 array, dimension (N1) The offdiagonal elements of the tridiagonal matrix T: E(i) = A(i,i+1) if UPLO = MagmaUpper, E(i) = A(i+1,i) if UPLO = MagmaLower. 
[out]  tau  COMPLEX_16 array, dimension (N1) The scalar factors of the elementary reflectors (see Further Details). 
[out]  work  (workspace) COMPLEX_16 array, dimension (MAX(1,LWORK)) On exit, if INFO = 0, WORK[0] returns the optimal LWORK. 
[in]  lwork  INTEGER The dimension of the array WORK. LWORK >= N*NB, where NB is the optimal blocksize given by magma_get_zhetrd_nb(). If LWORK = 1, then a workspace query is assumed; the routine only calculates the optimal size of the WORK array, returns this value as the first entry of the WORK array, and no error message related to LWORK is issued by XERBLA. 
[out]  info  INTEGER

If UPLO = MagmaUpper, the matrix Q is represented as a product of elementary reflectors
Q = H(n1) . . . H(2) H(1).
Each H(i) has the form
H(i) = I  tau * v * v'
where tau is a complex scalar, and v is a complex vector with v(i+1:n) = 0 and v(i) = 1; v(1:i1) is stored on exit in A(1:i1,i+1), and tau in TAU(i).
If UPLO = MagmaLower, the matrix Q is represented as a product of elementary reflectors
Q = H(1) H(2) . . . H(n1).
Each H(i) has the form
H(i) = I  tau * v * v'
where tau is a complex scalar, and v is a complex vector with v(1:i) = 0 and v(i+1) = 1; v(i+2:n) is stored on exit in A(i+2:n,i), and tau in TAU(i).
The contents of A on exit are illustrated by the following examples with n = 5:
if UPLO = MagmaUpper: if UPLO = MagmaLower:
( d e v2 v3 v4 ) ( d ) ( d e v3 v4 ) ( e d ) ( d e v4 ) ( v1 e d ) ( d e ) ( v1 v2 e d ) ( d ) ( v1 v2 v3 e d )
where d and e denote diagonal and offdiagonal elements of T, and vi denotes an element of the vector defining H(i).
magma_int_t magma_zhetrd2_gpu  (  magma_uplo_t  uplo, 
magma_int_t  n,  
magmaDoubleComplex_ptr  dA,  
magma_int_t  ldda,  
double *  d,  
double *  e,  
magmaDoubleComplex *  tau,  
magmaDoubleComplex *  A,  
magma_int_t  lda,  
magmaDoubleComplex *  work,  
magma_int_t  lwork,  
magmaDoubleComplex_ptr  dwork,  
magma_int_t  ldwork,  
magma_int_t *  info  
) 
ZHETRD2_GPU reduces a complex Hermitian matrix A to real symmetric tridiagonal form T by an orthogonal similarity transformation: Q**H * A * Q = T.
This version passes a workspace that is used in an optimized GPU matrixvector product.
[in]  uplo  magma_uplo_t

[in]  n  INTEGER The order of the matrix A. N >= 0. 
[in,out]  dA  COMPLEX_16 array on the GPU, dimension (LDDA,N) On entry, the Hermitian matrix A. If UPLO = MagmaUpper, the leading NbyN upper triangular part of A contains the upper triangular part of the matrix A, and the strictly lower triangular part of A is not referenced. If UPLO = MagmaLower, the leading NbyN lower triangular part of A contains the lower triangular part of the matrix A, and the strictly upper triangular part of A is not referenced. On exit, if UPLO = MagmaUpper, the diagonal and first superdiagonal of A are overwritten by the corresponding elements of the tridiagonal matrix T, and the elements above the first superdiagonal, with the array TAU, represent the orthogonal matrix Q as a product of elementary reflectors; if UPLO = MagmaLower, the diagonal and first subdiagonal of A are over written by the corresponding elements of the tridiagonal matrix T, and the elements below the first subdiagonal, with the array TAU, represent the orthogonal matrix Q as a product of elementary reflectors. See Further Details. 
[in]  ldda  INTEGER The leading dimension of the array A. LDDA >= max(1,N). 
[out]  d  COMPLEX_16 array, dimension (N) The diagonal elements of the tridiagonal matrix T: D(i) = A(i,i). 
[out]  e  COMPLEX_16 array, dimension (N1) The offdiagonal elements of the tridiagonal matrix T: E(i) = A(i,i+1) if UPLO = MagmaUpper, E(i) = A(i+1,i) if UPLO = MagmaLower. 
[out]  tau  COMPLEX_16 array, dimension (N1) The scalar factors of the elementary reflectors (see Further Details). 
[out]  A  (workspace) COMPLEX_16 array, dimension (LDA,N) On exit the diagonal, the upper part (if uplo=MagmaUpper) or the lower part (if uplo=MagmaLower) are copies of DA 
[in]  lda  INTEGER The leading dimension of the array A. LDA >= max(1,N). 
[out]  work  (workspace) COMPLEX_16 array, dimension (MAX(1,LWORK)) On exit, if INFO = 0, WORK[0] returns the optimal LWORK. 
[in]  lwork  INTEGER The dimension of the array WORK. LWORK >= N*NB, where NB is the optimal blocksize given by magma_get_zhetrd_nb(). If LWORK = 1, then a workspace query is assumed; the routine only calculates the optimal size of the WORK array, returns this value as the first entry of the WORK array, and no error message related to LWORK is issued by XERBLA. 
[out]  dwork  (workspace) COMPLEX_16 array on the GPU, dim (MAX(1,LDWORK)) 
[in]  ldwork  INTEGER The dimension of the array DWORK. LDWORK >= ldda*ceil(n/64) + 2*ldda*nb, where nb = magma_get_zhetrd_nb(n), and 64 is for the blocksize of magmablas_zhemv. 
[out]  info  INTEGER

If UPLO = MagmaUpper, the matrix Q is represented as a product of elementary reflectors
Q = H(n1) . . . H(2) H(1).
Each H(i) has the form
H(i) = I  tau * v * v'
where tau is a complex scalar, and v is a complex vector with v(i+1:n) = 0 and v(i) = 1; v(1:i1) is stored on exit in A(1:i1,i+1), and tau in TAU(i).
If UPLO = MagmaLower, the matrix Q is represented as a product of elementary reflectors
Q = H(1) H(2) . . . H(n1).
Each H(i) has the form
H(i) = I  tau * v * v'
where tau is a complex scalar, and v is a complex vector with v(1:i) = 0 and v(i+1) = 1; v(i+2:n) is stored on exit in A(i+2:n,i), and tau in TAU(i).
The contents of A on exit are illustrated by the following examples with n = 5:
if UPLO = MagmaUpper: if UPLO = MagmaLower:
( d e v2 v3 v4 ) ( d ) ( d e v3 v4 ) ( e d ) ( d e v4 ) ( v1 e d ) ( d e ) ( v1 v2 e d ) ( d ) ( v1 v2 v3 e d )
where d and e denote diagonal and offdiagonal elements of T, and vi denotes an element of the vector defining H(i).
magma_int_t magma_zhetrd_gpu  (  magma_uplo_t  uplo, 
magma_int_t  n,  
magmaDoubleComplex_ptr  dA,  
magma_int_t  ldda,  
double *  d,  
double *  e,  
magmaDoubleComplex *  tau,  
magmaDoubleComplex *  A,  
magma_int_t  lda,  
magmaDoubleComplex *  work,  
magma_int_t  lwork,  
magma_int_t *  info  
) 
ZHETRD_GPU reduces a complex Hermitian matrix A to real symmetric tridiagonal form T by an orthogonal similarity transformation: Q**H * A * Q = T.
[in]  uplo  magma_uplo_t

[in]  n  INTEGER The order of the matrix A. N >= 0. 
[in,out]  dA  COMPLEX_16 array on the GPU, dimension (LDDA,N) On entry, the Hermitian matrix A. If UPLO = MagmaUpper, the leading NbyN upper triangular part of A contains the upper triangular part of the matrix A, and the strictly lower triangular part of A is not referenced. If UPLO = MagmaLower, the leading NbyN lower triangular part of A contains the lower triangular part of the matrix A, and the strictly upper triangular part of A is not referenced. On exit, if UPLO = MagmaUpper, the diagonal and first superdiagonal of A are overwritten by the corresponding elements of the tridiagonal matrix T, and the elements above the first superdiagonal, with the array TAU, represent the orthogonal matrix Q as a product of elementary reflectors; if UPLO = MagmaLower, the diagonal and first subdiagonal of A are over written by the corresponding elements of the tridiagonal matrix T, and the elements below the first subdiagonal, with the array TAU, represent the orthogonal matrix Q as a product of elementary reflectors. See Further Details. 
[in]  ldda  INTEGER The leading dimension of the array A. LDDA >= max(1,N). 
[out]  d  COMPLEX_16 array, dimension (N) The diagonal elements of the tridiagonal matrix T: D(i) = A(i,i). 
[out]  e  COMPLEX_16 array, dimension (N1) The offdiagonal elements of the tridiagonal matrix T: E(i) = A(i,i+1) if UPLO = MagmaUpper, E(i) = A(i+1,i) if UPLO = MagmaLower. 
[out]  tau  COMPLEX_16 array, dimension (N1) The scalar factors of the elementary reflectors (see Further Details). 
[out]  A  (workspace) COMPLEX_16 array, dimension (LDA,N) On exit the diagonal, the upper part (if uplo=MagmaUpper) or the lower part (if uplo=MagmaLower) are copies of dA 
[in]  lda  INTEGER The leading dimension of the array A. LDA >= max(1,N). 
[out]  work  (workspace) COMPLEX_16 array, dimension (MAX(1,LWORK)) On exit, if INFO = 0, WORK[0] returns the optimal LWORK. 
[in]  lwork  INTEGER The dimension of the array WORK. LWORK >= N*NB, where NB is the optimal blocksize given by magma_get_zhetrd_nb(). If LWORK = 1, then a workspace query is assumed; the routine only calculates the optimal size of the WORK array, returns this value as the first entry of the WORK array, and no error message related to LWORK is issued by XERBLA. 
[out]  info  INTEGER

If UPLO = MagmaUpper, the matrix Q is represented as a product of elementary reflectors
Q = H(n1) . . . H(2) H(1).
Each H(i) has the form
H(i) = I  tau * v * v'
where tau is a complex scalar, and v is a complex vector with v(i+1:n) = 0 and v(i) = 1; v(1:i1) is stored on exit in A(1:i1,i+1), and tau in TAU(i).
If UPLO = MagmaLower, the matrix Q is represented as a product of elementary reflectors
Q = H(1) H(2) . . . H(n1).
Each H(i) has the form
H(i) = I  tau * v * v'
where tau is a complex scalar, and v is a complex vector with v(1:i) = 0 and v(i+1) = 1; v(i+2:n) is stored on exit in A(i+2:n,i), and tau in TAU(i).
The contents of A on exit are illustrated by the following examples with n = 5:
if UPLO = MagmaUpper: if UPLO = MagmaLower:
( d e v2 v3 v4 ) ( d ) ( d e v3 v4 ) ( e d ) ( d e v4 ) ( v1 e d ) ( d e ) ( v1 v2 e d ) ( d ) ( v1 v2 v3 e d )
where d and e denote diagonal and offdiagonal elements of T, and vi denotes an element of the vector defining H(i).
magma_int_t magma_zhetrd_mgpu  (  magma_int_t  ngpu, 
magma_int_t  nqueue,  
magma_uplo_t  uplo,  
magma_int_t  n,  
magmaDoubleComplex *  A,  
magma_int_t  lda,  
double *  d,  
double *  e,  
magmaDoubleComplex *  tau,  
magmaDoubleComplex *  work,  
magma_int_t  lwork,  
magma_int_t *  info  
) 
ZHETRD reduces a complex Hermitian matrix A to real symmetric tridiagonal form T by an orthogonal similarity transformation: Q**H * A * Q = T.
[in]  ngpu  INTEGER Number of GPUs to use. ngpu > 0. 
[in]  nqueue  INTEGER The number of GPU queues used for update. 10 >= nqueue > 0. 
[in]  uplo  magma_uplo_t

[in]  n  INTEGER The order of the matrix A. N >= 0. 
[in,out]  A  COMPLEX_16 array, dimension (LDA,N) On entry, the Hermitian matrix A. If UPLO = MagmaUpper, the leading NbyN upper triangular part of A contains the upper triangular part of the matrix A, and the strictly lower triangular part of A is not referenced. If UPLO = MagmaLower, the leading NbyN lower triangular part of A contains the lower triangular part of the matrix A, and the strictly upper triangular part of A is not referenced. On exit, if UPLO = MagmaUpper, the diagonal and first superdiagonal of A are overwritten by the corresponding elements of the tridiagonal matrix T, and the elements above the first superdiagonal, with the array TAU, represent the orthogonal matrix Q as a product of elementary reflectors; if UPLO = MagmaLower, the diagonal and first subdiagonal of A are over written by the corresponding elements of the tridiagonal matrix T, and the elements below the first subdiagonal, with the array TAU, represent the orthogonal matrix Q as a product of elementary reflectors. See Further Details. 
[in]  lda  INTEGER The leading dimension of the array A. LDA >= max(1,N). 
[out]  d  COMPLEX_16 array, dimension (N) The diagonal elements of the tridiagonal matrix T: D(i) = A(i,i). 
[out]  e  COMPLEX_16 array, dimension (N1) The offdiagonal elements of the tridiagonal matrix T: E(i) = A(i,i+1) if UPLO = MagmaUpper, E(i) = A(i+1,i) if UPLO = MagmaLower. 
[out]  tau  COMPLEX_16 array, dimension (N1) The scalar factors of the elementary reflectors (see Further Details). 
[out]  work  (workspace) COMPLEX_16 array, dimension (MAX(1,LWORK)) On exit, if INFO = 0, WORK[0] returns the optimal LWORK. 
[in]  lwork  INTEGER The dimension of the array WORK. LWORK >= N*NB, where NB is the optimal blocksize given by magma_get_zhetrd_nb(). If LWORK = 1, then a workspace query is assumed; the routine only calculates the optimal size of the WORK array, returns this value as the first entry of the WORK array, and no error message related to LWORK is issued by XERBLA. 
[out]  info  INTEGER

If UPLO = MagmaUpper, the matrix Q is represented as a product of elementary reflectors
Q = H(n1) . . . H(2) H(1).
Each H(i) has the form
H(i) = I  tau * v * v'
where tau is a complex scalar, and v is a complex vector with v(i+1:n) = 0 and v(i) = 1; v(1:i1) is stored on exit in A(1:i1,i+1), and tau in TAU(i).
If UPLO = MagmaLower, the matrix Q is represented as a product of elementary reflectors
Q = H(1) H(2) . . . H(n1).
Each H(i) has the form
H(i) = I  tau * v * v'
where tau is a complex scalar, and v is a complex vector with v(1:i) = 0 and v(i+1) = 1; v(i+2:n) is stored on exit in A(i+2:n,i), and tau in TAU(i).
The contents of A on exit are illustrated by the following examples with n = 5:
if UPLO = MagmaUpper: if UPLO = MagmaLower:
( d e v2 v3 v4 ) ( d ) ( d e v3 v4 ) ( e d ) ( d e v4 ) ( v1 e d ) ( d e ) ( v1 v2 e d ) ( d ) ( v1 v2 v3 e d )
where d and e denote diagonal and offdiagonal elements of T, and vi denotes an element of the vector defining H(i).