bbcsd#

Functions

void sbbcsd(
    const char*          jobu1,
    const char*          jobu2,
    const char*          jobv1t,
    const char*          jobv2t,
    const char*          trans,
    const INT            m,
    const INT            p,
    const INT            q,
          f32*  restrict theta,
          f32*  restrict phi,
          f32*  restrict U1,
    const INT            ldu1,
          f32*  restrict U2,
    const INT            ldu2,
          f32*  restrict V1T,
    const INT            ldv1t,
          f32*  restrict V2T,
    const INT            ldv2t,
          f32*  restrict B11D,
          f32*  restrict B11E,
          f32*  restrict B12D,
          f32*  restrict B12E,
          f32*  restrict B21D,
          f32*  restrict B21E,
          f32*  restrict B22D,
          f32*  restrict B22E,
          f32*  restrict work,
    const INT            lwork,
          INT*           info
);
void sbbcsd(const char *jobu1, const char *jobu2, const char *jobv1t, const char *jobv2t, const char *trans, const INT m, const INT p, const INT q, f32 *restrict theta, f32 *restrict phi, f32 *restrict U1, const INT ldu1, f32 *restrict U2, const INT ldu2, f32 *restrict V1T, const INT ldv1t, f32 *restrict V2T, const INT ldv2t, f32 *restrict B11D, f32 *restrict B11E, f32 *restrict B12D, f32 *restrict B12E, f32 *restrict B21D, f32 *restrict B21E, f32 *restrict B22D, f32 *restrict B22E, f32 *restrict work, const INT lwork, INT *info)#

SBBCSD computes the CS decomposition of an orthogonal matrix in bidiagonal-block form.

X is M-by-M, its top-left block is P-by-Q, and Q must be no larger than P, M-P, or M-Q.

Parameters

in
jobu1

= ‘Y’: U1 is updated; otherwise: U1 is not updated.

in
jobu2

= ‘Y’: U2 is updated; otherwise: U2 is not updated.

in
jobv1t

= ‘Y’: V1T is updated; otherwise: V1T is not updated.

in
jobv2t

= ‘Y’: V2T is updated; otherwise: V2T is not updated.

in
trans

= ‘T’: X, U1, U2, V1T, and V2T are stored in row-major order; otherwise: they are stored in column-major order.

in
m

The number of rows and columns in X.

in
p

The number of rows in the top-left block of X. 0 <= p <= m.

in
q

The number of columns in the top-left block of X. 0 <= q <= min(p, m-p, m-q).

inout
theta

Double precision array, dimension (q).

inout
phi

Double precision array, dimension (q-1).

inout
U1

Double precision array, dimension (ldu1, p).

in
ldu1

The leading dimension of U1. ldu1 >= max(1, p).

inout
U2

Double precision array, dimension (ldu2, m-p).

in
ldu2

The leading dimension of U2. ldu2 >= max(1, m-p).

inout
V1T

Double precision array, dimension (ldv1t, q).

in
ldv1t

The leading dimension of V1T. ldv1t >= max(1, q).

inout
V2T

Double precision array, dimension (ldv2t, m-q).

in
ldv2t

The leading dimension of V2T. ldv2t >= max(1, m-q).

out
B11D

Double precision array, dimension (q).

out
B11E

Double precision array, dimension (q-1).

out
B12D

Double precision array, dimension (q).

out
B12E

Double precision array, dimension (q-1).

out
B21D

Double precision array, dimension (q).

out
B21E

Double precision array, dimension (q-1).

out
B22D

Double precision array, dimension (q).

out
B22E

Double precision array, dimension (q-1).

out
work

Double precision array, dimension (lwork).

in
lwork

The dimension of the array work. lwork >= max(1, 8*q). If lwork = -1, then a workspace query is assumed.

out
info

  • = 0: successful exit

  • < 0: if info = -i, the i-th argument had an illegal value

  • > 0: if SBBCSD did not converge, info specifies the number of nonzero entries in PHI.

Functions

