XLPack 7.0
XLPack Numerical Library (C API) Reference Manual
Loading...
Searching...
No Matches

◆ zunmhr()

void zunmhr ( char  side,
char  trans,
int  m,
int  n,
int  ilo,
int  ihi,
int  lda,
doublecomplex  a[],
doublecomplex  tau[],
int  ldc,
doublecomplex  c[],
doublecomplex  work[],
int  lwork,
int *  info 
)

Multiplies by a complex transform matrix to Hessenberg form

Purpose
This routine overwrites the general complex m x n matrix C with
side = 'L' side = 'R'
trans = 'N': Q * C C * Q
trans = 'T': Q^H * C C * Q^H
where Q is a complex unitary matrix of order nq, with nq = m if side = 'L' and nq = n if side = 'R'. Q is defined as the product of ihi-ilo elementary reflectors, as returned by zgehrd:
Q = H(ilo) H(ilo+1) . . . H(ihi-1).
Parameters
[in]side= 'L': Apply Q or Q^H from the Left.
= 'R': Apply Q or Q^H from the Right.
[in]trans= 'N': No transpose, apply Q.
= 'C': Conjugate transpose, apply Q^H.
[in]mNumber of rows of the matrix C. (m >= 0) (If m = 0, returns without computation)
[in]nOrder of the matrix A. (n >= 0) (If n = 0, returns without computation)
[in]ilo
[in]ihiilo and ihi must have the same values as in the previous call of zgehrd. Q is equal to the unit matrix except in the submatrix Q(ilo+1〜ihi, ilo+1〜ihi).
If side = 'L', then 1 <= ilo <= ihi <= m, if m > 0, and ilo = 1 and ihi = 0, if m = 0.
if side = 'R', then 1 <= ilo <= ihi <= n, if n > 0, and ilo = 1 and ihi = 0, if n = 0.
[in]ldaLeading dimension of the two dimensional array a[][]. (lda >= max(1, m) if side = 'L', lda >= max(1, n) if side = 'R')
[in]a[][]Array a[la][lda] (la >= m if side = 'L', la >= n if side = 'R')
The vectors which define the elementary reflectors, as returned by zgehrd.
[in]tau[]Array tau[ltau] (ltau >= m - 1 if side = 'L', ltau >= n - 1 if side = 'R')
tau[i] must contain the scalar factor of the elementary reflector H(i), as returned by zgehrd.
[in]ldcLeading dimension of the two dimensional array c[][]. (ldc >= max(1, m))
[in,out]c[][]Array c[lc][ldc] (lc >= n)
[in] The m x n matrix C.
[out] C is overwritten by Q*C or Q^H*C or C*Q^H or C*Q.
[out]work[]Array work[lwork]
Work array.
On exit, if info = 0, work[0] returns the optimal lwork.
[in]lworkThe size of work[]. (lwork >= max(1, n) if side = 'L', lwork >= max(1, m) if side = 'R')
For optimum performance lwork >= n*nb if side = 'L', and lwork >= m*nb if side = 'R', where nb is the optimal blocksize.
If lwork = -1, then a workspace query is assumed. The routine only calculates the optimal size of the work[] array, and returns the value in work[0].
[out]info= 0: Successful exit
= -1: The argument side had an illegal value. (side != 'L' nor 'R')
= -2: The argument trans had an illegal value. (trans != 'N' nor 'T')
= -3: The argument m had an illegal value (m < 0)
= -4: The argument n had an illegal value (n < 0)
= -5: The argument ilo had an illegal value (ilo < 1 or (ilo > m if side = 'L', ilo > n if side = 'R'))
= -6: The argument ihi had an illegal value ((ihi < min(ilo, m) or ihi > m if side = 'L'), (ihi < min(ilo, n) or ihi > n if side = 'R'))
= -7: The argument lda had an illegal value. (lda < max(1, m) if side = 'L', lda < max(1, n) if side = 'R')
= -10: The argument ldc had an illegal value. (ldc < max(1, m))
= -13: The argument lwork had an illegal value (lwork too small)
Reference
LAPACK