GBBRD - 5.2 English - 68552

AOCL API Guide (68552)

Document ID
68552
Release Date
2025-12-29
Version
5.2 English
template<typename T>
void gbbrd(char *vect, integer *m, integer *n, integer *ncc, integer *kl, integer *ku, T *ab, integer *ldab, T *d, T *e, T *q, integer *ldq, T *pt, integer *ldpt, T *c, integer *ldc, T *work, integer *info)#

Reduces a general band matrix to bidiagonal form.

Purpose :

 GBBRD reduces a real general m-by-n band matrix A to upper
  bidiagonal form B by an orthogonal transformation: Q**T * A * P = B.

  The routine computes B, and optionally forms Q or P**T, or computes
 Q**T*C for a given matrix C.
Parameters:
  • VECT[in]

    VECT is CHARACTER*1

    Specifies whether or not the matrices Q and P**T are to be formed.

    = ‘N’: do not form Q or P**T;

    = ‘Q’: form Q only;

    = ‘P’: form P**T only;

    = ‘B’: form both.

  • M[in]

    M is INTEGER

    The number of rows of the matrix A. M >= 0.

  • N[in]

    N is INTEGER

    The number of columns of the matrix A. N >= 0.

  • NCC[in]

    NCC is INTEGER

    The number of columns of the matrix C. NCC >= 0.

  • KL[in]

    KL is INTEGER

    The number of subdiagonals of the matrix A. KL >= 0.

  • KU[in]

    KU is INTEGER

    The number of superdiagonals of the matrix A. KU >= 0.

  • AB[inout]

    AB is REAL array, dimension (LDAB,N)

    On entry, the m-by-n band matrix A, stored in rows 1 to KL+KU+1. The j-th column of A is stored in the j-th column of the array AB as follows:

    AB(ku+1+i-j,j) = A(i,j) for fla_max(1,j-ku)<=i<=min(m,j+kl). On exit, A is overwritten by values generated during the reduction.
  • LDAB[in]

    LDAB is INTEGER

    The leading dimension of the array A. LDAB >= KL+KU+1.

  • D[out]

    D is REAL array, dimension (min(M,N))

    The diagonal elements of the bidiagonal matrix B.

  • E[out]

    E is REAL array, dimension (min(M,N)-1)

    The superdiagonal elements of the bidiagonal matrix B.

  • Q[out]

    Q is REAL array, dimension (LDQ,M)

    If VECT = ‘Q’ or ‘B’, the m-by-m orthogonal matrix Q.

    If VECT = ‘N’ or ‘P’, the array Q is not referenced.
  • LDQ[in]

    LDQ is INTEGER

    The leading dimension of the array Q.

    LDQ >= fla_max(1,M) if VECT = ‘Q’ or ‘B’; LDQ >= 1 otherwise.
  • PT[out]

    PT is REAL array, dimension (LDPT,N)

    If VECT = ‘P’ or ‘B’, the n-by-n orthogonal matrix P’.

    If VECT = ‘N’ or ‘Q’, the array PT is not referenced.
  • LDPT[in]

    LDPT is INTEGER

    The leading dimension of the array PT.

    LDPT >= fla_max(1,N) if VECT = ‘P’ or ‘B’; LDPT >= 1 otherwise.
  • C[inout]

    C is REAL array, dimension (LDC,NCC) On entry, an m-by-ncc matrix C.

    On exit, C is overwritten by Q**T*C.

    C is not referenced if NCC = 0.
  • LDC[in]

    LDC is INTEGER

    The leading dimension of the array C.

    LDC >= fla_max(1,M) if NCC > 0; LDC >= 1 if NCC = 0.
  • WORK[out] WORK is COMPLEX array, dimension (fla_max(M,N))

  • RWORK[out] RWORK is REAL array, dimension (fla_max(M,N))

  • INFO[out]

    INFO is INTEGER

    = 0: successful exit.

    < 0: if INFO = -i, the i-th argument had an illegal value.
template<typename T, typename Ta>
void gbbrd(char *vect, integer *m, integer *n, integer *ncc, integer *kl, integer *ku, T *ab, integer *ldab, Ta *d, Ta *e, T *q, integer *ldq, T *pt, integer *ldpt, T *c, integer *ldc, T *work, Ta *rwork, integer *info)#