void dbbcsd(
    const char*          jobu1,
    const char*          jobu2,
    const char*          jobv1t,
    const char*          jobv2t,
    const char*          trans,
    const INT            m,
    const INT            p,
    const INT            q,
          f64*  restrict theta,
          f64*  restrict phi,
          f64*  restrict U1,
    const INT            ldu1,
          f64*  restrict U2,
    const INT            ldu2,
          f64*  restrict V1T,
    const INT            ldv1t,
          f64*  restrict V2T,
    const INT            ldv2t,
          f64*  restrict B11D,
          f64*  restrict B11E,
          f64*  restrict B12D,
          f64*  restrict B12E,
          f64*  restrict B21D,
          f64*  restrict B21E,
          f64*  restrict B22D,
          f64*  restrict B22E,
          f64*  restrict work,
    const INT            lwork,
          INT*           info
);
void dbbcsd(const char *jobu1, const char *jobu2, const char *jobv1t, const char *jobv2t, const char *trans, const INT m, const INT p, const INT q, f64 *restrict theta, f64 *restrict phi, f64 *restrict U1, const INT ldu1, f64 *restrict U2, const INT ldu2, f64 *restrict V1T, const INT ldv1t, f64 *restrict V2T, const INT ldv2t, f64 *restrict B11D, f64 *restrict B11E, f64 *restrict B12D, f64 *restrict B12E, f64 *restrict B21D, f64 *restrict B21E, f64 *restrict B22D, f64 *restrict B22E, f64 *restrict work, const INT lwork, INT *info)#

DBBCSD computes the CS decomposition of an orthogonal matrix in bidiagonal-block form.

X is M-by-M, its top-left block is P-by-Q, and Q must be no larger than P, M-P, or M-Q.

Parameters

in
jobu1

= ‘Y’: U1 is updated; otherwise: U1 is not updated.

in
jobu2

= ‘Y’: U2 is updated; otherwise: U2 is not updated.

in
jobv1t

= ‘Y’: V1T is updated; otherwise: V1T is not updated.

in
jobv2t

= ‘Y’: V2T is updated; otherwise: V2T is not updated.

in
trans

= ‘T’: X, U1, U2, V1T, and V2T are stored in row-major order; otherwise: they are stored in column-major order.

in
m

The number of rows and columns in X.

in
p

The number of rows in the top-left block of X. 0 <= p <= m.

in
q

The number of columns in the top-left block of X. 0 <= q <= min(p, m-p, m-q).

inout
theta

Double precision array, dimension (q).

inout
phi

Double precision array, dimension (q-1).

inout
U1

Double precision array, dimension (ldu1, p).

in
ldu1

The leading dimension of U1. ldu1 >= max(1, p).

inout
U2

Double precision array, dimension (ldu2, m-p).

in
ldu2

The leading dimension of U2. ldu2 >= max(1, m-p).

inout
V1T

Double precision array, dimension (ldv1t, q).

in
ldv1t

The leading dimension of V1T. ldv1t >= max(1, q).

inout
V2T

Double precision array, dimension (ldv2t, m-q).

in
ldv2t

The leading dimension of V2T. ldv2t >= max(1, m-q).

out
B11D

Double precision array, dimension (q).

out
B11E

Double precision array, dimension (q-1).

out
B12D

Double precision array, dimension (q).

out
B12E

Double precision array, dimension (q-1).

out
B21D

Double precision array, dimension (q).

out
B21E

Double precision array, dimension (q-1).

out
B22D

Double precision array, dimension (q).

out
B22E

Double precision array, dimension (q-1).

out
work

Double precision array, dimension (lwork).

in
lwork

The dimension of the array work. lwork >= max(1, 8*q). If lwork = -1, then a workspace query is assumed.

out
info

  • = 0: successful exit

  • < 0: if info = -i, the i-th argument had an illegal value

  • > 0: if DBBCSD did not converge, info specifies the number of nonzero entries in PHI.

Functions

