complex_blas_level2(3)

πŸ“¦
version 3.11.0 Β· 2 versions
, in debian bookworm

πŸ’– NAME πŸ’–

complex_blas_level2 β€” it's giving complex, bestie. This is the LAPACK manual page for the entire complex LEVEL 2 BLAS squad, and we are doing all of them. Buckle up πŸŽ€


✨ SYNOPSIS ✨

🫢 The Functions (the whole girl group)

  • subroutine cgbmv (TRANS, M, N, KL, KU, ALPHA, A, LDA, X, INCX, BETA, Y, INCY) β€” CGBMV
  • subroutine cgemv (TRANS, M, N, ALPHA, A, LDA, X, INCX, BETA, Y, INCY) β€” CGEMV
  • subroutine cgerc (M, N, ALPHA, X, INCX, Y, INCY, A, LDA) β€” CGERC
  • subroutine cgeru (M, N, ALPHA, X, INCX, Y, INCY, A, LDA) β€” CGERU
  • subroutine chbmv (UPLO, N, K, ALPHA, A, LDA, X, INCX, BETA, Y, INCY) β€” CHBMV
  • subroutine chemv (UPLO, N, ALPHA, A, LDA, X, INCX, BETA, Y, INCY) β€” CHEMV
  • subroutine cher (UPLO, N, ALPHA, X, INCX, A, LDA) β€” CHER
  • subroutine cher2 (UPLO, N, ALPHA, X, INCX, Y, INCY, A, LDA) β€” CHER2
  • subroutine chpmv (UPLO, N, ALPHA, AP, X, INCX, BETA, Y, INCY) β€” CHPMV
  • subroutine chpr (UPLO, N, ALPHA, X, INCX, AP) β€” CHPR
  • subroutine chpr2 (UPLO, N, ALPHA, X, INCX, Y, INCY, AP) β€” CHPR2
  • subroutine ctbmv (UPLO, TRANS, DIAG, N, K, A, LDA, X, INCX) β€” CTBMV
  • subroutine ctbsv (UPLO, TRANS, DIAG, N, K, A, LDA, X, INCX) β€” CTBSV
  • subroutine ctpmv (UPLO, TRANS, DIAG, N, AP, X, INCX) β€” CTPMV
  • subroutine ctpsv (UPLO, TRANS, DIAG, N, AP, X, INCX) β€” CTPSV
  • subroutine ctrmv (UPLO, TRANS, DIAG, N, A, LDA, X, INCX) β€” CTRMV
  • subroutine ctrsv (UPLO, TRANS, DIAG, N, A, LDA, X, INCX) β€” CTRSV

🌈 Detailed Description 🌈

This is, and I quote, the group of complex LEVEL 2 BLAS routines. That's the whole vibe. A whole friend group of matrix-vector and rank-update legends πŸ’…


πŸ‘‘ Function Documentation πŸ‘‘

🌸 subroutine cgbmv 🌸

subroutine cgbmv (character TRANS, integer M, integer N, integer KL, integer
    KU, complex ALPHA, complex, dimension(lda,*) A, integer LDA, complex,
    dimension(*) X, integer INCX, complex BETA, complex, dimension(*) Y,
    integer INCY)

CGBMV πŸ’«

Purpose:

CGBMV performs one of the matrix-vector operations

y := alpha*A*x + beta*y,   or   y := alpha*A**T*x + beta*y,   or

y := alpha*A**H*x + beta*y,

where alpha and beta are scalars, x and y are vectors and A is an m by n band matrix, with kl sub-diagonals and ku super-diagonals. Band matrix representation, no cap πŸ”₯

Parameters

  • TRANS β€” TRANS is CHARACTER*1. On entry, TRANS specifies the operation to be performed as follows:
    • TRANS = 'N' or 'n' β†’ y := alpha*A*x + beta*y.
    • TRANS = 'T' or 't' β†’ y := alpha*A**T*x + beta*y.
    • TRANS = 'C' or 'c' β†’ y := alpha*A**H*x + beta*y.
  • M β€” M is INTEGER. On entry, M specifies the number of rows of the matrix A. M must be at least zero.
  • N β€” N is INTEGER. On entry, N specifies the number of columns of the matrix A. N must be at least zero.
  • KL β€” KL is INTEGER. On entry, KL specifies the number of sub-diagonals of the matrix A. KL must satisfy 0 .le. KL.
  • KU β€” KU is INTEGER. On entry, KU specifies the number of super-diagonals of the matrix A. KU must satisfy 0 .le. KU.
  • ALPHA β€” ALPHA is COMPLEX. On entry, ALPHA specifies the scalar alpha.
  • A β€” A is COMPLEX array, dimension ( LDA, N ). Before entry, the leading ( kl + ku + 1 ) by n part of the array A must contain the matrix of coefficients, supplied column by column, with the leading diagonal of the matrix in row ( ku + 1 ) of the array, the first super-diagonal starting at position 2 in row ku, the first sub-diagonal starting at position 1 in row ( ku + 2 ), and so on. Elements in the array A that do not correspond to elements in the band matrix (such as the top left ku by ku triangle) are not referenced. The following program segment will transfer a band matrix from conventional full matrix storage to band storage:
DO 20, J = 1, N
   K = KU + 1 - J
   DO 10, I = MAX( 1, J - KU ), MIN( M, J + KL )
      A( K + I, J ) = matrix( I, J )
10    CONTINUE
20 CONTINUE
  • LDA β€” LDA is INTEGER. On entry, LDA specifies the first dimension of A as declared in the calling (sub) program. LDA must be at least ( kl + ku + 1 ).
  • X β€” X is COMPLEX array, dimension at least ( 1 + ( n - 1 )*abs( INCX ) ) when TRANS = 'N' or 'n' and at least ( 1 + ( m - 1 )*abs( INCX ) ) otherwise. Before entry, the incremented array X must contain the vector x.
  • INCX β€” INCX is INTEGER. On entry, INCX specifies the increment for the elements of X. INCX must not be zero.
  • BETA β€” BETA is COMPLEX. On entry, BETA specifies the scalar beta. When BETA is supplied as zero then Y need not be set on input. (Lowkey a nice little shortcut, ngl.)
  • Y β€” Y is COMPLEX array, dimension at least ( 1 + ( m - 1 )*abs( INCY ) ) when TRANS = 'N' or 'n' and at least ( 1 + ( n - 1 )*abs( INCY ) ) otherwise. Before entry, the incremented array Y must contain the vector y. On exit, Y is overwritten by the updated vector y.
  • INCY β€” INCY is INTEGER. On entry, INCY specifies the increment for the elements of Y. INCY must not be zero.

Author

  • Univ. of Tennessee
  • Univ. of California Berkeley
  • Univ. of Colorado Denver
  • NAG Ltd.

Further Details:

Level 2 Blas routine.

The vector and matrix arguments are not referenced when N = 0, or M = 0

-- Written on 22-October-1986.
   Jack Dongarra, Argonne National Lab.
   Jeremy Du Croz, Nag Central Office.
   Sven Hammarling, Nag Central Office.
   Richard Hanson, Sandia National Labs.

🌸 subroutine cgemv 🌸

subroutine cgemv (character TRANS, integer M, integer N, complex ALPHA,
    complex, dimension(lda,*) A, integer LDA, complex, dimension(*) X,
    integer INCX, complex BETA, complex, dimension(*) Y, integer INCY)

CGEMV πŸ’«

Purpose:

CGEMV performs one of the matrix-vector operations

y := alpha*A*x + beta*y,   or   y := alpha*A**T*x + beta*y,   or

y := alpha*A**H*x + beta*y,

