.TH "unbdb" 3 "Version 3.12.0" "LAPACK" \" -*- nroff -*- .ad l .nh .SH NAME unbdb \- {un,or}bdb: bidiagonalize partitioned unitary matrix, step in uncsd .SH SYNOPSIS .br .PP .SS "Functions" .in +1c .ti -1c .RI "subroutine \fBcunbdb\fP (trans, signs, m, p, q, x11, ldx11, x12, ldx12, x21, ldx21, x22, ldx22, theta, phi, taup1, taup2, tauq1, tauq2, work, lwork, info)" .br .RI "\fBCUNBDB\fP " .ti -1c .RI "subroutine \fBdorbdb\fP (trans, signs, m, p, q, x11, ldx11, x12, ldx12, x21, ldx21, x22, ldx22, theta, phi, taup1, taup2, tauq1, tauq2, work, lwork, info)" .br .RI "\fBDORBDB\fP " .ti -1c .RI "subroutine \fBsorbdb\fP (trans, signs, m, p, q, x11, ldx11, x12, ldx12, x21, ldx21, x22, ldx22, theta, phi, taup1, taup2, tauq1, tauq2, work, lwork, info)" .br .RI "\fBSORBDB\fP " .ti -1c .RI "subroutine \fBzunbdb\fP (trans, signs, m, p, q, x11, ldx11, x12, ldx12, x21, ldx21, x22, ldx22, theta, phi, taup1, taup2, tauq1, tauq2, work, lwork, info)" .br .RI "\fBZUNBDB\fP " .in -1c .SH "Detailed Description" .PP .SH "Function Documentation" .PP .SS "subroutine cunbdb (character trans, character signs, integer m, integer p, integer q, complex, dimension( ldx11, * ) x11, integer ldx11, complex, dimension( ldx12, * ) x12, integer ldx12, complex, dimension( ldx21, * ) x21, integer ldx21, complex, dimension( ldx22, * ) x22, integer ldx22, real, dimension( * ) theta, real, dimension( * ) phi, complex, dimension( * ) taup1, complex, dimension( * ) taup2, complex, dimension( * ) tauq1, complex, dimension( * ) tauq2, complex, dimension( * ) work, integer lwork, integer info)" .PP \fBCUNBDB\fP .PP \fBPurpose:\fP .RS 4 .PP .nf !> !> CUNBDB simultaneously bidiagonalizes the blocks of an M-by-M !> partitioned unitary matrix X: !> !> [ B11 | B12 0 0 ] !> [ X11 | X12 ] [ P1 | ] [ 0 | 0 -I 0 ] [ Q1 | ]**H !> X = [-----------] = [---------] [----------------] [---------] \&. !> [ X21 | X22 ] [ | P2 ] [ B21 | B22 0 0 ] [ | Q2 ] !> [ 0 | 0 0 I ] !> !> X11 is P-by-Q\&. Q must be no larger than P, M-P, or M-Q\&. (If this is !> not the case, then X must be transposed and/or permuted\&. This can be !> done in constant time using the TRANS and SIGNS options\&. See CUNCSD !> for details\&.) !> !> The unitary matrices P1, P2, Q1, and Q2 are P-by-P, (M-P)-by- !> (M-P), Q-by-Q, and (M-Q)-by-(M-Q), respectively\&. They are !> represented implicitly by Householder vectors\&. !> !> B11, B12, B21, and B22 are Q-by-Q bidiagonal matrices represented !> implicitly by angles THETA, PHI\&. !> .fi .PP .RE .PP \fBParameters\fP .RS 4 \fITRANS\fP .PP .nf !> TRANS is CHARACTER !> = 'T': X, U1, U2, V1T, and V2T are stored in row-major !> order; !> otherwise: X, U1, U2, V1T, and V2T are stored in column- !> major order\&. !> .fi .PP .br \fISIGNS\fP .PP .nf !> SIGNS is CHARACTER !> = 'O': The lower-left block is made nonpositive (the !> convention); !> otherwise: The upper-right block is made nonpositive (the !> convention)\&. !> .fi .PP .br \fIM\fP .PP .nf !> M is INTEGER !> The number of rows and columns in X\&. !> .fi .PP .br \fIP\fP .PP .nf !> P is INTEGER !> The number of rows in X11 and X12\&. 0 <= P <= M\&. !> .fi .PP .br \fIQ\fP .PP .nf !> Q is INTEGER !> The number of columns in X11 and X21\&. 0 <= Q <= !> MIN(P,M-P,M-Q)\&. !> .fi .PP .br \fIX11\fP .PP .nf !> X11 is COMPLEX array, dimension (LDX11,Q) !> On entry, the top-left block of the unitary matrix to be !> reduced\&. On exit, the form depends on TRANS: !> If TRANS = 'N', then !> the columns of tril(X11) specify reflectors for P1, !> the rows of triu(X11,1) specify reflectors for Q1; !> else TRANS = 'T', and !> the rows of triu(X11) specify reflectors for P1, !> the columns of tril(X11,-1) specify reflectors for Q1\&. !> .fi .PP .br \fILDX11\fP .PP .nf !> LDX11 is INTEGER !> The leading dimension of X11\&. If TRANS = 'N', then LDX11 >= !> P; else LDX11 >= Q\&. !> .fi .PP .br \fIX12\fP .PP .nf !> X12 is COMPLEX array, dimension (LDX12,M-Q) !> On entry, the top-right block of the unitary matrix to !> be reduced\&. On exit, the form depends on TRANS: !> If TRANS = 'N', then !> the rows of triu(X12) specify the first P reflectors for !> Q2; !> else TRANS = 'T', and !> the columns of tril(X12) specify the first P reflectors !> for Q2\&. !> .fi .PP .br \fILDX12\fP .PP .nf !> LDX12 is INTEGER !> The leading dimension of X12\&. If TRANS = 'N', then LDX12 >= !> P; else LDX11 >= M-Q\&. !> .fi .PP .br \fIX21\fP .PP .nf !> X21 is COMPLEX array, dimension (LDX21,Q) !> On entry, the bottom-left block of the unitary matrix to !> be reduced\&. On exit, the form depends on TRANS: !> If TRANS = 'N', then !> the columns of tril(X21) specify reflectors for P2; !> else TRANS = 'T', and !> the rows of triu(X21) specify reflectors for P2\&. !> .fi .PP .br \fILDX21\fP .PP .nf !> LDX21 is INTEGER !> The leading dimension of X21\&. If TRANS = 'N', then LDX21 >= !> M-P; else LDX21 >= Q\&. !> .fi .PP .br \fIX22\fP .PP .nf !> X22 is COMPLEX array, dimension (LDX22,M-Q) !> On entry, the bottom-right block of the unitary matrix to !> be reduced\&. On exit, the form depends on TRANS: !> If TRANS = 'N', then !> the rows of triu(X22(Q+1:M-P,P+1:M-Q)) specify the last !> M-P-Q reflectors for Q2, !> else TRANS = 'T', and !> the columns of tril(X22(P+1:M-Q,Q+1:M-P)) specify the last !> M-P-Q reflectors for P2\&. !> .fi .PP .br \fILDX22\fP .PP .nf !> LDX22 is INTEGER !> The leading dimension of X22\&. If TRANS = 'N', then LDX22 >= !> M-P; else LDX22 >= M-Q\&. !> .fi .PP .br \fITHETA\fP .PP .nf !> THETA is REAL array, dimension (Q) !> The entries of the bidiagonal blocks B11, B12, B21, B22 can !> be computed from the angles THETA and PHI\&. See Further !> Details\&. !> .fi .PP .br \fIPHI\fP .PP .nf !> PHI is REAL array, dimension (Q-1) !> The entries of the bidiagonal blocks B11, B12, B21, B22 can !> be computed from the angles THETA and PHI\&. See Further !> Details\&. !> .fi .PP .br \fITAUP1\fP .PP .nf !> TAUP1 is COMPLEX array, dimension (P) !> The scalar factors of the elementary reflectors that define !> P1\&. !> .fi .PP .br \fITAUP2\fP .PP .nf !> TAUP2 is COMPLEX array, dimension (M-P) !> The scalar factors of the elementary reflectors that define !> P2\&. !> .fi .PP .br \fITAUQ1\fP .PP .nf !> TAUQ1 is COMPLEX array, dimension (Q) !> The scalar factors of the elementary reflectors that define !> Q1\&. !> .fi .PP .br \fITAUQ2\fP .PP .nf !> TAUQ2 is COMPLEX array, dimension (M-Q) !> The scalar factors of the elementary reflectors that define !> Q2\&. !> .fi .PP .br \fIWORK\fP .PP .nf !> WORK is COMPLEX array, dimension (LWORK) !> .fi .PP .br \fILWORK\fP .PP .nf !> LWORK is INTEGER !> The dimension of the array WORK\&. LWORK >= M-Q\&. !> !> 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\&. !> .fi .PP .br \fIINFO\fP .PP .nf !> INFO is INTEGER !> = 0: successful exit\&. !> < 0: if INFO = -i, the i-th argument had an illegal value\&. !> .fi .PP .RE .PP \fBAuthor\fP .RS 4 Univ\&. of Tennessee .PP Univ\&. of California Berkeley .PP Univ\&. of Colorado Denver .PP NAG Ltd\&. .RE .PP \fBFurther Details:\fP .RS 4 .PP .nf !> !> The bidiagonal blocks B11, B12, B21, and B22 are represented !> implicitly by angles THETA(1), \&.\&.\&., THETA(Q) and PHI(1), \&.\&.\&., !> PHI(Q-1)\&. B11 and B21 are upper bidiagonal, while B21 and B22 are !> lower bidiagonal\&. Every entry in each bidiagonal band is a product !> of a sine or cosine of a THETA with a sine or cosine of a PHI\&. See !> [1] or CUNCSD for details\&. !> !> P1, P2, Q1, and Q2 are represented as products of elementary !> reflectors\&. See CUNCSD for details on generating P1, P2, Q1, and Q2 !> using CUNGQR and CUNGLQ\&. !> .fi .PP .RE .PP \fBReferences:\fP .RS 4 [1] Brian D\&. Sutton\&. Computing the complete CS decomposition\&. Numer\&. Algorithms, 50(1):33-65, 2009\&. .RE .PP .PP Definition at line \fB284\fP of file \fBcunbdb\&.f\fP\&. .SS "subroutine dorbdb (character trans, character signs, integer m, integer p, integer q, double precision, dimension( ldx11, * ) x11, integer ldx11, double precision, dimension( ldx12, * ) x12, integer ldx12, double precision, dimension( ldx21, * ) x21, integer ldx21, double precision, dimension( ldx22, * ) x22, integer ldx22, double precision, dimension( * ) theta, double precision, dimension( * ) phi, double precision, dimension( * ) taup1, double precision, dimension( * ) taup2, double precision, dimension( * ) tauq1, double precision, dimension( * ) tauq2, double precision, dimension( * ) work, integer lwork, integer info)" .PP \fBDORBDB\fP .PP \fBPurpose:\fP .RS 4 .PP .nf !> !> DORBDB simultaneously bidiagonalizes the blocks of an M-by-M !> partitioned orthogonal matrix X: !> !> [ B11 | B12 0 0 ] !> [ X11 | X12 ] [ P1 | ] [ 0 | 0 -I 0 ] [ Q1 | ]**T !> X = [-----------] = [---------] [----------------] [---------] \&. !> [ X21 | X22 ] [ | P2 ] [ B21 | B22 0 0 ] [ | Q2 ] !> [ 0 | 0 0 I ] !> !> X11 is P-by-Q\&. Q must be no larger than P, M-P, or M-Q\&. (If this is !> not the case, then X must be transposed and/or permuted\&. This can be !> done in constant time using the TRANS and SIGNS options\&. See DORCSD !> for details\&.) !> !> The orthogonal matrices P1, P2, Q1, and Q2 are P-by-P, (M-P)-by- !> (M-P), Q-by-Q, and (M-Q)-by-(M-Q), respectively\&. They are !> represented implicitly by Householder vectors\&. !> !> B11, B12, B21, and B22 are Q-by-Q bidiagonal matrices represented !> implicitly by angles THETA, PHI\&. !> .fi .PP .RE .PP \fBParameters\fP .RS 4 \fITRANS\fP .PP .nf !> TRANS is CHARACTER !> = 'T': X, U1, U2, V1T, and V2T are stored in row-major !> order; !> otherwise: X, U1, U2, V1T, and V2T are stored in column- !> major order\&. !> .fi .PP .br \fISIGNS\fP .PP .nf !> SIGNS is CHARACTER !> = 'O': The lower-left block is made nonpositive (the !> convention); !> otherwise: The upper-right block is made nonpositive (the !> convention)\&. !> .fi .PP .br \fIM\fP .PP .nf !> M is INTEGER !> The number of rows and columns in X\&. !> .fi .PP .br \fIP\fP .PP .nf !> P is INTEGER !> The number of rows in X11 and X12\&. 0 <= P <= M\&. !> .fi .PP .br \fIQ\fP .PP .nf !> Q is INTEGER !> The number of columns in X11 and X21\&. 0 <= Q <= !> MIN(P,M-P,M-Q)\&. !> .fi .PP .br \fIX11\fP .PP .nf !> X11 is DOUBLE PRECISION array, dimension (LDX11,Q) !> On entry, the top-left block of the orthogonal matrix to be !> reduced\&. On exit, the form depends on TRANS: !> If TRANS = 'N', then !> the columns of tril(X11) specify reflectors for P1, !> the rows of triu(X11,1) specify reflectors for Q1; !> else TRANS = 'T', and !> the rows of triu(X11) specify reflectors for P1, !> the columns of tril(X11,-1) specify reflectors for Q1\&. !> .fi .PP .br \fILDX11\fP .PP .nf !> LDX11 is INTEGER !> The leading dimension of X11\&. If TRANS = 'N', then LDX11 >= !> P; else LDX11 >= Q\&. !> .fi .PP .br \fIX12\fP .PP .nf !> X12 is DOUBLE PRECISION array, dimension (LDX12,M-Q) !> On entry, the top-right block of the orthogonal matrix to !> be reduced\&. On exit, the form depends on TRANS: !> If TRANS = 'N', then !> the rows of triu(X12) specify the first P reflectors for !> Q2; !> else TRANS = 'T', and !> the columns of tril(X12) specify the first P reflectors !> for Q2\&. !> .fi .PP .br \fILDX12\fP .PP .nf !> LDX12 is INTEGER !> The leading dimension of X12\&. If TRANS = 'N', then LDX12 >= !> P; else LDX11 >= M-Q\&. !> .fi .PP .br \fIX21\fP .PP .nf !> X21 is DOUBLE PRECISION array, dimension (LDX21,Q) !> On entry, the bottom-left block of the orthogonal matrix to !> be reduced\&. On exit, the form depends on TRANS: !> If TRANS = 'N', then !> the columns of tril(X21) specify reflectors for P2; !> else TRANS = 'T', and !> the rows of triu(X21) specify reflectors for P2\&. !> .fi .PP .br \fILDX21\fP .PP .nf !> LDX21 is INTEGER !> The leading dimension of X21\&. If TRANS = 'N', then LDX21 >= !> M-P; else LDX21 >= Q\&. !> .fi .PP .br \fIX22\fP .PP .nf !> X22 is DOUBLE PRECISION array, dimension (LDX22,M-Q) !> On entry, the bottom-right block of the orthogonal matrix to !> be reduced\&. On exit, the form depends on TRANS: !> If TRANS = 'N', then !> the rows of triu(X22(Q+1:M-P,P+1:M-Q)) specify the last !> M-P-Q reflectors for Q2, !> else TRANS = 'T', and !> the columns of tril(X22(P+1:M-Q,Q+1:M-P)) specify the last !> M-P-Q reflectors for P2\&. !> .fi .PP .br \fILDX22\fP .PP .nf !> LDX22 is INTEGER !> The leading dimension of X22\&. If TRANS = 'N', then LDX22 >= !> M-P; else LDX22 >= M-Q\&. !> .fi .PP .br \fITHETA\fP .PP .nf !> THETA is DOUBLE PRECISION array, dimension (Q) !> The entries of the bidiagonal blocks B11, B12, B21, B22 can !> be computed from the angles THETA and PHI\&. See Further !> Details\&. !> .fi .PP .br \fIPHI\fP .PP .nf !> PHI is DOUBLE PRECISION array, dimension (Q-1) !> The entries of the bidiagonal blocks B11, B12, B21, B22 can !> be computed from the angles THETA and PHI\&. See Further !> Details\&. !> .fi .PP .br \fITAUP1\fP .PP .nf !> TAUP1 is DOUBLE PRECISION array, dimension (P) !> The scalar factors of the elementary reflectors that define !> P1\&. !> .fi .PP .br \fITAUP2\fP .PP .nf !> TAUP2 is DOUBLE PRECISION array, dimension (M-P) !> The scalar factors of the elementary reflectors that define !> P2\&. !> .fi .PP .br \fITAUQ1\fP .PP .nf !> TAUQ1 is DOUBLE PRECISION array, dimension (Q) !> The scalar factors of the elementary reflectors that define !> Q1\&. !> .fi .PP .br \fITAUQ2\fP .PP .nf !> TAUQ2 is DOUBLE PRECISION array, dimension (M-Q) !> The scalar factors of the elementary reflectors that define !> Q2\&. !> .fi .PP .br \fIWORK\fP .PP .nf !> WORK is DOUBLE PRECISION array, dimension (LWORK) !> .fi .PP .br \fILWORK\fP .PP .nf !> LWORK is INTEGER !> The dimension of the array WORK\&. LWORK >= M-Q\&. !> !> 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\&. !> .fi .PP .br \fIINFO\fP .PP .nf !> INFO is INTEGER !> = 0: successful exit\&. !> < 0: if INFO = -i, the i-th argument had an illegal value\&. !> .fi .PP .RE .PP \fBAuthor\fP .RS 4 Univ\&. of Tennessee .PP Univ\&. of California Berkeley .PP Univ\&. of Colorado Denver .PP NAG Ltd\&. .RE .PP \fBFurther Details:\fP .RS 4 .PP .nf !> !> The bidiagonal blocks B11, B12, B21, and B22 are represented !> implicitly by angles THETA(1), \&.\&.\&., THETA(Q) and PHI(1), \&.\&.\&., !> PHI(Q-1)\&. B11 and B21 are upper bidiagonal, while B21 and B22 are !> lower bidiagonal\&. Every entry in each bidiagonal band is a product !> of a sine or cosine of a THETA with a sine or cosine of a PHI\&. See !> [1] or DORCSD for details\&. !> !> P1, P2, Q1, and Q2 are represented as products of elementary !> reflectors\&. See DORCSD for details on generating P1, P2, Q1, and Q2 !> using DORGQR and DORGLQ\&. !> .fi .PP .RE .PP \fBReferences:\fP .RS 4 [1] Brian D\&. Sutton\&. Computing the complete CS decomposition\&. Numer\&. Algorithms, 50(1):33-65, 2009\&. .RE .PP .PP Definition at line \fB284\fP of file \fBdorbdb\&.f\fP\&. .SS "subroutine sorbdb (character trans, character signs, integer m, integer p, integer q, real, dimension( ldx11, * ) x11, integer ldx11, real, dimension( ldx12, * ) x12, integer ldx12, real, dimension( ldx21, * ) x21, integer ldx21, real, dimension( ldx22, * ) x22, integer ldx22, real, dimension( * ) theta, real, dimension( * ) phi, real, dimension( * ) taup1, real, dimension( * ) taup2, real, dimension( * ) tauq1, real, dimension( * ) tauq2, real, dimension( * ) work, integer lwork, integer info)" .PP \fBSORBDB\fP .PP \fBPurpose:\fP .RS 4 .PP .nf !> !> SORBDB simultaneously bidiagonalizes the blocks of an M-by-M !> partitioned orthogonal matrix X: !> !> [ B11 | B12 0 0 ] !> [ X11 | X12 ] [ P1 | ] [ 0 | 0 -I 0 ] [ Q1 | ]**T !> X = [-----------] = [---------] [----------------] [---------] \&. !> [ X21 | X22 ] [ | P2 ] [ B21 | B22 0 0 ] [ | Q2 ] !> [ 0 | 0 0 I ] !> !> X11 is P-by-Q\&. Q must be no larger than P, M-P, or M-Q\&. (If this is !> not the case, then X must be transposed and/or permuted\&. This can be !> done in constant time using the TRANS and SIGNS options\&. See SORCSD !> for details\&.) !> !> The orthogonal matrices P1, P2, Q1, and Q2 are P-by-P, (M-P)-by- !> (M-P), Q-by-Q, and (M-Q)-by-(M-Q), respectively\&. They are !> represented implicitly by Householder vectors\&. !> !> B11, B12, B21, and B22 are Q-by-Q bidiagonal matrices represented !> implicitly by angles THETA, PHI\&. !> .fi .PP .RE .PP \fBParameters\fP .RS 4 \fITRANS\fP .PP .nf !> TRANS is CHARACTER !> = 'T': X, U1, U2, V1T, and V2T are stored in row-major !> order; !> otherwise: X, U1, U2, V1T, and V2T are stored in column- !> major order\&. !> .fi .PP .br \fISIGNS\fP .PP .nf !> SIGNS is CHARACTER !> = 'O': The lower-left block is made nonpositive (the !> convention); !> otherwise: The upper-right block is made nonpositive (the !> convention)\&. !> .fi .PP .br \fIM\fP .PP .nf !> M is INTEGER !> The number of rows and columns in X\&. !> .fi .PP .br \fIP\fP .PP .nf !> P is INTEGER !> The number of rows in X11 and X12\&. 0 <= P <= M\&. !> .fi .PP .br \fIQ\fP .PP .nf !> Q is INTEGER !> The number of columns in X11 and X21\&. 0 <= Q <= !> MIN(P,M-P,M-Q)\&. !> .fi .PP .br \fIX11\fP .PP .nf !> X11 is REAL array, dimension (LDX11,Q) !> On entry, the top-left block of the orthogonal matrix to be !> reduced\&. On exit, the form depends on TRANS: !> If TRANS = 'N', then !> the columns of tril(X11) specify reflectors for P1, !> the rows of triu(X11,1) specify reflectors for Q1; !> else TRANS = 'T', and !> the rows of triu(X11) specify reflectors for P1, !> the columns of tril(X11,-1) specify reflectors for Q1\&. !> .fi .PP .br \fILDX11\fP .PP .nf !> LDX11 is INTEGER !> The leading dimension of X11\&. If TRANS = 'N', then LDX11 >= !> P; else LDX11 >= Q\&. !> .fi .PP .br \fIX12\fP .PP .nf !> X12 is REAL array, dimension (LDX12,M-Q) !> On entry, the top-right block of the orthogonal matrix to !> be reduced\&. On exit, the form depends on TRANS: !> If TRANS = 'N', then !> the rows of triu(X12) specify the first P reflectors for !> Q2; !> else TRANS = 'T', and !> the columns of tril(X12) specify the first P reflectors !> for Q2\&. !> .fi .PP .br \fILDX12\fP .PP .nf !> LDX12 is INTEGER !> The leading dimension of X12\&. If TRANS = 'N', then LDX12 >= !> P; else LDX11 >= M-Q\&. !> .fi .PP .br \fIX21\fP .PP .nf !> X21 is REAL array, dimension (LDX21,Q) !> On entry, the bottom-left block of the orthogonal matrix to !> be reduced\&. On exit, the form depends on TRANS: !> If TRANS = 'N', then !> the columns of tril(X21) specify reflectors for P2; !> else TRANS = 'T', and !> the rows of triu(X21) specify reflectors for P2\&. !> .fi .PP .br \fILDX21\fP .PP .nf !> LDX21 is INTEGER !> The leading dimension of X21\&. If TRANS = 'N', then LDX21 >= !> M-P; else LDX21 >= Q\&. !> .fi .PP .br \fIX22\fP .PP .nf !> X22 is REAL array, dimension (LDX22,M-Q) !> On entry, the bottom-right block of the orthogonal matrix to !> be reduced\&. On exit, the form depends on TRANS: !> If TRANS = 'N', then !> the rows of triu(X22(Q+1:M-P,P+1:M-Q)) specify the last !> M-P-Q reflectors for Q2, !> else TRANS = 'T', and !> the columns of tril(X22(P+1:M-Q,Q+1:M-P)) specify the last !> M-P-Q reflectors for P2\&. !> .fi .PP .br \fILDX22\fP .PP .nf !> LDX22 is INTEGER !> The leading dimension of X22\&. If TRANS = 'N', then LDX22 >= !> M-P; else LDX22 >= M-Q\&. !> .fi .PP .br \fITHETA\fP .PP .nf !> THETA is REAL array, dimension (Q) !> The entries of the bidiagonal blocks B11, B12, B21, B22 can !> be computed from the angles THETA and PHI\&. See Further !> Details\&. !> .fi .PP .br \fIPHI\fP .PP .nf !> PHI is REAL array, dimension (Q-1) !> The entries of the bidiagonal blocks B11, B12, B21, B22 can !> be computed from the angles THETA and PHI\&. See Further !> Details\&. !> .fi .PP .br \fITAUP1\fP .PP .nf !> TAUP1 is REAL array, dimension (P) !> The scalar factors of the elementary reflectors that define !> P1\&. !> .fi .PP .br \fITAUP2\fP .PP .nf !> TAUP2 is REAL array, dimension (M-P) !> The scalar factors of the elementary reflectors that define !> P2\&. !> .fi .PP .br \fITAUQ1\fP .PP .nf !> TAUQ1 is REAL array, dimension (Q) !> The scalar factors of the elementary reflectors that define !> Q1\&. !> .fi .PP .br \fITAUQ2\fP .PP .nf !> TAUQ2 is REAL array, dimension (M-Q) !> The scalar factors of the elementary reflectors that define !> Q2\&. !> .fi .PP .br \fIWORK\fP .PP .nf !> WORK is REAL array, dimension (LWORK) !> .fi .PP .br \fILWORK\fP .PP .nf !> LWORK is INTEGER !> The dimension of the array WORK\&. LWORK >= M-Q\&. !> !> 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\&. !> .fi .PP .br \fIINFO\fP .PP .nf !> INFO is INTEGER !> = 0: successful exit\&. !> < 0: if INFO = -i, the i-th argument had an illegal value\&. !> .fi .PP .RE .PP \fBAuthor\fP .RS 4 Univ\&. of Tennessee .PP Univ\&. of California Berkeley .PP Univ\&. of Colorado Denver .PP NAG Ltd\&. .RE .PP \fBFurther Details:\fP .RS 4 .PP .nf !> !> The bidiagonal blocks B11, B12, B21, and B22 are represented !> implicitly by angles THETA(1), \&.\&.\&., THETA(Q) and PHI(1), \&.\&.\&., !> PHI(Q-1)\&. B11 and B21 are upper bidiagonal, while B21 and B22 are !> lower bidiagonal\&. Every entry in each bidiagonal band is a product !> of a sine or cosine of a THETA with a sine or cosine of a PHI\&. See !> [1] or SORCSD for details\&. !> !> P1, P2, Q1, and Q2 are represented as products of elementary !> reflectors\&. See SORCSD for details on generating P1, P2, Q1, and Q2 !> using SORGQR and SORGLQ\&. !> .fi .PP .RE .PP \fBReferences:\fP .RS 4 [1] Brian D\&. Sutton\&. Computing the complete CS decomposition\&. Numer\&. Algorithms, 50(1):33-65, 2009\&. .RE .PP .PP Definition at line \fB284\fP of file \fBsorbdb\&.f\fP\&. .SS "subroutine zunbdb (character trans, character signs, integer m, integer p, integer q, complex*16, dimension( ldx11, * ) x11, integer ldx11, complex*16, dimension( ldx12, * ) x12, integer ldx12, complex*16, dimension( ldx21, * ) x21, integer ldx21, complex*16, dimension( ldx22, * ) x22, integer ldx22, double precision, dimension( * ) theta, double precision, dimension( * ) phi, complex*16, dimension( * ) taup1, complex*16, dimension( * ) taup2, complex*16, dimension( * ) tauq1, complex*16, dimension( * ) tauq2, complex*16, dimension( * ) work, integer lwork, integer info)" .PP \fBZUNBDB\fP .PP \fBPurpose:\fP .RS 4 .PP .nf !> !> ZUNBDB simultaneously bidiagonalizes the blocks of an M-by-M !> partitioned unitary matrix X: !> !> [ B11 | B12 0 0 ] !> [ X11 | X12 ] [ P1 | ] [ 0 | 0 -I 0 ] [ Q1 | ]**H !> X = [-----------] = [---------] [----------------] [---------] \&. !> [ X21 | X22 ] [ | P2 ] [ B21 | B22 0 0 ] [ | Q2 ] !> [ 0 | 0 0 I ] !> !> X11 is P-by-Q\&. Q must be no larger than P, M-P, or M-Q\&. (If this is !> not the case, then X must be transposed and/or permuted\&. This can be !> done in constant time using the TRANS and SIGNS options\&. See ZUNCSD !> for details\&.) !> !> The unitary matrices P1, P2, Q1, and Q2 are P-by-P, (M-P)-by- !> (M-P), Q-by-Q, and (M-Q)-by-(M-Q), respectively\&. They are !> represented implicitly by Householder vectors\&. !> !> B11, B12, B21, and B22 are Q-by-Q bidiagonal matrices represented !> implicitly by angles THETA, PHI\&. !> .fi .PP .RE .PP \fBParameters\fP .RS 4 \fITRANS\fP .PP .nf !> TRANS is CHARACTER !> = 'T': X, U1, U2, V1T, and V2T are stored in row-major !> order; !> otherwise: X, U1, U2, V1T, and V2T are stored in column- !> major order\&. !> .fi .PP .br \fISIGNS\fP .PP .nf !> SIGNS is CHARACTER !> = 'O': The lower-left block is made nonpositive (the !> convention); !> otherwise: The upper-right block is made nonpositive (the !> convention)\&. !> .fi .PP .br \fIM\fP .PP .nf !> M is INTEGER !> The number of rows and columns in X\&. !> .fi .PP .br \fIP\fP .PP .nf !> P is INTEGER !> The number of rows in X11 and X12\&. 0 <= P <= M\&. !> .fi .PP .br \fIQ\fP .PP .nf !> Q is INTEGER !> The number of columns in X11 and X21\&. 0 <= Q <= !> MIN(P,M-P,M-Q)\&. !> .fi .PP .br \fIX11\fP .PP .nf !> X11 is COMPLEX*16 array, dimension (LDX11,Q) !> On entry, the top-left block of the unitary matrix to be !> reduced\&. On exit, the form depends on TRANS: !> If TRANS = 'N', then !> the columns of tril(X11) specify reflectors for P1, !> the rows of triu(X11,1) specify reflectors for Q1; !> else TRANS = 'T', and !> the rows of triu(X11) specify reflectors for P1, !> the columns of tril(X11,-1) specify reflectors for Q1\&. !> .fi .PP .br \fILDX11\fP .PP .nf !> LDX11 is INTEGER !> The leading dimension of X11\&. If TRANS = 'N', then LDX11 >= !> P; else LDX11 >= Q\&. !> .fi .PP .br \fIX12\fP .PP .nf !> X12 is COMPLEX*16 array, dimension (LDX12,M-Q) !> On entry, the top-right block of the unitary matrix to !> be reduced\&. On exit, the form depends on TRANS: !> If TRANS = 'N', then !> the rows of triu(X12) specify the first P reflectors for !> Q2; !> else TRANS = 'T', and !> the columns of tril(X12) specify the first P reflectors !> for Q2\&. !> .fi .PP .br \fILDX12\fP .PP .nf !> LDX12 is INTEGER !> The leading dimension of X12\&. If TRANS = 'N', then LDX12 >= !> P; else LDX11 >= M-Q\&. !> .fi .PP .br \fIX21\fP .PP .nf !> X21 is COMPLEX*16 array, dimension (LDX21,Q) !> On entry, the bottom-left block of the unitary matrix to !> be reduced\&. On exit, the form depends on TRANS: !> If TRANS = 'N', then !> the columns of tril(X21) specify reflectors for P2; !> else TRANS = 'T', and !> the rows of triu(X21) specify reflectors for P2\&. !> .fi .PP .br \fILDX21\fP .PP .nf !> LDX21 is INTEGER !> The leading dimension of X21\&. If TRANS = 'N', then LDX21 >= !> M-P; else LDX21 >= Q\&. !> .fi .PP .br \fIX22\fP .PP .nf !> X22 is COMPLEX*16 array, dimension (LDX22,M-Q) !> On entry, the bottom-right block of the unitary matrix to !> be reduced\&. On exit, the form depends on TRANS: !> If TRANS = 'N', then !> the rows of triu(X22(Q+1:M-P,P+1:M-Q)) specify the last !> M-P-Q reflectors for Q2, !> else TRANS = 'T', and !> the columns of tril(X22(P+1:M-Q,Q+1:M-P)) specify the last !> M-P-Q reflectors for P2\&. !> .fi .PP .br \fILDX22\fP .PP .nf !> LDX22 is INTEGER !> The leading dimension of X22\&. If TRANS = 'N', then LDX22 >= !> M-P; else LDX22 >= M-Q\&. !> .fi .PP .br \fITHETA\fP .PP .nf !> THETA is DOUBLE PRECISION array, dimension (Q) !> The entries of the bidiagonal blocks B11, B12, B21, B22 can !> be computed from the angles THETA and PHI\&. See Further !> Details\&. !> .fi .PP .br \fIPHI\fP .PP .nf !> PHI is DOUBLE PRECISION array, dimension (Q-1) !> The entries of the bidiagonal blocks B11, B12, B21, B22 can !> be computed from the angles THETA and PHI\&. See Further !> Details\&. !> .fi .PP .br \fITAUP1\fP .PP .nf !> TAUP1 is COMPLEX*16 array, dimension (P) !> The scalar factors of the elementary reflectors that define !> P1\&. !> .fi .PP .br \fITAUP2\fP .PP .nf !> TAUP2 is COMPLEX*16 array, dimension (M-P) !> The scalar factors of the elementary reflectors that define !> P2\&. !> .fi .PP .br \fITAUQ1\fP .PP .nf !> TAUQ1 is COMPLEX*16 array, dimension (Q) !> The scalar factors of the elementary reflectors that define !> Q1\&. !> .fi .PP .br \fITAUQ2\fP .PP .nf !> TAUQ2 is COMPLEX*16 array, dimension (M-Q) !> The scalar factors of the elementary reflectors that define !> Q2\&. !> .fi .PP .br \fIWORK\fP .PP .nf !> WORK is COMPLEX*16 array, dimension (LWORK) !> .fi .PP .br \fILWORK\fP .PP .nf !> LWORK is INTEGER !> The dimension of the array WORK\&. LWORK >= M-Q\&. !> !> 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\&. !> .fi .PP .br \fIINFO\fP .PP .nf !> INFO is INTEGER !> = 0: successful exit\&. !> < 0: if INFO = -i, the i-th argument had an illegal value\&. !> .fi .PP .RE .PP \fBAuthor\fP .RS 4 Univ\&. of Tennessee .PP Univ\&. of California Berkeley .PP Univ\&. of Colorado Denver .PP NAG Ltd\&. .RE .PP \fBFurther Details:\fP .RS 4 .PP .nf !> !> The bidiagonal blocks B11, B12, B21, and B22 are represented !> implicitly by angles THETA(1), \&.\&.\&., THETA(Q) and PHI(1), \&.\&.\&., !> PHI(Q-1)\&. B11 and B21 are upper bidiagonal, while B21 and B22 are !> lower bidiagonal\&. Every entry in each bidiagonal band is a product !> of a sine or cosine of a THETA with a sine or cosine of a PHI\&. See !> [1] or ZUNCSD for details\&. !> !> P1, P2, Q1, and Q2 are represented as products of elementary !> reflectors\&. See ZUNCSD for details on generating P1, P2, Q1, and Q2 !> using ZUNGQR and ZUNGLQ\&. !> .fi .PP .RE .PP \fBReferences:\fP .RS 4 [1] Brian D\&. Sutton\&. Computing the complete CS decomposition\&. Numer\&. Algorithms, 50(1):33-65, 2009\&. .RE .PP .PP Definition at line \fB284\fP of file \fBzunbdb\&.f\fP\&. .SH "Author" .PP Generated automatically by Doxygen for LAPACK from the source code\&.