lasd6#

Functions

void slasd6(
    const INT           icompq,
    const INT           nl,
    const INT           nr,
    const INT           sqre,
          f32* restrict D,
          f32* restrict VF,
          f32* restrict VL,
          f32*          alpha,
          f32*          beta,
          INT* restrict IDXQ,
          INT* restrict PERM,
          INT*          givptr,
          INT* restrict GIVCOL,
    const INT           ldgcol,
          f32* restrict GIVNUM,
    const INT           ldgnum,
          f32* restrict POLES,
          f32* restrict DIFL,
          f32* restrict DIFR,
          f32* restrict Z,
          INT*          k,
          f32*          c,
          f32*          s,
          f32* restrict work,
          INT* restrict IWORK,
          INT*          info
);
void slasd6(const INT icompq, const INT nl, const INT nr, const INT sqre, f32 *restrict D, f32 *restrict VF, f32 *restrict VL, f32 *alpha, f32 *beta, INT *restrict IDXQ, INT *restrict PERM, INT *givptr, INT *restrict GIVCOL, const INT ldgcol, f32 *restrict GIVNUM, const INT ldgnum, f32 *restrict POLES, f32 *restrict DIFL, f32 *restrict DIFR, f32 *restrict Z, INT *k, f32 *c, f32 *s, f32 *restrict work, INT *restrict IWORK, INT *info)#

SLASD6 computes the SVD of an updated upper bidiagonal matrix B obtained by merging two smaller ones by appending a row.

This routine is used only for the problem which requires all singular values and optionally singular vector matrices in factored form.

SLASD6 is called from SLASDA.

Parameters

in
icompq

= 0: Compute singular values only. = 1: Compute singular vectors in factored form.

in
nl

Row dimension of upper block. nl >= 1.

in
nr

Row dimension of lower block. nr >= 1.

in
sqre

= 0: lower block is nr-by-nr square. = 1: lower block is nr-by-(nr+1) rectangular.

inout
D

Array of dimension n. Singular values.

inout
VF

Array of dimension m. First components of right SVs.

inout
VL

Array of dimension m. Last components of right SVs.

inout
alpha

Diagonal element of added row.

inout
beta

Off-diagonal element of added row.

inout
IDXQ

Integer array of dimension n. Sorting permutation.

out
PERM

Integer array of dimension n. Permutation output.

out
givptr

Number of Givens rotations.

out
GIVCOL

Integer array (ldgcol, 2). Givens columns.

in
ldgcol

Leading dimension of GIVCOL. ldgcol >= n.

out
GIVNUM

Double array (ldgnum, 2). Givens values.

in
ldgnum

Leading dimension of GIVNUM and POLES. ldgnum >= n.

out
POLES

Double array (ldgnum, 2). New and old singular values.

out
DIFL

Double array of dimension n. Distances.

out
DIFR

Double array. Distances and normalizing factors.

out
Z

Double array of dimension m. Deflation-adjusted row.

out
k

Dimension of non-deflated matrix. 1 <= k <= n.

out
c

C-value of Givens rotation.

out
s

S-value of Givens rotation.

out
work

Double array of dimension 4*m.

out
IWORK

Integer array of dimension 3*n.

out
info

  • = 0: success. < 0: illegal argument. > 0: not converged.

Functions

void dlasd6(
    const INT           icompq,
    const INT           nl,
    const INT           nr,
    const INT           sqre,
          f64* restrict D,
          f64* restrict VF,
          f64* restrict VL,
          f64*          alpha,
          f64*          beta,
          INT* restrict IDXQ,
          INT* restrict PERM,
          INT*          givptr,
          INT* restrict GIVCOL,
    const INT           ldgcol,
          f64* restrict GIVNUM,
    const INT           ldgnum,
          f64* restrict POLES,
          f64* restrict DIFL,
          f64* restrict DIFR,
          f64* restrict Z,
          INT*          k,
          f64*          c,
          f64*          s,
          f64* restrict work,
          INT* restrict IWORK,
          INT*          info
);
void dlasd6(const INT icompq, const INT nl, const INT nr, const INT sqre, f64 *restrict D, f64 *restrict VF, f64 *restrict VL, f64 *alpha, f64 *beta, INT *restrict IDXQ, INT *restrict PERM, INT *givptr, INT *restrict GIVCOL, const INT ldgcol, f64 *restrict GIVNUM, const INT ldgnum, f64 *restrict POLES, f64 *restrict DIFL, f64 *restrict DIFR, f64 *restrict Z, INT *k, f64 *c, f64 *s, f64 *restrict work, INT *restrict IWORK, INT *info)#

DLASD6 computes the SVD of an updated upper bidiagonal matrix B obtained by merging two smaller ones by appending a row.

This routine is used only for the problem which requires all singular values and optionally singular vector matrices in factored form.

DLASD6 is called from DLASDA.

Parameters

in
icompq

= 0: Compute singular values only. = 1: Compute singular vectors in factored form.

in
nl

Row dimension of upper block. nl >= 1.

in
nr

Row dimension of lower block. nr >= 1.

in
sqre

= 0: lower block is nr-by-nr square. = 1: lower block is nr-by-(nr+1) rectangular.

inout
D

Array of dimension n. Singular values.

inout
VF

Array of dimension m. First components of right SVs.

inout
VL

Array of dimension m. Last components of right SVs.

inout
alpha

Diagonal element of added row.

inout
beta

Off-diagonal element of added row.

inout
IDXQ

Integer array of dimension n. Sorting permutation.

out
PERM

Integer array of dimension n. Permutation output.

out
givptr

Number of Givens rotations.

out
GIVCOL

Integer array (ldgcol, 2). Givens columns.

in
ldgcol

Leading dimension of GIVCOL. ldgcol >= n.

out
GIVNUM

Double array (ldgnum, 2). Givens values.

in
ldgnum

Leading dimension of GIVNUM and POLES. ldgnum >= n.

out
POLES

Double array (ldgnum, 2). New and old singular values.

out
DIFL

Double array of dimension n. Distances.

out
DIFR

Double array. Distances and normalizing factors.

out
Z

Double array of dimension m. Deflation-adjusted row.

out
k

Dimension of non-deflated matrix. 1 <= k <= n.

out
c

C-value of Givens rotation.

out
s

S-value of Givens rotation.

out
work

Double array of dimension 4*m.

out
IWORK

Integer array of dimension 3*n.

out
info

  • = 0: success. < 0: illegal argument. > 0: not converged.