where alpha and beta are scalars, x and y are vectors and A is an m by n matrix. The general-purpose icon of the group, periodt πŸ‘‘

Parameters

  • TRANS β€” TRANS is CHARACTER*1. On entry, TRANS specifies the operation to be performed as follows:
    • TRANS = 'N' or 'n' β†’ y := alpha*A*x + beta*y.
    • TRANS = 'T' or 't' β†’ y := alpha*A**T*x + beta*y.
    • TRANS = 'C' or 'c' β†’ y := alpha*A**H*x + beta*y.
  • M β€” M is INTEGER. On entry, M specifies the number of rows of the matrix A. M must be at least zero.
  • N β€” N is INTEGER. On entry, N specifies the number of columns of the matrix A. N must be at least zero.
  • ALPHA β€” ALPHA is COMPLEX. On entry, ALPHA specifies the scalar alpha.
  • A β€” A is COMPLEX array, dimension ( LDA, N ). Before entry, the leading m by n part of the array A must contain the matrix of coefficients.
  • LDA β€” LDA is INTEGER. On entry, LDA specifies the first dimension of A as declared in the calling (sub) program. LDA must be at least max( 1, m ).
  • X β€” X is COMPLEX array, dimension at least ( 1 + ( n - 1 )*abs( INCX ) ) when TRANS = 'N' or 'n' and at least ( 1 + ( m - 1 )*abs( INCX ) ) otherwise. Before entry, the incremented array X must contain the vector x.
  • INCX β€” INCX is INTEGER. On entry, INCX specifies the increment for the elements of X. INCX must not be zero.
  • BETA β€” BETA is COMPLEX. On entry, BETA specifies the scalar beta. When BETA is supplied as zero then Y need not be set on input.
  • Y β€” Y is COMPLEX array, dimension at least ( 1 + ( m - 1 )*abs( INCY ) ) when TRANS = 'N' or 'n' and at least ( 1 + ( n - 1 )*abs( INCY ) ) otherwise. Before entry with BETA non-zero, the incremented array Y must contain the vector y. On exit, Y is overwritten by the updated vector y.
  • INCY β€” INCY is INTEGER. On entry, INCY specifies the increment for the elements of Y. INCY must not be zero.

Author

  • Univ. of Tennessee
  • Univ. of California Berkeley
  • Univ. of Colorado Denver
  • NAG Ltd.

Further Details:

Level 2 Blas routine.

The vector and matrix arguments are not referenced when N = 0, or M = 0

-- Written on 22-October-1986.
   Jack Dongarra, Argonne National Lab.
   Jeremy Du Croz, Nag Central Office.
   Sven Hammarling, Nag Central Office.
   Richard Hanson, Sandia National Labs.

🌸 subroutine cgerc 🌸

subroutine cgerc (integer M, integer N, complex ALPHA, complex, dimension(*)
    X, integer INCX, complex, dimension(*) Y, integer INCY, complex,
    dimension(lda,*) A, integer LDA)

CGERC πŸ’«

Purpose:

CGERC performs the rank 1 operation

A := alpha*x*y**H + A,

where alpha is a scalar, x is an m element vector, y is an n element vector and A is an m by n matrix. Rank-1 update with the conjugate-transpose energy, obsessed ✨

Parameters

  • M β€” M is INTEGER. On entry, M specifies the number of rows of the matrix A. M must be at least zero.
  • N β€” N is INTEGER. On entry, N specifies the number of columns of the matrix A. N must be at least zero.
  • ALPHA β€” ALPHA is COMPLEX. On entry, ALPHA specifies the scalar alpha.
  • X β€” X is COMPLEX array, dimension at least ( 1 + ( m - 1 )*abs( INCX ) ). Before entry, the incremented array X must contain the m element vector x.
  • INCX
  • INCX β€” INCX is INTEGER. On entry, INCX tells you the increment for the elements of X, bestie. INCX must not be zero. Like, zero is not the vibe here. πŸ’€
  • Y β€” Y is COMPLEX array, dimension at least ( 1 + ( n - 1 )*abs( INCY ) ). Before entry, the incremented array Y must contain the n element vector y. 🫢
  • INCY β€” INCY is INTEGER. On entry, INCY specifies the increment for the elements of Y. INCY must not be zero. Same energy as INCX, no cap.
  • A β€” A is COMPLEX array, dimension ( LDA, N ). Before entry, the leading m by n part of the array A must contain the matrix of coefficients. On exit, A is overwritten by the updated matrix. She got a glow-up, she's not who she was. ✨
  • LDA β€” LDA is INTEGER. On entry, LDA specifies the first dimension of A as declared in the calling (sub) program. LDA must be at least max( 1, m ). πŸ“

Author πŸ‘‘

  • Univ. of Tennessee
  • Univ. of California Berkeley
  • Univ. of Colorado Denver
  • NAG Ltd.

Further Details πŸ”

Level 2 Blas routine.

-- Written on 22-October-1986.
   Jack Dongarra, Argonne National Lab.
   Jeremy Du Croz, Nag Central Office.
   Sven Hammarling, Nag Central Office.
   Richard Hanson, Sandia National Labs.

subroutine cgeru 🌈

subroutine cgeru (integer M, integer N, complex ALPHA, complex, dimension(*)
    X, integer INCX, complex, dimension(*) Y, integer INCY, complex,
    dimension(lda,*) A, integer LDA)

CGERU

Purpose 🎯

CGERU performs the rank 1 operation

   A := alpha*x*y**T + A,

where alpha is a scalar, x is an m element vector, y is an n element vector and A is an m by n matrix. Literally the blueprint. πŸ’…

Parameters πŸ“‹

  • M β€” M is INTEGER. On entry, M specifies the number of rows of the matrix A. M must be at least zero.
  • N β€” N is INTEGER. On entry, N specifies the number of columns of the matrix A. N must be at least zero.
  • ALPHA β€” ALPHA is COMPLEX. On entry, ALPHA specifies the scalar alpha. ⭐
  • X β€” X is COMPLEX array, dimension at least ( 1 + ( m - 1 )*abs( INCX ) ). Before entry, the incremented array X must contain the m element vector x.
  • INCX β€” INCX is INTEGER. On entry, INCX specifies the increment for the elements of X. INCX must not be zero.
  • Y β€” Y is COMPLEX array, dimension at least ( 1 + ( n - 1 )*abs( INCY ) ). Before entry, the incremented array Y must contain the n element vector y.
  • INCY β€” INCY is INTEGER. On entry, INCY specifies the increment for the elements of Y. INCY must not be zero.
  • A β€” A is COMPLEX array, dimension ( LDA, N ). Before entry, the leading m by n part of the array A must contain the matrix of coefficients. On exit, A is overwritten by the updated matrix. πŸ’–
  • LDA β€” LDA is INTEGER. On entry, LDA specifies the first dimension of A as declared in the calling (sub) program. LDA must be at least max( 1, m ).

Author πŸ‘‘

  • Univ. of Tennessee
  • Univ. of California Berkeley
  • Univ. of Colorado Denver
  • NAG Ltd.

Further Details πŸ”

Level 2 Blas routine.

-- Written on 22-October-1986.
   Jack Dongarra, Argonne National Lab.
   Jeremy Du Croz, Nag Central Office.
   Sven Hammarling, Nag Central Office.
   Richard Hanson, Sandia National Labs.

subroutine chbmv πŸ¦‹

subroutine chbmv (character UPLO, integer N, integer K, complex ALPHA,
    complex, dimension(lda,*) A, integer LDA, complex, dimension(*) X,
    integer INCX, complex BETA, complex, dimension(*) Y, integer INCY)

CHBMV

