CGGSVP(l)		LAPACK routine (version	1.1)		    CGGSVP(l)

NAME
  CGGSVP - compute unitary matrices U, V and Q such that   U'*A*Q = ( 0	A12
  A13 )	K , V'*B*Q = ( 0 0 B13 ) L  ( 0	0 A23 )	L ( 0 0	0 ) P-L	 ( 0 0 0 )
  M-K-L	N-K-L K	L  N-K-L K L  where the	K-by-K matrix A12 and L-by-L matrix
  B13 are nonsingular upper triangular

SYNOPSIS

  SUBROUTINE CGGSVP( JOBU, JOBV, JOBQ, M, P, N,	A, LDA,	B, LDB,	TOLA, TOLB,
		     K,	L, U, LDU, V, LDV, Q, LDQ, IWORK, RWORK, TAU, WORK,
		     INFO )

      CHARACTER	     JOBQ, JOBU, JOBV

      INTEGER	     INFO, K, L, LDA, LDB, LDQ,	LDU, LDV, M, N,	P

      REAL	     TOLA, TOLB

      INTEGER	     IWORK( * )

      REAL	     RWORK( * )

      COMPLEX	     A(	LDA, * ), B( LDB, * ), Q( LDQ, * ), TAU( * ), U( LDU,
		     * ), V( LDV, * ), WORK( * )

PURPOSE
  CGGSVP computes unitary matrices U, V	and Q such that	A23 is upper tra-
  pezoidal.  K+L = the effective rank of the (M+P)-by-N	matrix (A',B')'.  Z'
  denotes the conjugate	transpose of Z.

  This decomposition is	the preprocessing step for computing the Generalized
  Singular Value Decomposition (GSVD), see subroutine CGGSVD.

ARGUMENTS

  JOBU	  (input) CHARACTER*1
	  = 'U':  Unitary matrix U is computed;
	  = 'N':  U is not computed.

  JOBV	  (input) CHARACTER*1
	  = 'V':  Unitary matrix V is computed;
	  = 'N':  V is not computed.

  JOBQ	  (input) CHARACTER*1
	  = 'Q':  Unitary matrix Q is computed;
	  = 'N':  Q is not computed.

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

  P	  (input) INTEGER
	  The number of	rows of	the matrix B.  P >= 0.

  N	  (input) INTEGER
	  The number of	columns	of the matrices	A and B.  N >= 0.

  A	  (input/output) COMPLEX array,	dimension (LDA,N)
	  On entry, the	M-by-N matrix A.  On exit, A contains the triangular
	  (or trapezoidal) matrix described in the Purpose section.

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

  B	  (input/output) COMPLEX array,	dimension (LDB,N)
	  On entry, the	P-by-N matrix B.  On exit, B contains the triangular
	  matrix described in the Purpose section.

  LDB	  (input) INTEGER
	  The leading dimension	of the array B.	LDB >= max(1,P).

  TOLA	  (input) REAL
	  TOLB	  (input) REAL TOLA and	TOLB are the thresholds	to determine
	  the effective	rank of	matrix B and a subblock	of A. Generally, they
	  are set to TOLA = MAX(M,N)*norm(A)*MACHEPS, TOLB =
	  MAX(P,N)*norm(B)*MACHEPS.  The size of TOLA and TOLB may affect the
	  size of backward errors of the decomposition.

  K	  (output) INTEGER
	  L	  (output) INTEGER On exit, K and L specify the	dimension of
	  the subblocks	described in Purpose section.  K + L = effective
	  numerical rank of (A',B')'.

  U	  (output) COMPLEX array, dimension (LDU,M)
	  If JOBU = 'U', U contains the	unitary	matrix U.  If JOBU = 'N', U
	  is not referenced.

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

  V	  (output) COMPLEX array, dimension (LDV,M)
	  If JOBV = 'V', V contains the	unitary	matrix V.  If JOBV = 'N', V
	  is not referenced.

  LDV	  (input) INTEGER
	  The leading dimension	of the array V.	LDV >= max(1,P).

  Q	  (output) COMPLEX array, dimension (LDQ,N)
	  If JOBQ = 'Q', Q contains the	unitary	matrix Q.  If JOBQ = 'N', Q
	  is not referenced.

  LDQ	  (input) INTEGER
	  The leading dimension	of the array Q.	LDQ >= max(1,N).

  IWORK	  (workspace) INTEGER array, dimension (N)

  RWORK	  (workspace) REAL array, dimension (2*N)

  TAU	  (workspace) COMPLEX array, dimension (N)

  WORK	  (workspace) COMPLEX array, dimension (MAX(3*N,M,P))

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

FURTHER	DETAILS
  The subroutine uses LAPACK subroutine	CGEQPF for the QR factorization	with
  column pivoting to detect the	effective numerical rank of the	a matrix. It
  may be replaced by a better rank determination strategy.


Back to the listing of computational routines for orthogonal factorization and singular value decomposition