ZUNMBR - VECT = 'Q', ZUNMBR overwrites the general complex
       M-by-N matrix C with SIDE = 'L' SIDE = 'R' TRANS = 'N'


SYNOPSIS

       SUBROUTINE ZUNMBR( VECT, SIDE, TRANS, M,  N,  K,  A,  LDA,
                          TAU, C, LDC, WORK, LWORK, INFO )

           CHARACTER      SIDE, TRANS, VECT

           INTEGER        INFO, K, LDA, LDC, LWORK, M, N

           COMPLEX*16     A(  LDA,  *  ),  C( LDC, * ), TAU( * ),
                          WORK( * )


PURPOSE

       If VECT = 'Q', ZUNMBR overwrites the general complex M-by-
       N matrix C with SIDE = 'L' SIDE = 'R' TRANS = 'N': Q * C C
       * Q TRANS = 'C':      Q**H * C       C * Q**H

       If VECT = 'P', ZUNMBR overwrites the general complex M-by-
       N matrix C with
                       SIDE = 'L'     SIDE = 'R'
       TRANS = 'N':      P * C          C * P
       TRANS = 'C':      P**H * C       C * P**H

       Here  Q  and  P**H  are the unitary matrices determined by
       ZGEBRD when reducing a  complex  matrix  A  to  bidiagonal
       form: A = Q * B * P**H. Q and P**H are defined as products
       of elementary reflectors H(i) and G(i) respectively.

       Let nq = m if SIDE = 'L' and nq = n if SIDE = 'R'. Thus nq
       is  the  order  of  the  unitary  matrix Q or P**H that is
       applied.

       If VECT = 'Q', A  is  assumed  to  have  been  an  NQ-by-K
       matrix: if nq >= k, Q = H(1) H(2) . . . H(k);
       if nq < k, Q = H(1) H(2) . . . H(nq-1).

       If VECT = 'P', A is assumed to have been a K-by-NQ matrix:
       if k < nq, P = G(1) G(2) . . . G(k);
       if k >= nq, P = G(1) G(2) . . . G(nq-1).


ARGUMENTS

       VECT    (input) CHARACTER*1
               = 'Q': apply Q or Q**H;
               = 'P': apply P or P**H.

       SIDE    (input) CHARACTER*1
               = 'L': apply Q, Q**H, P or P**H from the Left;
               = 'R': apply Q, Q**H, P or P**H from the Right.

               = 'N':  No transpose, apply Q or P;
               = 'C':  Conjugate transpose, apply Q**H or P**H.

       M       (input) INTEGER
               The number of rows of the matrix C. M >= 0.

       N       (input) INTEGER
               The number of columns of the matrix C. N >= 0.

       K       (input) INTEGER
               If VECT = 'Q', the number of columns in the origi­
               nal  matrix reduced by ZGEBRD.  If VECT = 'P', the
               number of rows in the original matrix  reduced  by
               ZGEBRD.  K >= 0.

       A       (input) COMPLEX*16 array, dimension
               (LDA,min(nq,K))  if  VECT = 'Q' (LDA,nq)        if
               VECT = 'P' The vectors which define the elementary
               reflectors H(i) and G(i), whose products determine
               the matrices Q and P, as returned by ZGEBRD.

       LDA     (input) INTEGER
               The leading dimension of the array A.  If  VECT  =
               'Q',  LDA  >=  max(1,nq);  if  VECT  = 'P', LDA >=
               max(1,min(nq,K)).

       TAU     (input) COMPLEX*16 array, dimension (min(nq,K))
               TAU(i) must contain the scalar factor of the  ele­
               mentary  reflector H(i) or G(i) which determines Q
               or P, as returned by ZGEBRD in the array  argument
               TAUQ or TAUP.

       C       (input/output) COMPLEX*16 array, dimension (LDC,N)
               On entry, the M-by-N matrix  C.   On  exit,  C  is
               overwritten  by  Q*C or Q**H*C or C*Q**H or C*Q or
               P*C or P**H*C or C*P or C*P**H.

       LDC     (input) INTEGER
               The leading dimension  of  the  array  C.  LDC  >=
               max(1,M).

       WORK    (workspace/output) COMPLEX*16 array, dimension
               (LWORK)
               On exit, if INFO = 0, WORK(1) returns the  optimal
               LWORK.

       LWORK   (input) INTEGER
               The  dimension  of the array WORK.  If SIDE = 'L',
               LWORK  >=  max(1,N);  if  SIDE  =  'R',  LWORK  >=
               max(1,M).   For  optimum performance LWORK >= N*NB
               if SIDE = 'L', and LWORK >= M*NB if  SIDE  =  'R',
               where NB is the optimal blocksize.

               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.

       INFO    (output) INTEGER
               = 0:  successful exit
               < 0:  if INFO = -i, the i-th argument had an ille­
               gal value


Man(1) output converted with man2html