SRC/sgsvj1.f(3)

okay bestie, welcome to SRC/sgsvj1.f(3) from the Library Functions Manual β€” this is the page for SGSVJ1, the pre-processor for sgesvj that applies Jacobi rotations targeting only particular pivots. πŸ’…βœ¨

🌸 NAME 🌸

SRC/sgsvj1.f

πŸ¦‹ SYNOPSIS πŸ¦‹

Functions/Subroutines

subroutine sgsvj1 (jobv, m, n, n1, a, lda, d, sva, mv, v, ldv, eps,
    sfmin, tol, nsweep, work, lwork, info)
    SGSVJ1 pre-processor for the routine sgesvj, applies Jacobi
    rotations targeting only particular pivots.

✨ Function/Subroutine Documentation ✨

subroutine sgsvj1 (character*1 jobv, integer m, integer n, integer n1, real,
    dimension( lda, * ) a, integer lda, real, dimension( n ) d, real,
    dimension( n ) sva, integer mv, real, dimension( ldv, * ) v, integer
    ldv, real eps, real sfmin, real tol, integer nsweep, real, dimension(
    lwork ) work, integer lwork, integer info)

SGSVJ1 pre-processor for the routine sgesvj, applies Jacobi rotations targeting only particular pivots. 🫢

πŸ’– Purpose πŸ’–

okay so here's the tea: SGSVJ1 is called from SGESVJ as a pre-processor, and that is literally its main purpose. It applies Jacobi rotations in the same way as SGESVJ does, but plot twist β€” it targets only particular pivots and it does not check convergence (the stopping criterion). A few tuning parameters (marked by [TP]) are available for the implementer. πŸ‘‘

🌈 Further Details 🌈

~~~~~~~~~~~~~~~

SGSVJ1 applies few sweeps of Jacobi rotations in the column space of the input M-by-N matrix A. The pivot pairs are taken from the (1,2) off-diagonal block in the corresponding N-by-N Gram matrix A^T * A. The block-entries (tiles) of the (1,2) off-diagonal block are marked by the [x]'s in the following scheme:

   | *  *  * [x] [x] [x]|
   | *  *  * [x] [x] [x]|    Row-cycling in the nblr-by-nblc [x] blocks.
   | *  *  * [x] [x] [x]|    Row-cyclic pivoting inside each [x] block.
   |[x] [x] [x] *  *  * |
   |[x] [x] [x] *  *  * |
   |[x] [x] [x] *  *  * |

In terms of the columns of A, the first N1 columns are rotated 'against' the remaining N-N1 columns, trying to increase the angle between the corresponding subspaces. The off-diagonal block is N1-by-(N-N1) and it is tiled using quadratic tiles of side KBL. Here, KBL is a tuning parameter. The number of sweeps is given in NSWEEP and the orthogonality threshold is given in TOL. πŸ¦‹

πŸ‘‘ Parameters πŸ‘‘

  • JOBV β€” is CHARACTER*1. Specifies whether the output from this procedure is used to compute the matrix V:
    • = 'V': the product of the Jacobi rotations is accumulated by postmultiplying the N-by-N array V. (See the description of V.)
    • = 'A': the product of the Jacobi rotations is accumulated by postmultiplying the MV-by-N array V. (See the descriptions of MV and V.)
    • = 'N': the Jacobi rotations are not accumulated.
  • M β€” is INTEGER. The number of rows of the input matrix A. M >= 0.
  • N β€” is INTEGER. The number of columns of the input matrix A. M >= N >= 0.
  • N1 β€” is INTEGER. N1 specifies the 2 x 2 block partition, the first N1 columns are rotated 'against' the remaining N-N1 columns of A.
  • A β€” is REAL array, dimension (LDA,N). On entry, M-by-N matrix A, such that A*diag(D) represents the input matrix. On exit, A_onexit * D_onexit represents the input matrix A*diag(D) post-multiplied by a sequence of Jacobi rotations, where the rotation threshold and the total number of sweeps are given in TOL and NSWEEP, respectively. (See the descriptions of N1, D, TOL and NSWEEP.)
  • LDA β€” is INTEGER. The leading dimension of the array A. LDA >= max(1,M).
  • D β€” is REAL array, dimension (N). The array D accumulates the scaling factors from the fast scaled Jacobi rotations. On entry, A*diag(D) represents the input matrix. On exit, A_onexit*diag(D_onexit) represents the input matrix post-multiplied by a sequence of Jacobi rotations, where the rotation threshold and the total number of sweeps are given in TOL and NSWEEP, respectively. (See the descriptions of N1, A, TOL and NSWEEP.)
  • SVA β€” is REAL array, dimension (N). On entry, SVA contains the Euclidean norms of the columns of the matrix A*diag(D). On exit, SVA contains the Euclidean norms of the columns of the matrix onexit*diag(D_onexit).
  • MV β€” is INTEGER. If JOBV = 'A', then MV rows of V are post-multiplied by a sequence of Jacobi rotations. If JOBV = 'N', then MV is not referenced.
  • V β€” is REAL array, dimension (LDV,N). If JOBV = 'V' then N rows of V are post-multiplied by a sequence of Jacobi rotations. If JOBV = 'A' then MV rows of V are post-multiplied by a sequence of Jacobi rotations. If JOBV = 'N', then V is not referenced.
  • LDV β€” is INTEGER. The leading dimension of the array V, LDV >= 1. If JOBV = 'V', LDV >= N. If JOBV = 'A', LDV >= MV.
  • EPS β€” is REAL. EPS = SLAMCH('Epsilon').
  • SFMIN β€” is REAL. SFMIN = SLAMCH('Safe Minimum').
  • TOL β€” is REAL. TOL is the threshold for Jacobi rotations. For a pair A(:,p), A(:,q) of pivot columns, the Jacobi rotation is applied only if ABS(COS(angle(A(:,p),A(:,q)))) > TOL.
  • NSWEEP β€” is INTEGER. NSWEEP is the number of sweeps of Jacobi rotations to be performed.
  • WORK β€” is REAL array, dimension (LWORK).
  • LWORK β€” is INTEGER. LWORK is the dimension of WORK. LWORK >= M.
  • INFO β€” is INTEGER. = 0: successful exit. < 0: if INFO = -i, then the i-th argument had an illegal value.

🌸 Author 🌸

Univ. of Tennessee

Univ. of California Berkeley

Univ. of Colorado Denver

NAG Ltd.

πŸ’œ Contributors: πŸ’œ

Zlatko Drmac (Zagreb, Croatia) and Kresimir Veselic (Hagen, Germany)

Definition at line 234 of file sgsvj1.f.

πŸŽ€ Author πŸŽ€

Generated automatically by Doxygen for LAPACK from the source code.

and that's the whole page, bestie! 🫢 Footer tea: LAPACK, Version 3.12.0, page SRC/sgsvj1.f(3). βœ¨πŸ’–

πŸ“¦ where this page comes from