Purpose 🎯

CHBMV performs the matrix-vector operation

   y := alpha*A*x + beta*y,

where alpha and beta are scalars, x and y are n element vectors and A is an n by n hermitian band matrix, with k super-diagonals. Band storage is giving efficiency, iykyk. πŸ”₯

Parameters πŸ“‹

  • UPLO β€” UPLO is CHARACTER*1. On entry, UPLO specifies whether the upper or lower triangular part of the band matrix A is being supplied as follows:
    • UPLO = 'U' or 'u' β€” The upper triangular part of A is being supplied.
    • UPLO = 'L' or 'l' β€” The lower triangular part of A is being supplied.
  • N β€” N is INTEGER. On entry, N specifies the order of the matrix A. N must be at least zero.
  • K β€” K is INTEGER. On entry, K specifies the number of super-diagonals of the matrix A. K must satisfy 0 .le. K.
  • ALPHA β€” ALPHA is COMPLEX. On entry, ALPHA specifies the scalar alpha. ✨
  • A β€” A is COMPLEX array, dimension ( LDA, N ). Okay bestie, this one is a whole saga, so buckle up:

Before entry with UPLO = 'U' or 'u', the leading ( k + 1 ) by n part of the array A must contain the upper triangular band part of the hermitian matrix, supplied column by column, with the leading diagonal of the matrix in row ( k + 1 ) of the array, the first super-diagonal starting at position 2 in row k, and so on. The top left k by k triangle of the array A is not referenced. πŸ™ˆ

The following program segment will transfer the upper triangular part of a hermitian band matrix from conventional full matrix storage to band storage:

      DO 20, J = 1, N
         M = K + 1 - J
         DO 10, I = MAX( 1, J - K ), J
            A( M + I, J ) = matrix( I, J )
   10    CONTINUE
   20 CONTINUE

Before entry with UPLO = 'L' or 'l', the leading ( k + 1 ) by n part of the array A must contain the lower triangular band part of the hermitian matrix, supplied column by column, with the leading diagonal of the matrix in row 1 of the array, the first sub-diagonal starting at position 1 in row 2, and so on. The bottom right k by k triangle of the array A is not referenced. πŸ™ˆ

The following program segment will transfer the lower triangular part of a hermitian band matrix from conventional full matrix storage to band storage:

      DO 20, J = 1, N
         M = 1 - J
         DO 10, I = J, MIN( N, J + K )
            A( M + I, J ) = matrix( I, J )
   10    CONTINUE
   20 CONTINUE
Note that the imaginary parts of the diagonal elements need not be set and are assumed to be zero. 🧚
  • LDA β€” LDA is INTEGER. On entry, LDA specifies the first dimension of A as declared in the calling (sub) program. LDA must be at least ( k + 1 ). πŸ“
  • X β€” X is COMPLEX array, dimension at least ( 1 + ( n - 1 )*abs( INCX ) ). Before entry, the incremented array X must contain the vector x.
  • INCX β€” INCX is INTEGER. On entry, INCX specifies the increment for the elements of X. INCX must not be zero.
  • BETA β€” BETA is COMPLEX. On entry, BETA specifies the scalar beta. 🌸
  • Y β€” Y is COMPLEX array, dimension at least ( 1 + ( n - 1 )*abs( INCY ) ). Before entry, the incremented array Y must contain the vector y. On exit, Y is overwritten by the updated vector y. She's transformed, periodt. πŸ’…
  • INCY β€” INCY is INTEGER. On entry, INCY specifies the increment for the elements of Y. INCY must not be zero.

Author πŸ‘‘

  • Univ. of Tennessee
  • Univ. of California Berkeley
  • Univ. of Colorado Denver
  • NAG Ltd.

Further Details πŸ”

Level 2 Blas routine.

The vector and matrix arguments are not referenced when N = 0, or M = 0.

-- Written on 22-October-1986.
   Jack Dongarra, Argonne National Lab.
   Jeremy Du Croz, Nag Central Office.
   Sven Hammarling, Nag Central Office.
   Richard Hanson, Sandia National Labs.

subroutine chemv πŸ’œ

subroutine chemv (character UPLO, integer N, complex ALPHA, complex,
    dimension(lda,*) A, integer LDA, complex, dimension(*) X, integer INCX,
    complex BETA, complex, dimension(*) Y, integer INCY)

CHEMV

Purpose 🎯

CHEMV performs the matrix-vector operation

   y := alpha*A*x + beta*y,

where alpha and beta are scalars, x and y are n element vectors and A is an n by n hermitian matrix. Iconic behaviour, honestly. πŸ‘‘

Parameters πŸ“‹

  • UPLO β€” UPLO is CHARACTER*1. On entry, UPLO specifies whether the upper or lower triangular part of the array A is to be referenced as follows:
    • UPLO = 'U' or 'u' β€” Only the upper triangular part of A is to be referenced.
    • UPLO = 'L' or 'l' β€” Only the lower triangular part of A is to be referenced.
  • N β€” N is INTEGER. On entry, N specifies the order of the matrix A. N must be at least zero.
  • ALPHA β€” ALPHA is COMPLEX. On entry, ALPHA specifies the scalar alpha. ⭐
  • A β€”

A

okay so A is a COMPLEX array with dimension ( LDA, N ), and here's the tea 🍡:

  • entering with UPLO = 'U' or 'u'? then the leading n by n upper triangular part of the array A must contain the upper triangular part of the hermitian matrix. the strictly lower triangular part of A? not referenced. we simply do not perceive it, bestie πŸ™ˆ
  • entering with UPLO = 'L' or 'l'? then it's the leading n by n lower triangular part of A that must contain the lower triangular part of the hermitian matrix, and the strictly upper triangular part of A is not referenced.

and one lil note: the imaginary parts of the diagonal elements need not be set and they're assumed to be zero. so like, don't stress abt them πŸ’…

LDA

LDA is INTEGER.

On entry, LDA specifies the first dimension of A as declared in the calling (sub) program. and it must be at least max( 1, n ). no exceptions, no negotiations 🫢

X

X is a COMPLEX array, dimension at least ( 1 + ( n - 1 )*abs( INCX ) ).

Before entry, the incremented array X must contain the n element vector x. that's the whole assignment. iconic, honestly πŸŽ€

INCX

INCX is INTEGER.

On entry, INCX specifies the increment for the elements of X. and INCX must not be zero. like. at all. ever. 🚫

BETA

BETA is COMPLEX.

On entry, BETA specifies the scalar beta. cute lil bonus: when BETA is supplied as zero, then Y need not be set on input. free real estate ✨

Y

Y is a COMPLEX array, dimension at least ( 1 + ( n - 1 )*abs( INCY ) ).

Before entry, the incremented array Y must contain the n element vector y. On exit, Y is overwritten by the updated vector y. the glow-up happens in place, as it should πŸ’–

INCY

INCY is INTEGER.

On entry, INCY specifies the increment for the elements of Y. INCY must not be zero. periodt.

Author

  • Univ. of Tennessee
  • Univ. of California Berkeley
  • Univ. of Colorado Denver
  • NAG Ltd.

Further Details:

  • Level 2 Blas routine.
  • The vector and matrix arguments are not referenced when N = 0, or M = 0
-- Written on 22-October-1986.
   Jack Dongarra, Argonne National Lab.
   Jeremy Du Croz, Nag Central Office.
   Sven Hammarling, Nag Central Office.
   Richard Hanson, Sandia National Labs.

subroutine cher (character UPLO, integer N, real ALPHA, complex, dimension(*) X, integer INCX, complex, dimension(lda,*) A, integer LDA)

CHER πŸ’œ

