SRC/ctfsm.f(3)
okay bestie, welcome to SRC/ctfsm.f(3) β the Library Functions Manual page for CTFSM, and yes we are getting into the RFP-format triangular-matrix equation tea βπ
.
π NAME
SRC/ctfsm.f β that's the whole name, no extra garnish. This page is literally here to introduce the ctfsm subroutine. π«Ά
β¨ SYNOPSIS
π§ Functions/Subroutines
Here's the signature, bestie β keep it exactly as it is:
subroutine ctfsm (transr, side, uplo, trans, diag, m, n, alpha, a, b,
ldb)
CTFSM solves a matrix equation (one operand is a triangular matrix in RFP format). π
π Function/Subroutine Documentation
πΈ subroutine ctfsm
subroutine ctfsm (character transr, character side, character uplo,
character trans, character diag, integer m, integer n, complex alpha,
complex, dimension( 0: * ) a, complex, dimension( 0: ldb-1, 0: * ) b,
integer ldb)
CTFSM solves a matrix equation (one operand is a triangular matrix in RFP format).
π― Purpose
Okay so this is a Level 3 BLAS like routine for A in RFP Format. π«Ά CTFSM solves the matrix equation
op( A )*X = alpha*B or X*op( A ) = alpha*B
where alpha is a scalar, X and B are m by n matrices, A is a unit, or non-unit, upper or lower triangular matrix and op( A ) is one of
op( A ) = A or op( A ) = A**H.
A is in Rectangular Full Packed (RFP) Format.
The matrix X is overwritten on B. π
π§Ύ Parameters
TRANSRβTRANSRisCHARACTER*1.= 'N':The Normal Form of RFP A is stored;= 'C':The Conjugate-transpose Form of RFP A is stored. Unchanged on exit.SIDEβSIDEisCHARACTER*1. On entry, SIDE specifies whetherop( A )appears on the left or right ofXas follows:SIDE = 'L' or 'l'βop( A )*X = alpha*B.SIDE = 'R' or 'r'βX*op( A ) = alpha*B.Unchanged on exit.UPLOβUPLOisCHARACTER*1. On entry, UPLO specifies whether the RFP matrixAcame from an upper or lower triangular matrix as follows:UPLO = 'U' or 'u'RFP A came from an upper triangular matrix.UPLO = 'L' or 'l'RFP A came from a lower triangular matrix. Unchanged on exit.TRANSβTRANSisCHARACTER*1. On entry, TRANS specifies the form ofop( A )to be used in the matrix multiplication as follows:TRANS = 'N' or 'n'βop( A ) = A.TRANS = 'C' or 'c'βop( A ) = conjg( A' ).Unchanged on exit.DIAGβDIAGisCHARACTER*1. On entry, DIAG specifies whether or not RFP 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. Unchanged on exit.MβMisINTEGER. On entry, M specifies the number of rows of B. M must be at least zero. Unchanged on exit.NβNisINTEGER. On entry, N specifies the number of columns of B. N must be at least zero. Unchanged on exit.ALPHAβALPHAisCOMPLEX. On entry, ALPHA specifies the scalar alpha. When alpha is zero then A is not referenced and B need not be set before entry. Unchanged on exit.AβAisCOMPLEXarray, dimension(NT).NT = N*(N+1)/2ifSIDE='R'andNT = M*(M+1)/2otherwise. On entry, the matrix A in RFP Format. RFP Format is described byTRANSR,UPLOandNas follows: IfTRANSR='N'then RFP A is(0:N,0:K-1)when N is even;K=N/2. RFP A is(0:N-1,0:K)when N is odd;K=N/2. IfTRANSR = 'C'then RFP is the Conjugate-transpose of RFP A as defined whenTRANSR = 'N'. The contents of RFP A are defined byUPLOas follows: IfUPLO = 'U'the RFP A contains theNTelements of upper packed A either in normal or conjugate-transpose Format. IfUPLO = 'L'the RFP A contains theNTelements of lower packed A either in normal or conjugate-transpose Format. The LDA of RFP A is(N+1)/2whenTRANSR = 'C'. WhenTRANSRis'N'the LDA isN+1when N is even and isNwhen is odd. See the Note below for more details. Unchanged on exit.BβBisCOMPLEXarray, dimension(LDB,N). Before entry, the leadingmbynpart of the array B must contain the right-hand side matrix B, and on exit is overwritten by the solution matrix X.LDBβLDBisINTEGER. On entry, LDB specifies the first dimension of B as declared in the calling (sub) program. LDB must be at leastmax( 1, m ). Unchanged on exit.
π«Ά Author
- Univ. of Tennessee
- Univ. of California Berkeley
- Univ. of Colorado Denver
- NAG Ltd.
π Further Details
Here's the Further Details block, preserved exactly (yes, !> and all) so you can vibe-check every packed-format diagram:
!>
!> We first consider Standard Packed Format when N is even.
!> We give an example where N = 6.
!>
!> AP is Upper AP is Lower
!>
!> 00 01 02 03 04 05 00
!> 11 12 13 14 15 10 11
!> 22 23 24 25 20 21 22
!> 33 34 35 30 31 32 33
!> 44 45 40 41 42 43 44
!> 55 50 51 52 53 54 55
!>
!>
!> Let TRANSR = 'N'. RFP holds AP as follows:
!> For UPLO = 'U' the upper trapezoid A(0:5,0:2) consists of the last
!> three columns of AP upper. The lower triangle A(4:6,0:2) consists of
!> conjugate-transpose of the first three columns of AP upper.
!> For UPLO = 'L' the lower trapezoid A(1:6,0:2) consists of the first
!> three columns of AP lower. The upper triangle A(0:2,0:2) consists of
!> conjugate-transpose of the last three columns of AP lower.
!> To denote conjugate we place -- above the element. This covers the
!> case N even and TRANSR = 'N'.
!>
!> RFP A RFP A
!>
!> -- -- --
!> 03 04 05 33 43 53
!> -- --
!> 13 14 15 00 44 54
!> --
!> 23 24 25 10 11 55
!>
!> 33 34 35 20 21 22
!> --
!> 00 44 45 30 31 32
!> -- --
!> 01 11 55 40 41 42
!> -- -- --
!> 02 12 22 50 51 52
!>
!> Now let TRANSR = 'C'. RFP A in both UPLO cases is just the conjugate-
!> transpose of RFP A above. One therefore gets:
!>
!>
!> RFP A RFP A
!>
!> -- -- -- -- -- -- -- -- -- --
!> 03 13 23 33 00 01 02 33 00 10 20 30 40 50
!> -- -- -- -- -- -- -- -- -- --
!> 04 14 24 34 44 11 12 43 44 11 21 31 41 51
!> -- -- -- -- -- -- -- -- -- --
!> 05 15 25 35 45 55 22 53 54 55 22 32 42 52
!>
!>
!> We next consider Standard Packed Format when N is odd.
!> We give an example where N = 5.
!>
!> AP is Upper AP is Lower
!>
!> 00 01 02 03 04 00
!> 11 12 13 14 10 11
!> 22 23 24 20 21 22
!> 33 34 30 31 32 33
!> 44 40 41 42 43 44
!>
!>
!> Let TRANSR = 'N'. RFP holds AP as follows:
!> For UPLO = 'U' the upper trapezoid A(0:4,0:2) consists of the last
!> three columns of AP upper. The lower triangle A(3:4,0:1) consists of
!> conjugate-transpose of the first two columns of AP upper.
!> For UPLO = 'L' the lower trapezoid A(0:4,0:2) consists of the first
!> three columns of AP lower. The upper triangle A(0:1,1:2) consists of
!> conjugate-transpose of the last two columns of AP lower.
!> To denote conjugate we place -- above the element. This covers the
!> case N odd and TRANSR = 'N'.
!>
!> RFP A RFP A
!>
!> -- --
!> 02 03 04 00 33 43
!> --
!> 12 13 14 10 11 44
!>
!> 22 23 24 20 21 22
!> --
!> 00 33 34 30 31 32
!> -- --
!> 01 11 44 40 41 42
!>
!> Now let TRANSR = 'C'. RFP A in both UPLO cases is just the conjugate-
!> transpose of RFP A above. One therefore gets:
!>
!>
!> RFP A RFP A
!>
!> -- -- -- -- -- -- -- -- --
!> 02 12 22 00 01 00 10 20 30 40 50
!> -- -- -- -- -- -- -- -- --
!> 03 13 23 33 11 33 11 21 31 41 51
!> -- -- -- -- -- -- -- -- --
!> 04 14 24 34 44 43 44 22 32 42 52
!>
Definition at line 297 of file ctfsm.f. π§
π Author
Generated automatically by Doxygen for LAPACK from the source code.
okay that's the whole page, bestie. This cute little doc is LAPACK Version 3.12.0, from SRC/ctfsm.f(3) β go forth and solve those RFP triangular matrix equations. π
β¨π¦
π¦ where this page comes from
- arch rolling: lapack-doc 3.12.1-2 Β· custom
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms