orbdb#

Functions

void sorbdb(
    const char*          trans,
    const char*          signs,
    const INT            m,
    const INT            p,
    const INT            q,
          f32*  restrict X11,
    const INT            ldx11,
          f32*  restrict X12,
    const INT            ldx12,
          f32*  restrict X21,
    const INT            ldx21,
          f32*  restrict X22,
    const INT            ldx22,
          f32*  restrict theta,
          f32*  restrict phi,
          f32*  restrict taup1,
          f32*  restrict taup2,
          f32*  restrict tauq1,
          f32*  restrict tauq2,
          f32*  restrict work,
    const INT            lwork,
          INT*           info
);
void sorbdb(const char *trans, const char *signs, const INT m, const INT p, const INT q, f32 *restrict X11, const INT ldx11, f32 *restrict X12, const INT ldx12, f32 *restrict X21, const INT ldx21, f32 *restrict X22, const INT ldx22, f32 *restrict theta, f32 *restrict phi, f32 *restrict taup1, f32 *restrict taup2, f32 *restrict tauq1, f32 *restrict tauq2, f32 *restrict work, const INT lwork, INT *info)#

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.

Parameters

in
trans

= ‘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.

in
signs

= ‘O’: The lower-left block is made nonpositive (the “other” convention); otherwise: The upper-right block is made nonpositive (the “default” convention).

in
m

The number of rows and columns in X.

in
p

The number of rows in X11 and X12. 0 <= p <= m.

in
q

The number of columns in X11 and X21. 0 <= q <= min(p, m-p, m-q).

inout
X11

Double precision array, dimension (ldx11, q).

in
ldx11

The leading dimension of X11.

inout
X12

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

in
ldx12

The leading dimension of X12.

inout
X21

Double precision array, dimension (ldx21, q).

in
ldx21

The leading dimension of X21.

inout
X22

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

in
ldx22

The leading dimension of X22.

out
theta

Double precision array, dimension (q).

out
phi

Double precision array, dimension (q-1).

out
taup1

Double precision array, dimension (p).

out
taup2

Double precision array, dimension (m-p).

out
tauq1

Double precision array, dimension (q).

out
tauq2

Double precision array, dimension (m-q).

out
work

Double precision array, dimension (lwork).

in
lwork

The dimension of the array work. lwork >= m-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

Functions

void dorbdb(
    const char*          trans,
    const char*          signs,
    const INT            m,
    const INT            p,
    const INT            q,
          f64*  restrict X11,
    const INT            ldx11,
          f64*  restrict X12,
    const INT            ldx12,
          f64*  restrict X21,
    const INT            ldx21,
          f64*  restrict X22,
    const INT            ldx22,
          f64*  restrict theta,
          f64*  restrict phi,
          f64*  restrict taup1,
          f64*  restrict taup2,
          f64*  restrict tauq1,
          f64*  restrict tauq2,
          f64*  restrict work,
    const INT            lwork,
          INT*           info
);
void dorbdb(const char *trans, const char *signs, const INT m, const INT p, const INT q, f64 *restrict X11, const INT ldx11, f64 *restrict X12, const INT ldx12, f64 *restrict X21, const INT ldx21, f64 *restrict X22, const INT ldx22, f64 *restrict theta, f64 *restrict phi, f64 *restrict taup1, f64 *restrict taup2, f64 *restrict tauq1, f64 *restrict tauq2, f64 *restrict work, const INT lwork, INT *info)#

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 = [——–&#8212;] = [——&#8212;] [————-&#8212;] [——&#8212;] . [ 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.

Parameters

in
trans

= ‘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.

in
signs

= ‘O’: The lower-left block is made nonpositive (the “other” convention); otherwise: The upper-right block is made nonpositive (the “default” convention).

in
m

The number of rows and columns in X.

in
p

The number of rows in X11 and X12. 0 <= p <= m.

in
q

The number of columns in X11 and X21. 0 <= q <= min(p, m-p, m-q).

inout
X11

Double precision array, dimension (ldx11, q).

in
ldx11

The leading dimension of X11.

inout
X12

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

in
ldx12

The leading dimension of X12.

inout
X21

Double precision array, dimension (ldx21, q).

in
ldx21

The leading dimension of X21.

inout
X22

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

in
ldx22

The leading dimension of X22.

out
theta

Double precision array, dimension (q).

out
phi

Double precision array, dimension (q-1).

out
taup1

Double precision array, dimension (p).

out
taup2

Double precision array, dimension (m-p).

out
tauq1

Double precision array, dimension (q).

out
tauq2

Double precision array, dimension (m-q).

out
work

Double precision array, dimension (lwork).

in
lwork

The dimension of the array work. lwork >= m-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