Purpose:

CHER performs the hermitian rank 1 operation

   A := alpha*x*x**H + A,

where alpha is a real scalar, x is an n element vector and A is an n by n hermitian matrix. rank one, one single outer product, doing the absolute most 🌈

Parameters

UPLO

UPLO is CHARACTER*1.

On entry, UPLO specifies whether the upper or lower triangular part of the array A is to be referenced, like so:

  • UPLO = 'U' or 'u' β€” Only the upper triangular part of A is to be referenced.
  • UPLO = 'L' or 'l' β€” Only the lower triangular part of A is to be referenced.

N

N is INTEGER.

On entry, N specifies the order of the matrix A. N must be at least zero.

ALPHA

ALPHA is REAL.

On entry, ALPHA specifies the scalar alpha. yes bestie, REAL β€” not complex β€” it's giving hermitian πŸ’…

X

X is a COMPLEX array, dimension at least ( 1 + ( n - 1 )*abs( INCX ) ).

Before entry, the incremented array X must contain the n element vector x.

INCX

INCX is INTEGER.

On entry, INCX specifies the increment for the elements of X. INCX must not be zero.

A

A is a COMPLEX array, dimension ( LDA, N ).

  • Before entry with UPLO = 'U' or 'u', the leading n by n upper triangular part of the array A must contain the upper triangular part of the hermitian matrix, and the strictly lower triangular part of A is not referenced. On exit, the upper triangular part of the array A is overwritten by the upper triangular part of the updated matrix.
  • Before entry with UPLO = 'L' or 'l', the leading n by n lower triangular part of the array A must contain the lower triangular part of the hermitian matrix, and the strictly upper triangular part of A is not referenced. On exit, the lower triangular part of the array A is overwritten by the lower triangular part of the updated matrix.

and note: the imaginary parts of the diagonal elements need not be set, they are assumed to be zero, and on exit they are set to zero. so she cleans up after herself, we love that 🧚

LDA

LDA is INTEGER.

On entry, LDA specifies the first dimension of A as declared in the calling (sub) program. LDA must be at least max( 1, n ).

Author

  • Univ. of Tennessee
  • Univ. of California Berkeley
  • Univ. of Colorado Denver
  • NAG Ltd.

Further Details:

Level 2 Blas routine.

-- Written on 22-October-1986.
   Jack Dongarra, Argonne National Lab.
   Jeremy Du Croz, Nag Central Office.
   Sven Hammarling, Nag Central Office.
   Richard Hanson, Sandia National Labs.

subroutine cher2 (character UPLO, integer N, complex ALPHA, complex, dimension(*) X, integer INCX, complex, dimension(*) Y, integer INCY, complex, dimension(lda,*) A, integer LDA)

CHER2 πŸ¦‹

Purpose:

CHER2 performs the hermitian rank 2 operation

   A := alpha*x*y**H + conjg( alpha )*y*x**H + A,

where alpha is a scalar, x and y are n element vectors and A is an n by n hermitian matrix. two outer products, one conjugate, zero notes πŸ“

Parameters

UPLO

UPLO is CHARACTER*1.

On entry, UPLO specifies whether the upper or lower triangular part of the array A is to be referenced, as follows:

  • UPLO = 'U' or 'u' β€” Only the upper triangular part of A is to be referenced.
  • UPLO = 'L' or 'l' β€” Only the lower triangular part of A is to be referenced.

N

N is INTEGER.

On entry, N specifies the order of the matrix A. N must be at least zero.

ALPHA

ALPHA is COMPLEX.