void cbbcsd(
    const char*          jobu1,
    const char*          jobu2,
    const char*          jobv1t,
    const char*          jobv2t,
    const char*          trans,
    const INT            m,
    const INT            p,
    const INT            q,
          f32*  restrict theta,
          f32*  restrict phi,
          c64*  restrict U1,
    const INT            ldu1,
          c64*  restrict U2,
    const INT            ldu2,
          c64*  restrict V1T,
    const INT            ldv1t,
          c64*  restrict V2T,
    const INT            ldv2t,
          f32*  restrict B11D,
          f32*  restrict B11E,
          f32*  restrict B12D,
          f32*  restrict B12E,
          f32*  restrict B21D,
          f32*  restrict B21E,
          f32*  restrict B22D,
          f32*  restrict B22E,
          f32*  restrict rwork,
    const INT            lrwork,
          INT*           info
);
void cbbcsd(const char *jobu1, const char *jobu2, const char *jobv1t, const char *jobv2t, const char *trans, const INT m, const INT p, const INT q, f32 *restrict theta, f32 *restrict phi, c64 *restrict U1, const INT ldu1, c64 *restrict U2, const INT ldu2, c64 *restrict V1T, const INT ldv1t, c64 *restrict V2T, const INT ldv2t, f32 *restrict B11D, f32 *restrict B11E, f32 *restrict B12D, f32 *restrict B12E, f32 *restrict B21D, f32 *restrict B21E, f32 *restrict B22D, f32 *restrict B22E, f32 *restrict rwork, const INT lrwork, INT *info)#

CBBCSD computes the CS decomposition of a unitary matrix in bidiagonal-block form.

X is M-by-M, its top-left block is P-by-Q, and Q must be no larger than P, M-P, or M-Q.

Parameters

in
jobu1

= ‘Y’: U1 is updated; otherwise: U1 is not updated.

in
jobu2

= ‘Y’: U2 is updated; otherwise: U2 is not updated.

in
jobv1t

= ‘Y’: V1T is updated; otherwise: V1T is not updated.

in
jobv2t

= ‘Y’: V2T is updated; otherwise: V2T is not updated.

in
trans

= ‘T’: X, U1, U2, V1T, and V2T are stored in row-major order; otherwise: they are stored in column-major order.

in
m

The number of rows and columns in X.

in
p

The number of rows in the top-left block of X. 0 <= p <= m.

in
q

The number of columns in the top-left block of X. 0 <= q <= min(p, m-p, m-q).

inout
theta

Single precision array, dimension (q).

inout
phi

Single precision array, dimension (q-1).

inout
U1

Complex*16 array, dimension (ldu1, p).

in
ldu1

The leading dimension of U1. ldu1 >= max(1, p).

inout
U2

Complex*16 array, dimension (ldu2, m-p).

in
ldu2

The leading dimension of U2. ldu2 >= max(1, m-p).

inout
V1T

Complex*16 array, dimension (ldv1t, q).

in
ldv1t

The leading dimension of V1T. ldv1t >= max(1, q).

inout
V2T

Complex*16 array, dimension (ldv2t, m-q).

in
ldv2t

The leading dimension of V2T. ldv2t >= max(1, m-q).

out
B11D

Single precision array, dimension (q).

out
B11E

Single precision array, dimension (q-1).

out
B12D

Single precision array, dimension (q).

out
B12E

Single precision array, dimension (q-1).

out
B21D

Single precision array, dimension (q).

out
B21E

Single precision array, dimension (q-1).

out
B22D

Single precision array, dimension (q).

out
B22E

Single precision array, dimension (q-1).

out
rwork

Single precision array, dimension (lrwork).

in
lrwork

The dimension of the array rwork. lrwork >= max(1, 8*q). If lrwork = -1, then a workspace query is assumed.

out
info

  • = 0: successful exit

  • < 0: if info = -i, the i-th argument had an illegal value

  • > 0: if CBBCSD did not converge, info specifies the number of nonzero entries in PHI.

Functions

void zbbcsd(
    const char*          jobu1,
    const char*          jobu2,
    const char*          jobv1t,
    const char*          jobv2t,
    const char*          trans,
    const INT            m,
    const INT            p,
    const INT            q,
          f64*  restrict theta,
          f64*  restrict phi,
          c128* restrict U1,
    const INT            ldu1,
          c128* restrict U2,
    const INT            ldu2,
          c128* restrict V1T,
    const INT            ldv1t,
          c128* restrict V2T,
    const INT            ldv2t,
          f64*  restrict B11D,
          f64*  restrict B11E,
          f64*  restrict B12D,
          f64*  restrict B12E,
          f64*  restrict B21D,
          f64*  restrict B21E,
          f64*  restrict B22D,
          f64*  restrict B22E,
          f64*  restrict rwork,
    const INT            lrwork,
          INT*           info
);
void zbbcsd(const char *jobu1, const char *jobu2, const char *jobv1t, const char *jobv2t, const char *trans, const INT m, const INT p, const INT q, f64 *restrict theta, f64 *restrict phi, c128 *restrict U1, const INT ldu1, c128 *restrict U2, const INT ldu2, c128 *restrict V1T, const INT ldv1t, c128 *restrict V2T, const INT ldv2t, f64 *restrict B11D, f64 *restrict B11E, f64 *restrict B12D, f64 *restrict B12E, f64 *restrict B21D, f64 *restrict B21E, f64 *restrict B22D, f64 *restrict B22E, f64 *restrict rwork, const INT lrwork, INT *info)#

ZBBCSD computes the CS decomposition of a unitary matrix in bidiagonal-block form.

X is M-by-M, its top-left block is P-by-Q, and Q must be no larger than P, M-P, or M-Q.

Parameters

in
jobu1

= ‘Y’: U1 is updated; otherwise: U1 is not updated.

in
jobu2

= ‘Y’: U2 is updated; otherwise: U2 is not updated.

in
jobv1t

= ‘Y’: V1T is updated; otherwise: V1T is not updated.

in
jobv2t

= ‘Y’: V2T is updated; otherwise: V2T is not updated.

in
trans

= ‘T’: X, U1, U2, V1T, and V2T are stored in row-major order; otherwise: they are stored in column-major order.

in
m

The number of rows and columns in X.

in
p

The number of rows in the top-left block of X. 0 <= p <= m.

in
q

The number of columns in the top-left block of X. 0 <= q <= min(p, m-p, m-q).

inout
theta

Double precision array, dimension (q).

inout
phi

Double precision array, dimension (q-1).

inout
U1

Complex*16 array, dimension (ldu1, p).

in
ldu1

The leading dimension of U1. ldu1 >= max(1, p).

inout
U2

Complex*16 array, dimension (ldu2, m-p).

in
ldu2

The leading dimension of U2. ldu2 >= max(1, m-p).

inout
V1T

Complex*16 array, dimension (ldv1t, q).

in
ldv1t

The leading dimension of V1T. ldv1t >= max(1, q).

inout
V2T

Complex*16 array, dimension (ldv2t, m-q).

in
ldv2t

The leading dimension of V2T. ldv2t >= max(1, m-q).

out
B11D

Double precision array, dimension (q).

out
B11E

Double precision array, dimension (q-1).

out
B12D

Double precision array, dimension (q).

out
B12E

Double precision array, dimension (q-1).

out
B21D

Double precision array, dimension (q).

out
B21E

Double precision array, dimension (q-1).

out
B22D

Double precision array, dimension (q).

out
B22E

Double precision array, dimension (q-1).

out
rwork

Double precision array, dimension (lrwork).

in
lrwork

The dimension of the array rwork. lrwork >= max(1, 8*q). If lrwork = -1, then a workspace query is assumed.

out
info

  • = 0: successful exit

  • < 0: if info = -i, the i-th argument had an illegal value

  • > 0: if ZBBCSD did not converge, info specifies the number of nonzero entries in PHI.