On entry, ALPHA specifies the scalar alpha. (yeah, complex this time β€” CHER had a REAL one, don't get it twisted πŸ’…)

X

X is a COMPLEX array, dimension at least ( 1 + ( n - 1 )*abs( INCX ) ).

Before entry, the incremented array X must contain the n element vector x.

INCX

INCX is INTEGER.

On entry, INCX specifies the increment for the elements of X. INCX must not be zero.

Y

Y is a COMPLEX array, dimension at least ( 1 + ( n - 1 )*abs( INCY ) ).

Before entry, the incremented array Y must contain the n element vector y.

INCY

INCY is INTEGER.

On entry, INCY specifies the increment for the elements of Y. INCY must not be zero.

A

A is a COMPLEX array, dimension ( LDA, N ).

  • Before entry with UPLO = 'U' or 'u', the leading n by n upper triangular part of the array A must contain the upper triangular part of the hermitian matrix, and the strictly lower triangular part of A is not referenced. On exit, the upper triangular part of the array A is overwritten by the upper triangular part of the updated matrix.
  • Before entry with UPLO = 'L' or 'l', the leading n by n lower triangular part of the array A must contain the lower triangular part of the hermitian matrix, and the strictly upper triangular part of A is not referenced. On exit, the lower triangular part of the array A is overwritten by the lower triangular part of the updated matrix.

and again, for the record: the imaginary parts of the diagonal elements need not be set, they are assumed to be zero, and on exit they are set to zero ✨

LDA

LDA is INTEGER.

On entry, LDA specifies the first dimension of A as declared in the calling (sub) program. LDA must be at least max( 1, n ).

Author

  • Univ. of Tennessee
  • Univ. of California Berkeley
  • Univ. of Colorado Denver
  • NAG Ltd.

Further Details:

Level 2 Blas routine.

-- Written on 22-October-1986.
   Jack Dongarra, Argonne National Lab.
   Jeremy Du Croz, Nag Central Office.
   Sven Hammarling, Nag Central Office.
   Richard Hanson, Sandia National Labs.

subroutine chpmv (character UPLO, integer N, complex ALPHA, complex, dimension(*) AP, complex, dimension(*) X, integer INCX, complex BETA, complex, dimension(*) Y, integer INCY)

CHPMV πŸ‘‘

Purpose:

CHPMV performs the matrix-vector operation

   y := alpha*A*x + beta*y,

where alpha and beta are scalars, x and y are n element vectors and A is an n by n hermitian matrix, supplied in packed form. packed!! no wasted zeros, she's efficient πŸ’…

Parameters

UPLO

UPLO is CHARACTER*1.

On entry, UPLO specifies whether the upper or lower triangular part of the matrix A is supplied in the packed array AP as follows:

  • UPLO = 'U' or 'u' β€” The upper triangular part of A is supplied in AP.
  • UPLO = 'L' or 'l' β€” The lower triangular part of A is supplied in AP.

N

N is INTEGER.

On entry, N specifies the order of the matrix A. N must be at least zero.

ALPHA

ALPHA is COMPLEX.

On entry, ALPHA specifies the scalar alpha.

AP

  • AP β€” COMPLEX array, dimension at least ( ( n*( n + 1 ) )/2 ). 🫢

Okay so before you come in with UPLO = 'U' or 'u', this array has to already hold the upper triangular part of the hermitian matrix, packed sequentially, column by column β€” meaning AP( 1 ) contains a( 1, 1 ), then AP( 2 ) and AP( 3 ) contain a( 1, 2 ) and a( 2, 2 ) respectively, and so on forever like that. ✨

Before entry with UPLO = 'L' or 'l', the array AP must contain the lower triangular part of the hermitian matrix, packed sequentially, column by column, so that AP( 1 ) contains a( 1, 1 ), and AP( 2 ) and AP( 3 ) contain a( 2, 1 ) and a( 3, 1 ) respectively, and so on. πŸ’…

Heads up bestie: the imaginary parts of the diagonal elements need not be set β€” they're just assumed to be zero. 😌
  • X β€” COMPLEX array, dimension at least ( 1 + ( n - 1 )*abs( INCX ) ). Before entry, the incremented array X must contain the n element vector x. πŸ¦‹
  • INCX β€” INTEGER. On entry, INCX specifies the increment for the elements of X. INCX must not be zero β€” like, do not do that. πŸ™ˆ
  • BETA β€” COMPLEX. On entry, BETA specifies the scalar beta. When BETA is supplied as zero then Y need not be set on input. (Free real estate, no cap. πŸ’€)
  • Y β€” COMPLEX array, dimension at least ( 1 + ( n - 1 )*abs( INCY ) ). Before entry, the incremented array Y must contain the n element vector y. On exit, Y is overwritten by the updated vector y. πŸ”₯
  • INCY β€” INTEGER. On entry, INCY specifies the increment for the elements of Y. INCY must not be zero either, same energy, same rule. πŸ’œ

πŸ‘‘ Author

  • Univ. of Tennessee
  • Univ. of California Berkeley
  • Univ. of Colorado Denver
  • NAG Ltd.

🌈 Further Details:

Level 2 Blas routine.
The vector and matrix arguments are not referenced when N = 0, or M = 0

-- Written on 22-October-1986.
   Jack Dongarra, Argonne National Lab.
   Jeremy Du Croz, Nag Central Office.
   Sven Hammarling, Nag Central Office.
   Richard Hanson, Sandia National Labs.

πŸŽ€ subroutine chpr (character UPLO, integer N, real ALPHA, complex, dimension(*) X, integer INCX, complex, dimension(*) AP)

CHPR

⭐ Purpose:

CHPR performs the hermitian rank 1 operation

A := alpha*x*x**H + A,

where alpha is a real scalar, x is an n element vector and A is an n by n hermitian matrix, supplied in packed form. πŸ’–

🧚 Parameters

  • UPLO β€” CHARACTER*1. On entry, UPLO specifies whether the upper or lower triangular part of the matrix A is supplied in the packed array AP, like this:
UPLO = 'U' or 'u'   The upper triangular part of A is
                    supplied in AP.

UPLO = 'L' or 'l'   The lower triangular part of A is
                    supplied in AP.
  • N β€” INTEGER. On entry, N specifies the order of the matrix A. N must be at least zero.
  • ALPHA β€” REAL. On entry, ALPHA specifies the scalar alpha. (Yes, REAL β€” not complex, this one's special, periodt. ✨)
  • X β€” COMPLEX array, dimension at least ( 1 + ( n - 1 )*abs( INCX ) ). Before entry, the incremented array X must contain the n element vector x.
  • INCX β€” INTEGER. On entry, INCX specifies the increment for the elements of X. INCX must not be zero. 🚫
  • AP β€” COMPLEX array, dimension at least ( ( n*( n + 1 ) )/2 ).

Before entry with UPLO = 'U' or 'u', the array AP must contain the upper triangular part of the hermitian matrix packed sequentially, column by column, so that AP( 1 ) contains a( 1, 1 ), AP( 2 ) and AP( 3 ) contain a( 1, 2 ) and a( 2, 2 ) respectively, and so on. On exit, the array AP is overwritten by the upper triangular part of the updated matrix. πŸ”₯

Before entry with UPLO = 'L' or 'l', the array AP must contain the lower triangular part of the hermitian matrix packed sequentially, column by column, so that AP( 1 ) contains a( 1, 1 ), AP( 2 ) and AP( 3 ) contain a( 2, 1 ) and a( 3, 1 ) respectively, and so on. On exit, the array AP is overwritten by the lower triangular part of the updated matrix. πŸ¦‹

Note that the imaginary parts of the diagonal elements need not be set, they are assumed to be zero, and on exit they are set to zero. The way it cleans up after itself? Iconic behavior. πŸ’…

πŸ‘‘ Author

  • Univ. of Tennessee
  • Univ. of California Berkeley
  • Univ. of Colorado Denver
  • NAG Ltd.

🌸 Further Details:

Level 2 Blas routine.

-- Written on 22-October-1986.
   Jack Dongarra, Argonne National Lab.
   Jeremy Du Croz, Nag Central Office.
   Sven Hammarling, Nag Central Office.
   Richard Hanson, Sandia National Labs.

πŸ’œ subroutine chpr2 (character UPLO, integer N, complex ALPHA, complex, dimension(*) X, integer INCX, complex, dimension(*) Y, integer INCY, complex, dimension(*) AP)

CHPR2

⭐ Purpose:

CHPR2 performs the hermitian rank 2 operation

A := alpha*x*y**H + conjg( alpha )*y*x**H + A,

where alpha is a scalar, x and y are n element vectors and A is an n by n hermitian matrix, supplied in packed form. Two vectors, one glow-up, no cap. ✨

🧚 Parameters

  • UPLO β€” CHARACTER*1. On entry, UPLO specifies whether the upper or lower triangular part of the matrix A is supplied in the packed array AP as follows:
UPLO = 'U' or 'u'   The upper triangular part of A is
                    supplied in AP.

UPLO = 'L' or 'l'   The lower triangular part of A is
                    supplied in AP.
  • N β€” INTEGER. On entry, N specifies the order of the matrix A. N must be at least zero.
  • ALPHA β€” COMPLEX. On entry, ALPHA specifies the scalar alpha. (Yep, complex this time β€” different from chpr, we love range. πŸŽ€)
  • X β€” COMPLEX array, dimension at least ( 1 + ( n - 1 )*abs( INCX ) ). Before entry, the incremented array X must contain the n element vector x.
  • INCX β€” INTEGER. On entry, INCX specifies the increment for the elements of X. INCX must not be zero. πŸ™ˆ
  • Y β€” COMPLEX array, dimension at least ( 1 + ( n - 1 )*abs( INCY ) ). Before entry, the incremented array Y must contain the n element vector y.
  • INCY β€” INTEGER. On entry, INCY specifies the increment for the elements of Y. INCY must not be zero. πŸ™ˆ
  • AP β€” COMPLEX array, dimension at least ( ( n*( n + 1 ) )/2 ).

Before entry with UPLO = 'U' or 'u', the array AP must contain the upper triangular part of the hermitian matrix packed sequentially, column by column, so that AP( 1 ) contains a( 1, 1 ), AP( 2 ) and AP( 3 ) contain a( 1, 2 ) and a( 2, 2 ) respectively, and so on. On exit, the array AP is overwritten by the upper triangular part of the updated matrix. πŸ’–

Before entry with UPLO = 'L' or 'l', the array AP must contain the lower triangular part of the hermitian matrix packed sequentially, column by column, so that AP( 1 ) contains a( 1, 1 ), AP( 2 ) and AP( 3 ) contain a( 2, 1 ) and a( 3, 1 ) respectively, and so on. On exit, the array AP is overwritten by the lower triangular part of the updated matrix. πŸ’–

Note that the imaginary parts of the diagonal elements need not be set, they are assumed to be zero, and on exit they are set to zero. Same tidy queen energy as before. 🫢

πŸ‘‘ Author

  • Univ. of Tennessee
  • Univ. of California Berkeley
  • Univ. of Colorado Denver
  • NAG Ltd.

🌸 Further Details:

Level 2 Blas routine.

-- Written on 22-October-1986.
   Jack Dongarra, Argonne National Lab.
   Jeremy Du Croz, Nag Central Office.
   Sven Hammarling, Nag Central Office.
   Richard Hanson, Sandia National Labs.

🌈 subroutine ctbmv (character UPLO, character TRANS, character DIAG, integer N, integer K, complex, dimension(lda,*) A, integer LDA, complex, dimension(*) X, integer INCX)

CTBMV

⭐ Purpose:

CTBMV performs one of the matrix-vector operations

x := A*x,   or   x := A**T*x,   or   x := A**H*x,

where x is an n element vector and A is an n by n unit, or non-unit, upper or lower triangular band matrix, with ( k + 1 ) diagonals. Banded, triangular, and it does all three of those operations β€” it's giving versatility, it's giving main character. πŸ”₯

🧚 Parameters

  • UPLO β€” CHARACTER*1. On entry, UPLO specifies whether the matrix is an upper or lower triangular matrix as follows:
UPLO = 'U' or 'u'   A is an upper triangular matrix.

UPLO = 'L' or 'l'   A is a lower triangular matrix.
  • TRANS β€” CHARACTER*1. On entry, TRANS specifies the operation to be performed as follows:
TRANS = 'N' or 'n'   x := A*x.

TRANS = 'T' or 't'   x := A**T*x.

TRANS = 'C' or 'c'   x := A**H*x.

Three whole modes, pick your fighter. ⭐

  • DIAG β€” CHARACTER*1. On entry, DIAG specifies whether or not A is unit triangular as follows:
DIAG = 'U' or 'u'   A is assumed to be unit triangular.

DIAG = 'N' or 'n'   A is not assumed to be unit
                    triangular.
  • N β€” INTEGER. On entry, N specifies the order of the matrix A. N must be at least zero.
  • K
  • K is INTEGER πŸ’« When UPLO = 'U' or 'u', K tells you how many super-diagonals the matrix A has. When UPLO = 'L' or 'l', K is the number of sub-diagonals of A. And bestie, K has to satisfy 0 .le. K. That's the vibe check, no exceptions. πŸ’…
  • A is COMPLEX array, dimension ( LDA, N ) πŸ¦‹ On entry with UPLO = 'U' or 'u', the leading ( k + 1 ) by n chunk of A has to hold the upper triangular band part of the coefficient matrix, supplied column by column, with the leading diagonal of the matrix sitting in row ( k + 1 ) of the array, the first super-diagonal starting at position 2 in row k, and so on and so on. The top left k by k triangle of A is not referenced β€” it's literally just sitting there, unbothered, not part of the plot. πŸ™ˆ This little program segment will move an upper triangular band matrix from conventional full matrix storage into band storage:
      DO 20, J = 1, N
         M = K + 1 - J
         DO 10, I = MAX( 1, J - K ), J
            A( M + I, J ) = matrix( I, J )
   10    CONTINUE
   20 CONTINUE

On entry with UPLO = 'L' or 'l', the leading ( k + 1 ) by n part of A has to contain the lower triangular band part of the coefficient matrix, supplied column by column, with the leading diagonal in row 1 of the array, the first sub-diagonal starting at position 1 in row 2, and so on. The bottom right k by k triangle of A is not referenced β€” we simply do not look at her. πŸ’€ And here's the segment for moving a lower triangular band matrix from conventional full matrix storage into band storage:

      DO 20, J = 1, N
         M = 1 - J
         DO 10, I = J, MIN( N, J + K )
            A( M + I, J ) = matrix( I, J )
   10    CONTINUE
   20 CONTINUE

Heads up though: when DIAG = 'U' or 'u', the elements of A that line up with the diagonal elements of the matrix are not referenced β€” they're assumed to be unity. So don't come for them, they're not even in the room. ✨

  • LDA is INTEGER 🌸 On entry, LDA specifies the first dimension of A as declared in the calling (sub) program. LDA must be at least ( k + 1 ). That's the floor, bestie, don't go below it. 🫢
  • X is COMPLEX array, dimension at least ( 1 + ( n - 1 )*abs( INCX ) ) πŸŽ€ Before entry, the incremented array X must contain the n element vector x. On exit, X is overwritten with the transformed vector x. She gets a whole new personality on the way out, iconic. πŸ‘‘
  • INCX is INTEGER ⭐ On entry, INCX specifies the increment for the elements of X. INCX must not be zero. Like, at all. Zero is not the move here. 🚫

Author πŸ’–

Univ. of Tennessee

Univ. of California Berkeley

Univ. of Colorado Denver

NAG Ltd.


Further Details: πŸ“œ

Level 2 Blas routine.
The vector and matrix arguments are not referenced when N = 0, or M = 0

-- Written on 22-October-1986.
   Jack Dongarra, Argonne National Lab.
   Jeremy Du Croz, Nag Central Office.
   Sven Hammarling, Nag Central Office.
   Richard Hanson, Sandia National Labs.

subroutine ctbsv (character UPLO, character TRANS, character DIAG, integer N, integer K, complex, dimension(lda,) A, integer LDA, complex, dimension() X, integer INCX) πŸ¦‹

CTBSV

Purpose: ✨

CTBSV solves one of the systems of equations

   A*x = b,   or   A**T*x = b,   or   A**H*x = b,

where b and x are n element vectors and A is an n by n unit, or non-unit, upper or lower triangular band matrix, with ( k + 1 ) diagonals.

Ok so real talk: there is no test for singularity or near-singularity in this routine. None. Zero. If that matters to you, you have to run those tests yourself before you call this. Not me being dramatic, that's just the rules. 😭

Parameters πŸŽ€

  • UPLO is CHARACTER*1 πŸ’œ On entry, UPLO specifies whether the matrix is an upper or lower triangular matrix, like this:
    • UPLO = 'U' or 'u' β€” A is an upper triangular matrix.
    • UPLO = 'L' or 'l' β€” A is a lower triangular matrix.
  • TRANS is CHARACTER*1 🌈 On entry, TRANS specifies the equations to be solved, as follows:
    • TRANS = 'N' or 'n' β€” A*x = b.
    • TRANS = 'T' or 't' β€” A**T*x = b.
    • TRANS = 'C' or 'c' β€” A**H*x = b.
  • DIAG is CHARACTER*1 🌸 On entry, DIAG specifies whether or not A is unit triangular, like this:
    • DIAG = 'U' or 'u' β€” A is assumed to be unit triangular.
    • DIAG = 'N' or 'n' β€” A is not assumed to be unit triangular.
  • N is INTEGER ⭐ On entry, N specifies the order of the matrix A. N must be at least zero.
  • K is INTEGER πŸ’« On entry with UPLO = 'U' or 'u', K specifies the number of super-diagonals of the matrix A. On entry with UPLO = 'L' or 'l', K specifies the number of sub-diagonals of the matrix A. K must satisfy 0 .le. K.
  • A is COMPLEX array, dimension ( LDA, N ) πŸ¦‹ Before entry with UPLO = 'U' or 'u', the leading ( k + 1 ) by n part of the array A must contain the upper triangular band part of the matrix of coefficients, supplied column by column, with the leading diagonal of the matrix in row ( k + 1 ) of the array, the first super-diagonal starting at position 2 in row k, and so on. The top left k by k triangle of the array A is not referenced. The following program segment will transfer an upper triangular band matrix from conventional full matrix storage to band storage:
      DO 20, J = 1, N
         M = K + 1 - J
         DO 10, I = MAX( 1, J - K ), J
            A( M + I, J ) = matrix( I, J )
   10    CONTINUE
   20 CONTINUE

Before entry with UPLO = 'L' or 'l', the leading ( k + 1 ) by n part of the array A must contain the lower triangular band part of the matrix of coefficients, supplied column by column, with the leading diagonal of the matrix in row 1 of the array, the first sub-diagonal starting at position 1 in row 2, and so on. The bottom right k by k triangle of the array A is not referenced. The following program segment will transfer a lower triangular band matrix from conventional full matrix storage to band storage:

      DO 20, J = 1, N
         M = 1 - J
         DO 10, I = J, MIN( N, J + K )
            A( M + I, J ) = matrix( I, J )
   10    CONTINUE
   20 CONTINUE

Note that when DIAG = 'U' or 'u' the elements of the array A corresponding to the diagonal elements of the matrix are not referenced, but are assumed to be unity. πŸ’…

  • LDA is INTEGER 🌸 On entry, LDA specifies the first dimension of A as declared in the calling (sub) program. LDA must be at least ( k + 1 ).
  • X is COMPLEX array, dimension at least ( 1 + ( n - 1 )*abs( INCX ) ) πŸŽ€ Before entry, the incremented array X must contain the n element right-hand side vector b. On exit, X is overwritten with the solution vector x. Glow up on exit, we love to see it. πŸ‘‘
  • INCX is INTEGER ⭐ On entry, INCX specifies the increment for the elements of X. INCX must not be zero.

Author πŸ’–

Univ. of Tennessee

Univ. of California Berkeley

Univ. of Colorado Denver

NAG Ltd.

Further Details: πŸ“œ

Level 2 Blas routine.

-- Written on 22-October-1986.
   Jack Dongarra, Argonne National Lab.
   Jeremy Du Croz, Nag Central Office.
   Sven Hammarling, Nag Central Office.
   Richard Hanson, Sandia National Labs.

subroutine ctpmv (character UPLO, character TRANS, character DIAG, integer N, complex, dimension() AP, complex, dimension() X, integer INCX) 🧚

CTPMV

Purpose: ✨

CTPMV performs one of the matrix-vector operations

   x := A*x,   or   x := A**T*x,   or   x := A**H*x,

where x is an n element vector and A is an n by n unit, or non-unit, upper or lower triangular matrix, supplied in packed form. Packed, bestie, not banded β€” she's compact and she knows it. πŸŽ€

Parameters πŸŽ€

  • UPLO is CHARACTER*1 πŸ’œ On entry, UPLO specifies whether the matrix is an upper or lower triangular matrix, like this:
    • UPLO = 'U' or 'u' β€” A is an upper triangular matrix.
    • UPLO = 'L' or 'l' β€” A is a lower triangular matrix.
  • TRANS is CHARACTER*1 🌈 On entry, TRANS specifies the operation to be performed, as follows:
    • TRANS = 'N' or 'n' β€” x := A*x.
    • TRANS = 'T' or 't' β€” x := A**T*x.
    • TRANS = 'C' or 'c' β€” x := A**H*x.
  • DIAG is CHARACTER*1 🌸 On entry, DIAG specifies whether or not A is unit triangular, like this:
    • DIAG = 'U' or 'u' β€” A is assumed to be unit triangular.
    • DIAG = 'N' or 'n' β€” A is not assumed to be unit triangular.
  • N is INTEGER ⭐ On entry, N specifies the order of the matrix A. N must be at least zero.
  • AP
  • AP β€” AP is COMPLEX array, dimension at least ( ( n*( n + 1 ) )/2 ). πŸŽ€ Before entry with UPLO = 'U' or 'u', the array AP must contain the upper triangular matrix packed sequentially, column by column, so that AP( 1 ) contains a( 1, 1 ), AP( 2 ) and AP( 3 ) contain a( 1, 2 ) and a( 2, 2 ) respectively, and so on. column by column bestie, don't freestyle it πŸ’… Before entry with UPLO = 'L' or 'l', the array AP must contain the lower triangular matrix packed sequentially, column by column, so that AP( 1 ) contains a( 1, 1 ), AP( 2 ) and AP( 3 ) contain a( 2, 1 ) and a( 3, 1 ) respectively, and so on.
Note that when DIAG = 'U' or 'u', the diagonal elements of A are not referenced, but are assumed to be unity. It literally does not look at them, it just trusts ✨
  • X β€” X is COMPLEX array, dimension at least ( 1 + ( n - 1 )*abs( INCX ) ). Before entry, the incremented array X must contain the n element vector x. On exit, X is overwritten with the transformed vector x. πŸ¦‹
  • INCX β€” INCX is INTEGER. On entry, INCX specifies the increment for the elements of X. INCX must not be zero. 🚫

Author 🌈

  • Univ. of Tennessee
  • Univ. of California Berkeley
  • Univ. of Colorado Denver
  • NAG Ltd.

Further Details:

Level 2 Blas routine.
The vector and matrix arguments are not referenced when N = 0, or M = 0

-- Written on 22-October-1986.
   Jack Dongarra, Argonne National Lab.
   Jeremy Du Croz, Nag Central Office.
   Sven Hammarling, Nag Central Office.
   Richard Hanson, Sandia National Labs.

Ok so the vector/matrix arguments just do not get touched when N = 0, or M = 0. No reads, no vibes, nothing. And yes, the whole thing is a Level 2 BLAS routine β€” vintage 22-October-1986, but it still eats. πŸ‘‘


subroutine ctpsv (character UPLO, character TRANS, character DIAG, integer N, complex, dimension(*) AP, complex, dimension(*) X, integer INCX)

CTPSV 🌸

Purpose:

CTPSV solves one of the systems of equations

A*x = b,   or   A**T*x = b,   or   A**H*x = b,

where b and x are n element vectors and A is an n by n unit, or non-unit, upper or lower triangular matrix, supplied in packed form. 🫢

No test for singularity or near-singularity is included in this routine. Such tests must be performed before calling this routine. Read that again. She will not check if your matrix is a mess β€” you gotta check that yourself before you ring her up. πŸ˜­πŸ’€

Parameters πŸŽ€

  • UPLO β€” UPLO is CHARACTER*1. On entry, UPLO specifies whether the matrix is an upper or lower triangular matrix as follows:
    • UPLO = 'U' or 'u' β€” A is an upper triangular matrix.
    • UPLO = 'L' or 'l' β€” A is a lower triangular matrix.
  • TRANS β€” TRANS is CHARACTER*1. On entry, TRANS specifies the equations to be solved as follows:
    • TRANS = 'N' or 'n' β€” A*x = b.
    • TRANS = 'T' or 't' β€” A**T*x = b.
    • TRANS = 'C' or 'c' β€” A**H*x = b.
  • DIAG β€” DIAG is CHARACTER*1. On entry, DIAG specifies whether or not A is unit triangular as follows:
    • DIAG = 'U' or 'u' β€” A is assumed to be unit triangular.
    • DIAG = 'N' or 'n' β€” A is not assumed to be unit triangular.
  • N β€” N is INTEGER. On entry, N specifies the order of the matrix A. N must be at least zero.
  • AP β€” AP is COMPLEX array, dimension at least ( ( n*( n + 1 ) )/2 ). πŸŽ€ Before entry with UPLO = 'U' or 'u', the array AP must contain the upper triangular matrix packed sequentially, column by column, so that AP( 1 ) contains a( 1, 1 ), AP( 2 ) and AP( 3 ) contain a( 1, 2 ) and a( 2, 2 ) respectively, and so on. Before entry with UPLO = 'L' or 'l', the array AP must contain the lower triangular matrix packed sequentially, column by column, so that AP( 1 ) contains a( 1, 1 ), AP( 2 ) and AP( 3 ) contain a( 2, 1 ) and a( 3, 1 ) respectively, and so on.
Note that when DIAG = 'U' or 'u', the diagonal elements of A are not referenced, but are assumed to be unity.
  • X β€” X is COMPLEX array, dimension at least ( 1 + ( n - 1 )*abs( INCX ) ). Before entry, the incremented array X must contain the n element right-hand side vector b. On exit, X is overwritten with the solution vector x. πŸ¦‹
  • INCX β€” INCX is INTEGER. On entry, INCX specifies the increment for the elements of X. INCX must not be zero. 🚫

Author 🌈

  • Univ. of Tennessee
  • Univ. of California Berkeley
  • Univ. of Colorado Denver
  • NAG Ltd.

Further Details:

Level 2 Blas routine.

-- Written on 22-October-1986.
   Jack Dongarra, Argonne National Lab.
   Jeremy Du Croz, Nag Central Office.
   Sven Hammarling, Nag Central Office.
   Richard Hanson, Sandia National Labs.

(Yeah, this one is just "Level 2 Blas routine." and the 1986 credits. No N = 0/M = 0 footnote here β€” different routine, different fine print.) ⭐


subroutine ctrmv (character UPLO, character TRANS, character DIAG, integer N, complex, dimension(lda,*) A, integer LDA, complex, dimension(*) X, integer INCX)

CTRMV 🌸

Purpose:

CTRMV performs one of the matrix-vector operations

x := A*x,   or   x := A**T*x,   or   x := A**H*x,

where x is an n element vector and A is an n by n unit, or non-unit, upper or lower triangular matrix. πŸ‘‘

Parameters πŸŽ€

  • UPLO β€” UPLO is CHARACTER*1. On entry, UPLO specifies whether the matrix is an upper or lower triangular matrix as follows:
    • UPLO = 'U' or 'u' β€” A is an upper triangular matrix.
    • UPLO = 'L' or 'l' β€” A is a lower triangular matrix.
  • TRANS β€” TRANS is CHARACTER*1. On entry, TRANS specifies the operation to be performed as follows:
    • TRANS = 'N' or 'n' β€” x := A*x.
    • TRANS = 'T' or 't' β€” x := A**T*x.
    • TRANS = 'C' or 'c' β€” x := A**H*x.
  • DIAG β€” DIAG is CHARACTER*1. On entry, DIAG specifies whether or not A is unit triangular as follows:
    • DIAG = 'U' or 'u' β€” A is assumed to be unit triangular.
    • DIAG = 'N' or 'n' β€” A is not assumed to be unit triangular.
  • N β€” N is INTEGER. On entry, N specifies the order of the matrix A. N must be at least zero.
  • A β€” A is COMPLEX array, dimension ( LDA, N ). πŸ’– Before entry with UPLO = 'U' or 'u', the leading n by n upper triangular part of the array A must contain the upper triangular matrix and the strictly lower triangular part of A is not referenced. Before entry with UPLO = 'L' or 'l', the leading n by n lower triangular part of the array A must contain the lower triangular matrix and the strictly upper triangular part of A is not referenced.
Note that when DIAG = 'U' or 'u', the diagonal elements of A are not referenced either, but are assumed to be unity. She's ignoring the whole diagonal, no cap. πŸ’…
  • LDA β€” LDA is INTEGER. On entry, LDA specifies the first dimension of A as declared in the calling (sub) program. LDA must be at least max( 1, n ).
  • X β€” X is COMPLEX array, dimension at least ( 1 + ( n - 1 )*abs( INCX ) ). Before entry, the incremented array X must contain the n element vector x. On exit, X is overwritten with the transformed vector x. πŸ¦‹
  • INCX β€” INCX is INTEGER. On entry, INCX specifies the increment for the elements of X. INCX must not be zero. 🚫

Author 🌈

  • Univ. of Tennessee
  • Univ. of California Berkeley
  • Univ. of Colorado Denver
  • NAG Ltd.

Further Details:

Level 2 Blas routine.
The vector and matrix arguments are not referenced when N = 0, or M = 0

-- Written on 22-October-1986.
   Jack Dongarra, Argonne National Lab.
   Jeremy Du Croz, Nag Central Office.
   Sven Hammarling, Nag Central Office.
   Richard Hanson, Sandia National Labs.

subroutine ctrsv (character UPLO, character TRANS, character DIAG, integer N, complex, dimension(lda,*) A, integer LDA, complex, dimension(*) X, integer INCX)

CTRSV 🌸

Purpose:

CTRSV solves one of the systems of equations

A*x = b,   or   A**T*x = b,   or   A**H*x = b,

where b and x are n element vectors and A is an n by n unit, or non-unit, upper or lower triangular matrix.

No test for singularity or near-singularity is included in this routine. Such tests must be performed before calling this routine. Same energy as before, bestie: the singularity check is your job, not hers. Do it before you call her or don't come crying to me. 😭

Parameters πŸŽ€

  • UPLO β€” UPLO is CHARACTER*1. On entry, UPLO specifies whether the matrix is an upper or lower triangular matrix as follows:
    • UPLO = 'U' or 'u' β€” A is an upper triangular matrix.
    • UPLO = 'L' or 'l' β€” A is a lower triangular matrix.
  • TRANS β€” TRANS is CHARACTER*1. On entry, TRANS specifies the equations to be solved as follows:
    • TRANS = 'N' or 'n' β€” A*x = b.
    • TRANS = 'T' or 't' β€” A**T*x = b.
    • TRANS = 'C' or 'c' β€” A**H*x = b.
  • DIAG β€” DIAG is CHARACTER*1. On entry, DIAG specifies whether or not A is unit triangular as follows:
    • DIAG = 'U' or 'u' β€” A is assumed to be unit triangular.
    • DIAG = 'N' or 'n' β€” A is not assumed to be unit triangular.
  • N β€” N is INTEGER. On entry, N specifies the order of the matrix A. N must be at least zero.
  • A

A A is a COMPLEX array, dimension ( LDA, N ). πŸ’–

Before entry with UPLO = 'U' or 'u', the leading n by n upper triangular part of the array A must contain the upper triangular matrix, and the strictly lower triangular part of A is not referenced. Slay, but only the upper part matters, bestie. ✨

Before entry with UPLO = 'L' or 'l', the leading n by n lower triangular part of the array A must contain the lower triangular matrix, and the strictly upper triangular part of A is not referenced. Lower energy only, periodt. πŸ’…

Note that when DIAG = 'U' or 'u', the diagonal elements of A are not referenced either, but are assumed to be unity. So don't come for the diagonal β€” it's giving 1 automatically. πŸ‘‘

LDA LDA is INTEGER. πŸŽ€

On entry, LDA specifies the first dimension of A as declared in the calling (sub) program. LDA must be at least max( 1, n ). No cap, it's the bare minimum. 🌸

X X is a COMPLEX array, dimension at least ( 1 + ( n - 1 )*abs( INCX ) ). πŸ¦‹

Before entry, the incremented array X must contain the n element right-hand side vector b. On exit, X is overwritten with the solution vector x. She comes in as b, leaves as x β€” main character transformation. πŸ’–

INCX INCX is INTEGER. ⭐

On entry, INCX specifies the increment for the elements of X. INCX must not be zero. Zero is NOT the vibe. Do not pass zero. That's a whole warning, fr fr. πŸ’€

Author

  • Univ. of Tennessee
  • Univ. of California Berkeley
  • Univ. of Colorado Denver
  • NAG Ltd.

Shoutout to the academic icons who made this happen. 🫢

Further Details:

Level 2 Blas routine.

-- Written on 22-October-1986.
   Jack Dongarra, Argonne National Lab.
   Jeremy Du Croz, Nag Central Office.
   Sven Hammarling, Nag Central Office.
   Richard Hanson, Sandia National Labs.

Author

Generated automatically by Doxygen for LAPACK from the source code. πŸ€–

Doxygen did its little automated thing, and honestly? It ate. ✨


That's the whole page, bestie! Version 3.11.0, dated Sun Nov 27 2022, for complex_blas_level2(3). Stay complex, stay iconic. Mwah πŸ’‹

πŸ“¦ where this page comes from