home *** CD-ROM | disk | FTP | other *** search
Text File | 1994-08-02 | 188.1 KB | 5,480 lines |
- Abstract from:
- PSCDOC:BLAS.DOC 10 February 1991
- Downloaded from anonymous@a.psc.edu, ftp server.
-
- BLAS or Basic Linear Algebra Subprograms, began as a small core library
- of linear algebra utilities, proposed in an article in the ACM TOMS.
- Shortly thereafter, a subset of the BLAS was included in LINPACK, and
- then in the Cray SCILIB. New, higher level routines (BLAS 2 and BLAS 3)
- have been added to the library and these routines are now also included
- in the Cray SCILIB. The BLAS represent a kernel library which can be
- highly optimized for a specific machine. Almost any scientific code
- can be modified to use the BLAS.
-
- The BLAS are ACM TOMS algorithm 539 and 656.
-
- Versions of the BLAS are included in many other libraries.
-
- Reference: Lawson, Hanson, Kincaid and Krogh,
- Basic Linear Algebra Subprograms for FORTRAN usage,
- ACM Transactions on Mathematical Software,
- Volume 5, pages 308-323, 1979.
-
- Coleman and Van Loan,
- Handbook for Matrix Computations,
- Society for Industrial and Applied Mathematics,
- 3600 University City Science Center
- Philadelphia, PA 19104-2688
-
- Level 1 BLAS summary:
-
-
- (IA is an integer scalar, IX and IY are integer vectors)
- (SA, SC, SS are real scalars, SX and SY are real vectors)
- (CA, CC, CS are complex scalars, CX and CY are complex vectors)
- Note: For complex vectors, the "absolute value" employed is
- the "L1-norm". ABS(CX)=ABS(REAL(CX)) + ABS(AIMAG(CX)). This
- is a norm, but it is distinct from the Euclidean or "L2-norm".
-
- CAXPY CY:=CY+CA*CX
- CCOPY CY:=CX
- CDOTC CDOTC := SUM CONJUGATE(CX) * CY (conjugated vector dot product)
- CDOTU CDOTU := SUM CX * CY (unconjugated vector dot product)
- CINIT CX:=CA, sets a vector to a scalar value.
- CMACH CMACH:= one of three real machine dependent numbers.
- CROT Applies a general complex Given's rotation to complex vectors.
- CROTG Generate a hermitian Given's rotation.
- CSCAL CX:=CA*CX (complex multiplier)
- CSROT Applies a real Given's rotation to complex vectors.
- CSSCAL CX:=SA*CX (real multiplier).
- CSWAP Interchange vectors CX and CY.
- CVSAME .TRUE. if CX=CY for all indices.
-
- ICAMAX Return index of maximum "absolute value" in CX.
- ICAMIN Return index of minimum "absolute value" in CX.
- ICOPY IY:=IX
- IINIT IX:=IA
- ISAMAX Return index of maximum absolute value in SX.
- ISAMIN Return index of minimum absolute value in SX.
- ISMAX Return index of maximum value in SX
- ISMIN Return index of minimum value in SX.
- IVSAME .TRUE. if IY=IX for all indices.
-
- SAMAX SAMAX := maximum absolute value of entries in SX.
- SAMIN SAMIN := minimum absolute value of entries in SX.
- SASUM SASUM:=sum of absolute values of SX.
- SAXPY SY:=SY+SA*SX
- SAXPYX SX:=SY+SA*SX
- SCAMAX SCAMAX=maximum "absolute value" of entries in CX.
- SCAMIN SCAMIN=minimum "absolute value" of entries in CX.
- SCASUM SCASUM:=SUM(I=1 to N) ABS(REAL(CX(I)))+ABS(AIMAG(CX(I))).
- SCNRM2 SCNRM2:= square root of sum of magnitudes of entries of CX.
- SCOPY SY:=SX
- SDOT SDOT := SUM SX * SY (vector dot product)
- SDSDOT SDSDOT := SUM SX * SY (accumulated double precision, returned single)
- SINIT SX:=SA, sets a vector to a constant.
- SMACH SMACH:=one of three machine dependent number.
- SMAX SMAX := maximum entry in SX.
- SMIN SMIN := minimum entry in SX.
- SNRM2 SNRM2 := square root of sum of SX(I)**2
- SROT Apply Given's rotation.
- SROTG Generate Given's rotation.
- SROTM Apply a modified Given's rotation.
- SROTMG Generate a modified Given's rotation.
- SSCAL SX:=SA*SX.
- SSUM SSUM:=sum of values of SX.
- SSWAP Interchange vectors SX and SY.
- SVCAL SY:=SA*SX.
- SVSAME .TRUE. if SY=SX for all indices.
-
-
- Level 2 BLAS summary:
-
-
- (SX, SY real vectors, alpha and beta real scalars, A a real matrix)
- (In most cases, either A or TRANSPOSE(A) may be used).
-
- SGBMV SY:=alpha*A*SX+beta*SY, A a band matrix.
- SGEMV SY:=alpha*A*SX+beta*SY, A a rectangular matrix.
- SGER A:=A+alpha*SX*TRANSPOSE(SY), rank 1 update, A a rectangular matrix.
- SMXPY SY:=SY+A*SX
- SSBMV SY:=alpha*A*SX+beta*SY, A a symmetric band matrix.
- SSPMV SY:=alpha*A*SX+beta*SY, A a packed symmetric matrix.
- SSPR A:=A+alpha*SX*TRANSPOSE(SX), A a packed symmetric matrix.
- SSPR2 A:=A+alpha*SX*TRANSPOSE(SY)+alpha*SY*TRANSPOSE(SX), A packed symmetric.
- SSYMV SY:=alpha*A*SX+beta*SY, A a symmetric matrix.
- SSYR A:=A+alpha*SX*TRANSPOSE(SX), A a symmetric matrix.
- SSYR2 A:=A+alpha*SX*TRANSPOSE(SY)+alpha*SY*TRANSPOSE(SX), A a symmetric matrix.
- STBMV SX:=A*SX, A a triangular band matrix.
- STBSV SX:=INVERSE(A)*SX, A a triangular band matrix.
- STPMV SX:=A*SX, A a packed symmetric matrix.
- STPSV SX:=INVERSE(A)*SX, A a packed symmetric matrix.
- STRMV SX:=A*SX, A a triangular matrix.
- STRSV SX:=INVERSE(A)*SX, A a triangular matrix.
- SXMPY SY:=SY+SX*A
-
- (alpha and beta are complex scalars, CX and CY complex vectors,
- and A is a matrix. In most cases, the routines can also handle
- TRANSPOSE(A) and CONJUGATE-TRANSPOSE(A)).
-
- CGEMV CY := alpha*A*CX + beta*CY, A a rectangular matrix.
- CGBMV CY := alpha*A*CX + beta*CY, A a rectangular band matrix.
- CHEMV CY := alpha*A*CX + beta*CY, A a (square) hermitian matrix.
- CHBMV CY := alpha*A*CX + beta*CY, A a (square) hermitian band matrix.
- CHPMV CY := alpha*A*CX + beta*CY, A a (square) hermitian packed matrix.
- CTRMV CX := A*CX, A is a triangular matrix.
- CTBMV CX := A*CX, A is a triangular band matrix.
- CTPMV CX := A*CX, A is a packed triangular band matrix.
- CTRSV CX := INVERSE(A)*CX, where A is a triangular matrix.
- CTBSV CX := INVERSE(A)*CX, where A is a triangular band matrix.
- CTPSV CX := INVERSE(A)*CX, where A is a packed triangular band matrix.
- CGERU A := A + alpha*CX*TRANSPOSE(CY), A a rectangular matrix.
- CGERC A := A + alpha*CX*CONJUGATE-TRANSPOSE(CY), A a rectangular matrix.
- CHER A := A + alpha*CX*CONJUGATE-TRANSPOSE(CX), A a (square) hermitian matrix.
- CHPR A := A + alpha*CX*CONJUGATE-TRANSPOSE(CX), a a (square) hermitian packed.
- CHER2 A := A + alpha*CX*CONJUGATE-TRANSPOSE(CY)
- + CONJUGATE(alpha)*CY*CONJUGATE-TRANSPOSE(CX),
- A a (square) hermitian matrix.
- CHPR2 A := A + alpha*CX*CONJUGATE-TRANSPOSE(CY)
- + CONJUGATE(ALPHA)*CY*CONJUGATE-TRANSPOSE(CX),
- A a (square) hermitian packed matrix.
-
-
- Level 3 BLAS summary:
-
-
- (A, B, C are real matrices, alpha and beta real scalars)
- (In most cases, the matrices on the left side may also
- be transposed)
-
- SGEMM C:=alpha*A*B+beta*C, A, B, C rectangular.
- SSYMM C:=alpha*A*B+beta*C, A symmetric, B, C rectangular.
- SSYRK C:=alpha*A*TRANSPOSE(A)+beta*C, C symmetric.
- SSYR2K C:=alpha*A*TRANSPOSE(B)+alpha*B*TRANSPOSE(A)+beta*C, C symmetric.
- STRMM B:=A*B or B:=B*A, A triangular, B rectangular.
- STRSM B:=INVERSE(A)*C or B:=C*INVERSE(A), B, C rectangular, A triangular.
-
- (A, B, C are complex matrices, alpha and beta complex scalars,
- in most cases, the matrices on the left side may also be transposed
- or conjugated)
-
- CGEMM C:=alpha*A*B+beta*C, A, B, C rectangular.
- CSYMM C:=alpha*A*B+beta*C, A symmetric, B, C rectangular.
- CHEMM C:=alpha*A*TRANSPOSE(A)+beta*C, A hermitian, B, C rectangular.
- CSYRK C:=alpha*A*TRANSPOSE(A)+beta*C, C symmetric.
- CHERK C:=alpha*A*TRANSPOSE(A)+beta*C, C hermitian.
- CSYR2K C:=alpha*A*TRANSPOSE(B)+alpha*B*TRANSPOSE(A)+beta*C, C symmetric.
- CHER2K C:=alpha*A*TRANSPOSE(B)+alpha*B*TRANSPOSE(A)+beta*C, C hermitian.
- CTRMM B:=A*B or B:=B*A, A triangular, B rectangular.
- CTRSM B:=INVERSE(A)*C or B:=C*INVERSE(A), B, C rectangular, A triangular.
-
- *************************************************************************
-
- Level 1 BLAS:
-
- *************************************************************************
-
-
- SUBROUTINE ICOPY(N,IX,INCX,IY,INCY)
-
- copies one integer vector IX into another IY. IY:= IX.
-
- N Input, INTEGER N, number of elements in the vectors.
-
- IX Input, INTEGER IX(N), vector to be copied.
-
- INCX Input, INTEGER INCX, increment between elements of IX. For
- contiguous elements, INCX = 1.
-
- IY Output, INTEGER IY(N), result vector.
-
- INCY Input, INTEGER INCY, increment between elements of IY. For
- contiguous elements, INCY = 1.
-
-
-
- SUBROUTINE IINIT(N,IA,IX,INCX)
-
- sets all the entries of a vector IX to the scalar value IA.
-
- N Input, INTEGER N, number of elements in IX.
-
- IA Input, INTEGER IA, the scalar value to be assigned to all entries.
-
- IX Output, INTEGER IX(N), the vector, all of whose entries are
- now equal to IA.
-
- INCX Input, INTEGER INCX, increment between elements of IX. For
- contiguous elements, INCX=1.
-
-
- INTEGER FUNCTION ISAMAX(N,SX,INCX)
-
- an integer function that returns the index of the element in a real vector
- with the largest absolute value.
-
- N Input, INTEGER N, number of elements in SX.
-
- SX Input, REAL SX(N), vector to be searched.
-
- INCX Input, INTEGER INCX, increment between elements of SX. For contiguous
- elements, INCX = 1.
-
- ISAMAX Output, INTEGER ISAMAX, the index of the entry of maximum absolute
- magnitude.
-
-
- INTEGER FUNCTION ISAMIN(N,SX,INCX)
-
- an integer function that returns the index of the element in a real vector
- with the smallest absolute value.
-
- N Input, INTEGER N, number of elements in SX.
-
- SX Input, REAL SX(N), vector to be searched.
-
- INCX Input, INTEGER INCX, increment between elements of SX. For contiguous
- elements, INCX = 1.
-
- ISAMIN Output, INTEGER ISAMIN, the index of the entry of minimum absolute
- magnitude.
-
-
- INTEGER FUNCTION ISMAX(N,SX,INCX)
-
- an integer function that returns the index of the element in a real vector
- with the largest value.
-
- N Input, INTEGER N, number of elements in SX.
-
- SX Input, REAL SX(N), vector to be searched.
-
- INCX Input, INTEGER INCX, increment between elements of SX. For contiguous
- elements, INCX = 1.
-
- ISMAX Output, INTEGER ISMAX, the index of the entry of maximum value.
-
-
- INTEGER FUNCTION ISMIN(N,SX,INCX)
-
- an integer function that returns the index of the element in a real vector
- with the smallest value.
-
- N Input, INTEGER N, number of elements in SX.
-
- SX Input, REAL SX(N), vector to be searched.
-
- INCX Input, INTEGER INCX, increment between elements of SX. For contiguous
- elements, INCX = 1.
-
- ISMIN Output, INTEGER ISMIN, the index of the entry of minimum value.
-
-
- LOGICAL FUNCTION IVSAME(N,IX,IY)
-
- checks whether two vectors are identical.
-
- N Input, INTEGER N, number of elements in IX and IY.
-
- IX Input, INTEGER IX(N), first vector to compare.
-
- IY Input, INTEGER IY(N), second vector to compare.
-
- IVSAME Output, LOGICAL IVSAME, .TRUE. if IX(I).EQ.IY(I) for I=1 to N,
- .FALSE. otherwise.
-
-
- REAL FUNCTION SAMAX(N,SX,INCX)
-
- returns the maximum absolute value of all entries in SX.
-
- N Input, INTEGER N, number of elements in SX.
-
- SX Input, REAL SX(N), vector to be searched.
-
- INCX Input, INTEGER INCX, increment between elements of SX. For contiguous
- elements, INCX = 1.
-
- SAMAX Output, REAL SAMAX, the maximum absolute value of all entries in SX.
-
-
- REAL FUNCTION SAMIN(N,SX,INCX)
-
- returns the minimum absolute value of all entries in SX.
-
- N Input, INTEGER N, number of elements in SX.
-
- SX Input, REAL SX(N), vector to be searched.
-
- INCX Input, INTEGER INCX, increment between elements of SX. For contiguous
- elements, INCX = 1.
-
- SAMIN Output, REAL SAMIN, the minimum absolute value of all entries in SX.
-
-
- REAL FUNCTION SASUM(N,SX,INCX)
-
- a real function that returns the sum of the absolute values of a real vector.
-
- N Input, INTEGER N, number of elements in SX.
-
- SX Input, REAL SX(N), real vector whose entries are to be summed.
-
- INCX Input, INTEGER INCX, increment between elements of SX. For contiguous
- elements, INCX = 1.
-
- SASUM Output, REAL SASUM, the sum of the absolute values of the
- entries.
-
-
- SUBROUTINE SAXPY(N,SA,SX,INCX,SY,INCY)
-
- adds a scalar multiple SA of one vector SX to another vector SY.
- SY := SA*SX + SY
-
- N Input, INTEGER N, number of elements in the vectors.
-
- SA Input, REAL SA, scalar multiplier.
-
- SX Input, REAL SX(N), vector.
-
- INCX Input, INTEGER INCX, increment between elements of SX. For contiguous
- elements, INCX = 1.
-
- SY Input/output, REAL SY(N). On input, the vector to which SA*SX
- is to be added, on output, SY:=SY+SA*SX.
-
- INCY Input, INTEGER INCY, increment between elements of SY. For contiguous
- elements, INCY = 1.
-
-
- SUBROUTINE SAXPYX(N,SA,SX,INCX,SY,INCY)
-
- SAXPYX scales a vector SX, and adds SY to it. SX := SA*SX + SY.
-
- N Input, INTEGER N, number of elements in the vectors.
-
- SA Input, REAL SA, scalar multiplier.
-
- SX Input/output, REAL SX(N), vector. Output value of SX
- is SA*SX+SY.
-
- INCX Input, INTEGER INCX, increment between elements of SX. For contiguous
- elements, INCX = 1.
-
- SY Input, REAL SY(N), the vector to be added to SX.
-
- INCY Input, INTEGER INCY, increment between elements of SY. For contiguous
- elements, INCY = 1.
-
-
- SUBROUTINE SCOPY(N,SX,INCX,SY,INCY)
-
- copies one real vector SX into another SY. SY:= SX.
-
- N Input, INTEGER N, number of elements in the vectors.
-
- SX Input, REAL SX(N), real vector to be copied.
-
- INCX Input, INTEGER INCX, increment between elements of SX. For contiguous
- elements, INCX = 1.
-
- SY Output, REAL SY(N), real result vector.
-
- INCY Input, INTEGER INCY, increment between elements of SY. For contiguous
- elements, INCY = 1.
-
-
- REAL FUNCTION SDOT(N,SX,INCX,SY,INCY)
-
- computes the inner (dot) product of two vectors.
- SDOT = SUM(I=1 to N) of SX(I)*SY(I).
-
- N Input, INTEGER N, number of elements in the vectors.
-
- SX Input, REAL SX(N), vector operand.
-
- INCX Input, INTEGER INCX, increment between elements of SX. For contiguous
- elements, INCX = 1.
-
- SY Input, REAL SY(N), vector operand.
-
- INCY Input, INTEGER INCY, increment between elements of SY. For contiguous
- elements, INCY = 1.
-
- SDOT Output, REAL SDOT, the dot product of SX and SY.
-
-
- REAL FUNCTION SDSDOT(N,SX,INCX,SY,INCY)
-
- computes the inner (dot) product of two vectors.
- SDSDOT = SUM(I=1 to N) of SX(I)*SY(I). Double precision arithmetic is
- used to compute the dot product with greater accuracy, although the
- final result is returned as single precision.
-
- N Input, INTEGER N, number of elements in the vectors.
-
- SX Input, REAL SX(N), vector operand.
-
- INCX Input, INTEGER INCX, increment between elements of SX. For contiguous
- elements, INCX = 1.
-
- SY Input, REAL SY(N), vector operand.
-
- INCY Input, INTEGER INCY, increment between elements of SY. For contiguous
- elements, INCY = 1.
-
- SDSDOT Output, REAL SDSDOT, the dot product of SX and SY.
-
-
- SUBROUTINE SINIT(N,SA,SX,INCX)
-
- sets all the entries of a vector SX to the scalar value SA.
-
- N Input, INTEGER N, number of elements in SX.
-
- SA Input, REAL SA, the scalar value to be assigned to all entries.
-
- SX Output, REAL SX(N), the vector, all of whose entries are
- now equal to SA.
-
- INCX Input, INTEGER INCX, increment between elements of SX. For contiguous
- elements, INCX=1.
-
-
- REAL FUNCTION SMACH(JOB)
-
- returns machine constants for the real limits of a given machine.
-
- JOB Input, INTEGER JOB, determines the number to be computed.
- 1, compute the machine epsilon (the smallest number eps
- such that (1. + eps > 1) and (1. - eps < 1)).
- 2, compute a number close to smallest normalized, representable
- number.
- 3, compute a number close to largest normalized, representable
- number.
-
- SMACH Output, REAL SMACH, the request machine number.
-
-
- REAL FUNCTION SMAX(N,SX,INCX)
-
- returns the maximum entry in SX.
-
- N Input, INTEGER N, number of elements in SX.
-
- SX Input, REAL SX(N), vector to be searched.
-
- INCX Input, INTEGER INCX, increment between elements of SX. For contiguous
- elements, INCX = 1.
-
- SMAX Output, REAL SMAX, the maximum entry in SX.
-
-
- REAL FUNCTION SMIN(N,SX,INCX)
-
- returns the minimum entry in SX.
-
- N Input, INTEGER N, number of elements in SX.
-
- SX Input, REAL SX(N), vector to be searched.
-
- INCX Input, INTEGER INCX, increment between elements of SX. For contiguous
- elements, INCX = 1.
-
- SMIN Output, REAL SMIN, the minimum entry in SX.
-
-
- REAL FUNCTION SNRM2(N,SX,INCX)
-
- a real function that computes the Euclidean norm of a real
- vector, also known as the root-mean-square norm, or the square root
- of the sum of the squares of the entries.
-
- N Input, INTEGER N, number of elements in vector.
-
- SX Input, REAL SX(N), the vector whose norm is to be taken.
-
- INCX Input, INTEGER INCX, increment between elements of SX. For contiguous
- elements, INCX = 1.
-
- SNRM2 Output, REAL SNRM2, the Euclidean norm of SX.
-
-
- SUBROUTINE SROT(N,SX,INCX,SY,INCY,C,S)
-
- applies a Givens rotation to two vectors, which generally represent
- rows or columns of a matrix.
-
- TEMP :=-S*SX(I)+C*SY(I)
- SX(I):= C*SX(I)+S*SY(I)
- SY(I):= TEMP
-
- N Input, INTEGER N, number of elements in vectors.
-
- SX Input/output, REAL SX(N), vector to be modified.
-
- INCX Input, INTEGER INCX, increment between elements of SX. For contiguous
- elements, INCX = 1.
-
- SY Input/output, REAL SY(N), vector to be modified.
-
- INCY Input, INTEGER INCY, increment between elements of SY. For contiguous
- elements, INCY = 1.
-
- C Input, REAL C, cosine normally calculated using SROTG.
-
- S Input, REAL S, sine normally calculated using SROTG.
-
-
- SUBROUTINE SROTG(A,B,C,S)
-
- computes the elements of a Givens rotation
- matrix. Given that A and B are elements of two different rows
- of a matrix in the same column, or of two different vectors in
- the same position, SROTG computes a cosine C and sine S such
- that the rotation through the angle defined by C and S will
- zero out the entry B in the second vector. That is, setting
- X=C*X+S*Y and Y=-S*X+C*Y results in the entry of Y that was
- equal to B now being zero.
-
- A Input/output, REAL A. On input, the value of the vector or matrix
- entry which is not required to be zeroed out. On output, it is
- overwritten by other information.
-
- B Input/output, REAL B. On input, the value of the vector or matrix
- entry which is required to be zeroed out. It is overwritten on return.
-
- C Output, REAL C, cosine of rotation matrix.
-
- S Output, REAL S, sine of rotation matrix.
-
-
- SUBROUTINE SROTM(N,SX,INCX,SY,INCY,SPARAM)
-
- SROTM applies the modified Givens rotation H to the 2 by N matrix
-
- ( X(1) ... X(N) )
- ( Y(1) ... Y(N) )
-
- H takes one of the following forms, depending on the value of SPARAM:
-
- SPARAM(1) = -2.0
- H11 = 1.0 H12 = 0.0
- H21 = 0.0 H22 = 1.0
-
- SPARAM(1) = -1.0
- H11 = SPARAM(2) H12 = SPARAM(4)
- H21 = SPARAM(3) H22 = SPARAM(5)
-
- SPARAM(1) = 0.0
- H11 = 1.0 H12 = SPARAM(4)
- H21 = SPARAM(3) H22 = 1.0
-
- SPARAM(1) = 1.0
- H11 = SPARAM(2) H12 = 1.0
- H21 = -1.0 H22 = SPARAM(5)
-
- N Input, INTEGER N, length of vectors X and Y.
-
- SX Input/output, REAL SX(N).
- SROTM replaces X(I) with H11*X(I)+H12*Y(I) for I=1,...,N.
- X(I) and Y(I) refer to specific elements of SX and SY.
- The H components refer to the rotation defined by SPARAM.
-
- INCX Input, INTEGER INCX, displacement between elements of SX.
- X(I) is defined to be
- SX(1+(I-1)*INCX) if INCX.GE.0 or
- SX(1+(I-N)*INCX) if INCX.LT.0.
-
- SY Input/output, REAL SY(N).
- SROTM replaces Y(I) with H21*X(I)+H22*Y(I) for I=1,...,N.
- X(I) and Y(I) refer to specific elements of SX and SY.
- The H components refer to the rotation defined by SPARAM.
-
- INCY Input, INTEGER INCY, displacement between elements of SY.
- Y(I) is defined to be
- SY(1+(I-1)*INCY) if INCY.GE.0 or
- SY(1+(I-N)*INCY) if INCY.LT.0.
-
- SPARAM Input, REAL SPARAM(5), defines the rotation matrix H.
- See remarks above.
-
-
- SUBROUTINE SROTMG(SD1,SD2,SX1,SY1,SPARAM)
-
- SROTMG constructs a modified Givens rotation H and updates the
- scale factors SD1 and SD2 which zero SY1. The transformed value of
- SD1 replaces SD1, i.e.
-
- On input, SW1 = SQRT(SD1)*SX1, SZ1 = SQRT(SD2)*SY1.
-
- On output, ( C S ) (SW1) = (C*SW1 + S*SZ1) = (SQRT(SD1)*SX1)
- (-S C ) (SZ1) = ( 0 ) = ( 0 )
- where C and S define a Givens rotation.
-
- H takes the form:
-
- SPARAM(1) = -2.0
- SPARAM(2) = Unchanged SPARAM(4) = Unchanged
- SPARAM(3) = Unchanged SPARAM(5) = Unchanged
-
- SPARAM(1) = -1.0
- SPARAM(2) = H11 SPARAM(4) = H12
- SPARAM(3) = H21 SPARAM(5) = H22
-
- SPARAM(1) = 0.0
- SPARAM(2) = Unchanged SPARAM(4) = H12
- SPARAM(3) = H21 SPARAM(5) = Unchanged
-
- SPARAM(1) = 1.0
- SPARAM(2) = H11 SPARAM(4) = Unchanged
-
- SD1 Input/output, REAL SD1, scale factor.
- On input, SD1 contains the first scale factor. On
- output, SD1 contains the updated scale factor.
-
- SD2 Input/output, REAL SD2, scale factor.
- On input, SD2 contains the second scale factor. On
- output, SD2 contains the updated scale factor.
-
- SX1 Input/output, REAL SX1, on input contains the first component of the
- vector to be rotated and output SX1 contains the rotated value
- of the first component.
-
- SY1 Input, REAL SY1, on input, second component of the vector to be
- rotated. Since this component is zeroed by the rotation, it is
- left unchanged in storage.
-
- SPARAM Input/output, REAL SPARAM(5), defines the rotation matrix H.
- See remarks above.
-
-
- SUBROUTINE SSCAL(N,SA,SX,INCX)
-
- scales a real vector SX by multiplying it by a real number SA.
-
- N Input, INTEGER N, number of elements in vector.
-
- SA Input, REAL SA, scaling factor.
-
- SX Input/output, REAL SX(N), vector to be scaled.
-
- INCX Input, INTEGER INCX, increment between elements of SX. For
- contiguous elements, INCX = 1.
-
-
- SUBROUTINE SSET(N,SA,SX,INCX)
-
- SSET sets all the entries of a vector SX to the scalar value SA.
-
- N Input, INTEGER N, number of elements in SX.
-
- SA Input, REAL SA, the scalar value to be assigned to all entries.
-
- SX Output, REAL SX(N), the vector, all of whose entries are
- now equal to SA.
-
- INCX Input, INTEGER INCX, increment between elements of SX. For contiguous
- elements, INCX=1.
-
-
- REAL FUNCTION SSUM(N,SX,INCX)
-
- a real function that returns the sum of the values of a real vector.
-
- N Input, INTEGER N, number of elements in SX.
-
- SX Input, REAL SX(N), real vector whose entries are to be summed.
-
- INCX Input, INTEGER INCX, increment between elements of SX. For contiguous
- elements, INCX = 1.
-
- SSUM Output, REAL SSUM, the sum of the values of the entries.
-
-
- SUBROUTINE SSWAP(N,SX,INCX,SY,INCY)
-
- exchanges two real vectors SX and SY.
-
- N Input, INTEGER N, number of elements in vectors.
-
- SX Input/output, REAL SX(N). On output, the contents of
- SX and SY have been interchanged.
-
- INCX Input, INTEGER INCX, increment between elements of SX. For contiguous
- elements, INCX = 1.
-
- SY Input/output, REAL SY(N), the other vector to interchange.
-
- INCY Input, INTEGER INCY, increment between elements of SY. For contiguous
- elements, INCY = 1.
-
-
- SUBROUTINE SVCAL(N,SA,SX,INCX,SY,INCY)
-
- sets the vector SY to SA times the vector SX.
-
- N Input, INTEGER N, number of elements in vector.
-
- SA Input, REAL SA, scaling factor.
-
- SX Input, REAL SX(N), vector to be copied.
-
- INCX Input, INTEGER INCX, increment between elements of SX. For contiguous
- elements, INCX = 1.
-
- SY Output, REAL SY(N), SY(I)=SA*SX(I).
-
- INCY Input, INTEGER INCY, increment between elements of SY. For contiguous
- elements, INCY=1.
-
-
- LOGICAL FUNCTION SVSAME(N,SX,SY)
-
- checks whether two vectors are identical.
-
- N Input, INTEGER N, number of elements in SX and SY.
-
- SX Input, REAL SX(N), first vector to compare.
-
- SY Input, REAL SY(N), second vector to compare.
-
- SVSAME Output, LOGICAL SVSAME, .TRUE. if SX(I).EQ.SY(I) for I=1 to N,
- .FALSE. otherwise.
-
-
- SUBROUTINE CAXPY(N,CA,CX,INCX,CY,INCY)
-
- CAXPY adds a scalar multiple CA of one vector CX to another vector CY.
- CY:=CY+CA*CX.
-
- N Input, INTEGER N, number of elements in the vectors.
-
- CA Input, COMPLEX CA, scalar multiplier.
-
- CX Input, COMPLEX CX(N), vector to be added.
-
- INCX Input, INTEGER INCX, increment between elements of CX. For contiguous
- elements, INCX = 1.
-
- CY Input/output, COMPLEX CY(N), vector to which CA*CX is to be
- added.
-
- INCY Input, INTEGER INCY, increment between elements of CY. For contiguous
- elements, INCY = 1.
-
-
- SUBROUTINE CCOPY(N,CX,INCX,CY,INCY)
-
- copies one vector to another, CY:=CX.
-
- N Input, INTEGER N, number of elements in the vectors.
-
- CX Input, COMPLEX CX(N), vector to be copied.
-
- INCX Input, INTEGER INCX, increment between elements of CX. For contiguous
- elements, INCX = 1.
-
- CY Output, COMPLEX CY(N), result vector.
-
- INCY Input, INTEGER INCY, increment between elements of CY. For contiguous
- elements, INCY = 1.
-
-
- COMPLEX FUNCTION CDOTC(N,CX,INCX,CY,INCY)
-
- computes the (conjugated) dot product of two vectors.
- CDOTC=SUM(I=1 to N) CONJUGATE(CX(I)) * CY(I)
-
- N Input, INTEGER N, number of elements in the vectors.
-
- CX Input, COMPLEX CX(N), operand.
-
- INCX Input, INTEGER INCX, increment between elements of CX. For contiguous
- elements, INCX = 1.
-
- CY Input, COMPLEX CY(N), operand.
-
- INCY Input, INTEGER INCY, increment between elements of CY. For contiguous
- elements, INCY = 1.
-
- CDOTC Output, COMPLEX CDOTC, the conjugated dot product of CX and CY.
-
-
- COMPLEX FUNCTION CDOTU(N,CX,INCX,CY,INCY)
-
- computes the (unconjugated) dot product of two vectors.
- This is the simple sum of the product of the entries of the vectors.
-
- N Input, INTEGER N, number of elements in the vectors.
-
- CX Input, COMPLEX CX(N), operand.
-
- INCX Input, INTEGER INCX, increment between elements of CX. For contiguous
- elements, INCX = 1.
-
- CY Input, COMPLEX CY(N), operand.
-
- INCY Input, INTEGER INCY, increment between elements of CY. For contiguous
- elements, INCY = 1.
-
- CDOTU Output, COMPLEX CDOTU, the unconjugated dot product of CX and CY.
-
-
- SUBROUTINE CINIT(N,CA,CX,INCX)
-
- sets all the entries of a vector CX to the scalar value CA.
-
- N Input, INTEGER N, number of elements in CX.
-
- CA Input, COMPLEX CA, the scalar value to be assigned to all entries.
-
- CX Output, COMPLEX CX(N), the vector, all of whose entries are
- now equal to CA.
-
- INCX Input, INTEGER INCX, increment between elements of CX. For contiguous
- elements, INCX=1.
-
-
- REAL FUNCTION CMACH(JOB)
-
- returns (real valued) machine constants for a given machine.
-
- JOB Input, INTEGER JOB, determines the number to be computed.
- 1, compute the machine epsilon (the norm of the smallest number eps
- such that (1. + eps > 1) and (1. - eps < 1)).
- 2, compute the norm of a number close to smallest normalized,
- representable number.
- 3, compute the norm of a number close to largest normalized,
- representable number.
-
- CMACH Output, REAL CMACH, the value of the number requested.
-
-
- SUBROUTINE CROT(N,CX,INCX,CY,INCY,C,S)
-
- carries out a complex Given's plane rotation:
-
- TEMP :=-CONJUGATE(S)*CX(I)+C*CY(I)
- CX(I):= C*CX(I)+S*CY(I)
- CY(I):= TEMP
-
- N Input, INTEGER N, number of elements in vectors.
-
- CX Input/output, COMPLEX CX(N), vector to be modified.
-
- INCX Input, INTEGER INCX, increment between elements of CX. For contiguous
- elements, INCX = 1.
-
- CY Input/output, COMPLEX CY(N), vector to be modified.
-
- INCY Input, INTEGER INCY, increment between elements of CY. For contiguous
- elements, INCY = 1.
-
- C Input, COMPLEX C, cosine of transformation.
-
- S Input, COMPLEX S, sine of transformation.
-
-
- SUBROUTINE CROTG(A,B,C,S)
-
- CROTG computes the elements of a Givens rotation
- matrix. Given that A and B are elements of two different rows
- of a matrix in the same column, or of two different vectors in
- the same position, CROTG computes a real cosine C and complex sine S such
- that the rotation through the angle defined by C and S will
- zero out the entry B in the second vector. That is, setting
- X=C*X+S*Y and Y=-S*X+C*Y results in the entry of Y that was
- equal to B now being zero.
-
- A Input/output, COMPLEX A, on input, the value of the vector or matrix
- entry which is not required to be zeroed out. It is overwritten
- on return.
-
- B Input/output, COMPLEX B, on input, the value of the vector or matrix
- entry which is required to be zeroed out. It is overwritten on return.
-
- C Output, REAL C, cosine of rotation matrix.
-
- S Output, COMPLEX S, sine of rotation matrix.
-
-
- SUBROUTINE CSCAL(N,CA,CX,INCX)
-
- scales a complex vector by multiplying it by a complex number.
-
- N Input, INTEGER N, number of elements in vector.
-
- CA Input, COMPLEX CA, scaling factor.
-
- CX Input/output, COMPLEX CX(N), vector to be scaled.
-
- INCX Input, INTEGER INCX, increment between elements of CX. For contiguous
- elements, INCX = 1.
-
-
- SUBROUTINE CSROT(N,CX,INCX,CY,INCY,C,S)
-
- carries out a real Given's plane rotation:
-
- TEMP :=-S*CX(I)+C*CY(I)
- CX(I):= C*CX(I)+S*CY(I)
- CY(I):= TEMP
-
- N Input, INTEGER N, number of elements in vectors.
-
- CX Input/output, COMPLEX CX(N), vector to be modified.
-
- INCX Input, INTEGER INCX, increment between elements of CX. For contiguous
- elements, INCX = 1.
-
- CY Input/output, COMPLEX CY(N), vector to be modified.
-
- INCY Input, INTEGER INCY, increment between elements of CY. For contiguous
- elements, INCY = 1.
-
- C Input, REAL C, cosine normally calculated using SROTG (the REAL
- arithmetic routine).
-
- S Input, REAL S, sine normally calculated using SROTG (the REAL arithmetic
- routine).
-
-
- SUBROUTINE CSSCAL(N,SA,CX,INCX)
-
- scales a complex vector by multiplying it by a REAL number.
-
- N Input, INTEGER N, number of elements in vector.
-
- SA Input, REAL SA, scaling factor.
-
- CX Input/output, COMPLEX CX(N), vector to be scaled.
-
- INCX Input, INTEGER INCX, increment between elements of CX. For contiguous
- elements, INCX = 1.
-
-
- SUBROUTINE CSWAP(N,CX,INCX,CY,INCY)
-
- exchanges two vectors.
-
- N Input, INTEGER N, number of elements in vectors.
-
- CX Input/output, COMPLEX CX(N).
-
- INCX Input, INTEGER INCX, increment between elements of CX. For contiguous
- elements, INCX = 1.
-
- CY Input/output, COMPLEX CY(N).
-
- INCY Input, INTEGER INCY, increment between elements of CY. For contiguous
- elements, INCY = 1.
-
-
- LOGICAL FUNCTION CVSAME(N,CX,CY)
-
- checks whether two vectors are identical.
-
- N Input, INTEGER N, number of elements in CX and CY.
-
- CX Input, COMPLEX CX(N), first vector to compare.
-
- CY Input, COMPLEX CY(N), second vector to compare.
-
- CVSAME Output, LOGICAL CVSAME, .TRUE. if CX(I).EQ.CY(I) for I=1 to N,
- .FALSE. otherwise.
-
-
- INTEGER FUNCTION ICAMAX(N,CX,INCX)
-
- an integer function that returns the index of the first occurrence of the
- element in a complex vector with the largest absolute value. Here
- absolute value is defined as ABS(X)=ABS(REAL(X)) + ABS(AIMAG(X)).
-
- N Input, INTEGER N, number of elements to process in vector CX.
-
- CX Input, COMPLEX CX(N), vector to be searched.
-
- INCX Input, INTEGER INCX, increment between elements of CX. For contiguous
- elements, INCX = 1.
-
- ICAMAX Output, INTEGER ICAMAX, the index of the entry in CX of
- largest absolute value.
-
-
- INTEGER FUNCTION ICAMIN(N,CX,INCX)
-
- an integer function that returns the index of the first occurrence of the
- element in a complex vector with the smallest absolute value. Here
- absolute value is defined as ABS(X)=ABS(REAL(X)) + ABS(AIMAG(X)).
-
- N Input, INTEGER N, number of elements to process in vector CX.
-
- CX Input, COMPLEX CX(N), vector to be searched.
-
- INCX Input, INTEGER INCX, increment between elements of CX. For contiguous
- elements, INCX = 1.
-
- ICAMIN Output, INTEGER ICAMIN, the index of the entry in CX of
- smallest absolute value.
-
-
- REAL FUNCTION SCAMAX(N,CX,INCX)
-
- returns the maximum "absolute value" of the entries in CX. Here,
- absolute value is defined as ABS(X)=ABS(REAL(X)) + ABS(AIMAG(X)).
-
- N Input, INTEGER N, number of elements to process in vector CX.
-
- CX Input, COMPLEX CX(N), vector to be searched.
-
- INCX Input, INTEGER INCX, increment between elements of CX. For contiguous
- elements, INCX = 1.
-
- SCAMAX Output, REAL SCAMAX, the maximum absolute value of the
- entries in CX.
-
-
- REAL FUNCTION SCAMIN(N,CX,INCX)
-
- returns the minimum "absolute value" of the entries of CX. Here,
- absolute value is defined as ABS(X)=ABS(REAL(X)) + ABS(AIMAG(X)).
-
- N Input, INTEGER N, number of elements to process in vector CX.
-
- CX Input, COMPLEX CX(N), vector to be searched.
-
- INCX Input, INTEGER INCX, increment between elements of CX. For contiguous
- elements, INCX = 1.
-
- SCAMIN Output, REAL SCAMIN, the minimum absolute value of the
- entries in CX.
-
-
- REAL FUNCTION SCASUM(N,CX,INCX)
-
- a REAL function that returns the sum of the absolute values
- of the real and complex parts of a complex vector. SCASUM=
- SUM(I=1 to N) ABS(REAL(CX(I))) + ABS(AIMAG(CX(I))).
-
- N Input, INTEGER N, number of elements to process in vector CX.
-
- CX Input, COMPLEX CX(N), vector to be summed.
-
- INCX Input, INTEGER INCX, increment between elements of CX. For contiguous
- elements, INCX = 1.
-
- SCASUM Output, REAL SCASUM, the sum of the absolute values of
- the entries of CX.
-
-
- REAL FUNCTION SCNRM2(N,CX,INCX)
-
- a real function that computes the Euclidean norm of a complex
- vector, also known as the root-mean-square norm, or the square root
- of the sum of the squares of the entries.
- SCNRM2:=SQRT(SUM(I=1 to N)REAL(CX(I))**2+AIMAG(CX(I))**2)
-
- N Input, INTEGER N, number of elements in vector.
-
- SX Input, COMPLEX SX(N), vector whose norm is desired.
-
- INCX Input, INTEGER INCX, increment between elements of SX. For contiguous
- elements, INCX = 1.
-
- SCNRM2 Output, REAL SCNRM2, the euclidean norm of the vector SX.
-
- *********************************************************************
-
- Level 2 BLAS:
-
- *********************************************************************
-
-
- The level 2 BLAS were designed to perform linear algebra operations at
- a 'higher level' than the level 1 BLAS. Instead of simple vector
- operations, these routines are able to carry out matrix-vector operations,
- and to solve linear systems.
-
-
- SUBROUTINE SMXPY(N1,Y,N2,LDA,X,A)
-
- SMXPY computes the product of a column vector X times a matrix A,
- and adds the result to another column vector Y.
-
- Y(I) = Y(I) + SUM(J=1 to N2) A(I,J)*X(J)
-
- N1 Input, number of entries in Y.
-
- Y Input/output, REAL Y(N1), the vector to which X*A is to
- be added.
-
- N2 Input, number of entries in X.
-
- LDA Input, leading dimension of the array A.
-
- X Input, REAL X(N2), column vector to be multiplied by X.
-
- A Input, REAL A(LDA,*), containing an N1 by N2 matrix
- which is to multiply X.
-
-
- SUBROUTINE SXMPY(N1,LDY,Y,N2,LDX,X,LDA,A)
-
- SXMPY computes the product of a row vector X and a matrix A,
- and adds the result to another row vector Y.
-
- Y(1,J)=Y(1,J) + SUM(I=1 to N2) X(1,I)*A(I,J)
-
- N1 Input, number of entries in row vector Y
- (or number of columns in the array Y).
-
- LDY Input, leading dimension of the array Y.
-
- Y Input/output, REAL Y(LDY,N1), array containing the row
- vector Y as its first row. On output, X*A has been
- added to the first row of Y.
-
- N2 Input, number of entries in the row vector X,
- (or number of coumns in the array X).
-
- LDX Input, leading dimension of the array X.
-
- X Input, REAL X(LDX,N2), array containing the row vector
- X as its first row.
-
- LDA Input, leading dimension of the array A.
-
- A Input, REAL A(LDA,N1), array which is to be multiplied
- by X.
-
-
- SUBROUTINE SGBMV(TRANS,M,N,KL,KU,ALPHA,A,LDA,X,INCX,BETA,Y,INCY)
-
- SGBMV performs one of the matrix-vector operations
-
- y := alpha*A*x + beta*y, or y := alpha*A'*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.
-
- TRANS - 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'*x + beta*y.
-
- TRANS = 'C' or 'c' y := alpha*A'*x + beta*y.
-
- Unchanged on exit.
-
- M - INTEGER.
- On entry, M specifies the number of rows of the matrix A.
- M must be at least zero.
- Unchanged on exit.
-
- N - INTEGER.
- On entry, N specifies the number of columns of the matrix A.
- N must be at least zero.
- Unchanged on exit.
-
- KL - INTEGER.
- On entry, KL specifies the number of sub-diagonals of the
- matrix A. KL must satisfy 0 .le. KL.
- Unchanged on exit.
-
- KU - INTEGER.
- On entry, KU specifies the number of super-diagonals of the
- matrix A. KU must satisfy 0 .le. KU.
- Unchanged on exit.
-
- ALPHA - REAL .
- On entry, ALPHA specifies the scalar alpha.
- Unchanged on exit.
-
- A - REAL array of 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
-
- Unchanged on exit.
-
- LDA - 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 ).
- Unchanged on exit.
-
- X - REAL array of 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.
- Unchanged on exit.
-
- INCX - INTEGER.
- On entry, INCX specifies the increment for the elements of
- X. INCX must not be zero.
- Unchanged on exit.
-
- BETA - REAL .
- On entry, BETA specifies the scalar beta. When BETA is
- supplied as zero then Y need not be set on input.
- Unchanged on exit.
-
- Y - REAL array of 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 - INTEGER.
- On entry, INCY specifies the increment for the elements of
- Y. INCY must not be zero.
- Unchanged on exit.
-
-
- SUBROUTINE SGEMV(TRANS,M,N,ALPHA,A,LDA,X,INCX,BETA,Y,INCY)
-
- SGEMV performs one of the matrix-vector operations
-
- y := alpha*A*x + beta*y, or y := alpha*A'*x + beta*y,
-
- where alpha and beta are scalars, x and y are vectors and A is an
- m by n matrix.
-
- TRANS - 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'*x + beta*y.
-
- TRANS = 'C' or 'c' y := alpha*A'*x + beta*y.
-
- Unchanged on exit.
-
- M - INTEGER.
- On entry, M specifies the number of rows of the matrix A.
- M must be at least zero.
- Unchanged on exit.
-
- N - INTEGER.
- On entry, N specifies the number of columns of the matrix A.
- N must be at least zero.
- Unchanged on exit.
-
- ALPHA - REAL .
- On entry, ALPHA specifies the scalar alpha.
- Unchanged on exit.
-
- A - REAL array of DIMENSION ( LDA, n ).
- Before entry, the leading m by n part of the array A must
- contain the matrix of coefficients.
- Unchanged on exit.
-
- LDA - 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 ).
- Unchanged on exit.
-
- X - REAL array of 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.
- Unchanged on exit.
-
- INCX - INTEGER.
- On entry, INCX specifies the increment for the elements of
- X. INCX must not be zero.
- Unchanged on exit.
-
- BETA - REAL .
- On entry, BETA specifies the scalar beta. When BETA is
- supplied as zero then Y need not be set on input.
- Unchanged on exit.
-
- Y - REAL array of 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 - INTEGER.
- On entry, INCY specifies the increment for the elements of
- Y. INCY must not be zero.
- Unchanged on exit.
-
-
- SUBROUTINE SGER(M,N,ALPHA,X,INCX,Y,INCY,A,LDA)
-
- SGER performs the rank 1 operation
-
- A := alpha*x*y' + 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.
-
- M - INTEGER.
- On entry, M specifies the number of rows of the matrix A.
- M must be at least zero.
- Unchanged on exit.
-
- N - INTEGER.
- On entry, N specifies the number of columns of the matrix A.
- N must be at least zero.
- Unchanged on exit.
-
- ALPHA - REAL .
- On entry, ALPHA specifies the scalar alpha.
- Unchanged on exit.
-
- X - REAL array of dimension at least
- ( 1 + ( m - 1 )*abs( INCX ) ).
- Before entry, the incremented array X must contain the m
- element vector x.
- Unchanged on exit.
-
- INCX - INTEGER.
- On entry, INCX specifies the increment for the elements of
- X. INCX must not be zero.
- Unchanged on exit.
-
- Y - REAL array of dimension at least
- ( 1 + ( n - 1 )*abs( INCY ) ).
- Before entry, the incremented array Y must contain the n
- element vector y.
- Unchanged on exit.
-
- INCY - INTEGER.
- On entry, INCY specifies the increment for the elements of
- Y. INCY must not be zero.
- Unchanged on exit.
-
- A - REAL array of 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 - 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 ).
- Unchanged on exit.
-
-
- SUBROUTINE SSBMV(UPLO,N,K,ALPHA,A,LDA,X,INCX,BETA,Y,INCY)
-
- SSBMV 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 symmetric band matrix, with k super-diagonals.
-
- UPLO - 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.
-
- Unchanged on exit.
-
- N - INTEGER.
- On entry, N specifies the order of the matrix A.
- N must be at least zero.
- Unchanged on exit.
-
- K - INTEGER.
- On entry, K specifies the number of super-diagonals of the
- matrix A. K must satisfy 0 .le. K.
- Unchanged on exit.
-
- ALPHA - REAL .
- On entry, ALPHA specifies the scalar alpha.
- Unchanged on exit.
-
- A - REAL array of 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 symmetric 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 symmetric 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 symmetric 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 symmetric 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
-
- Unchanged on exit.
-
- LDA - INTEGER.
- On entry, LDA specifies the first dimension of A as declared
- in the calling (sub) program. LDA must be at least
- ( k + 1 ).
- Unchanged on exit.
-
- X - REAL array of DIMENSION at least
- ( 1 + ( n - 1 )*abs( INCX ) ).
- Before entry, the incremented array X must contain the
- vector x.
- Unchanged on exit.
-
- INCX - INTEGER.
- On entry, INCX specifies the increment for the elements of
- X. INCX must not be zero.
- Unchanged on exit.
-
- BETA - REAL .
- On entry, BETA specifies the scalar beta.
- Unchanged on exit.
-
- Y - REAL array of 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.
-
- INCY - INTEGER.
- On entry, INCY specifies the increment for the elements of
- Y. INCY must not be zero.
- Unchanged on exit.
-
-
- SUBROUTINE SSPMV(UPLO,N,ALPHA,AP,X,INCX,BETA,Y,INCY)
-
- SSPMV 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 symmetric matrix, supplied in packed form.
-
- 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.
-
- Unchanged on exit.
-
- N - INTEGER.
- On entry, N specifies the order of the matrix A.
- N must be at least zero.
- Unchanged on exit.
-
- ALPHA - REAL .
- On entry, ALPHA specifies the scalar alpha.
- Unchanged on exit.
-
- AP - REAL array of 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 symmetric 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 part of the symmetric 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.
- Unchanged on exit.
-
- X - REAL array of dimension at least
- ( 1 + ( n - 1 )*abs( INCX ) ).
- Before entry, the incremented array X must contain the n
- element vector x.
- Unchanged on exit.
-
- INCX - INTEGER.
- On entry, INCX specifies the increment for the elements of
- X. INCX must not be zero.
- Unchanged on exit.
-
- BETA - REAL .
- On entry, BETA specifies the scalar beta. When BETA is
- supplied as zero then Y need not be set on input.
- Unchanged on exit.
-
- Y - REAL array of 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.
- Unchanged on exit.
-
-
- SUBROUTINE SSPR(UPLO,N,ALPHA,X,INCX,AP)
-
- SSPR performs the symmetric rank 1 operation
-
- A := alpha*x*x' + A,
-
- where alpha is a real scalar, x is an n element vector and A is an
- n by n symmetric matrix, supplied in packed form.
-
- 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.
-
- Unchanged on exit.
-
- N - INTEGER.
- On entry, N specifies the order of the matrix A.
- N must be at least zero.
- Unchanged on exit.
-
- ALPHA - REAL .
- On entry, ALPHA specifies the scalar alpha.
- Unchanged on exit.
-
- X - REAL array of dimension at least
- ( 1 + ( n - 1 )*abs( INCX ) ).
- Before entry, the incremented array X must contain the n
- element vector x.
- Unchanged on exit.
-
- INCX - INTEGER.
- On entry, INCX specifies the increment for the elements of
- X. INCX must not be zero.
- Unchanged on exit.
-
- AP - REAL array of 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 symmetric 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 symmetric 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.
-
-
- SUBROUTINE SSPR2(UPLO,N,ALPHA,X,INCX,Y,INCY,AP)
-
- SSPR2 performs the symmetric rank 2 operation
-
- A := alpha*x*y' + alpha*y*x' + A,
-
- where alpha is a scalar, x and y are n element vectors and A is an
- n by n symmetric matrix, supplied in packed form.
-
- 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.
-
- Unchanged on exit.
-
- N - INTEGER.
- On entry, N specifies the order of the matrix A.
- N must be at least zero.
- Unchanged on exit.
-
- ALPHA - REAL .
- On entry, ALPHA specifies the scalar alpha.
- Unchanged on exit.
-
- X - REAL array of dimension at least
- ( 1 + ( n - 1 )*abs( INCX ) ).
- Before entry, the incremented array X must contain the n
- element vector x.
- Unchanged on exit.
-
- INCX - INTEGER.
- On entry, INCX specifies the increment for the elements of
- X. INCX must not be zero.
- Unchanged on exit.
-
- Y - REAL array of dimension at least
- ( 1 + ( n - 1 )*abs( INCY ) ).
- Before entry, the incremented array Y must contain the n
- element vector y.
- Unchanged on exit.
-
- INCY - INTEGER.
- On entry, INCY specifies the increment for the elements of
- Y. INCY must not be zero.
- Unchanged on exit.
-
- AP - REAL array of 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 symmetric 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 symmetric 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.
-
-
- SUBROUTINE SSYMV(UPLO,N,ALPHA,A,LDA,X,INCX,BETA,Y,INCY)
-
- SSYMV 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 symmetric matrix.
-
- UPLO - 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.
-
- Unchanged on exit.
-
- N - INTEGER.
- On entry, N specifies the order of the matrix A.
- N must be at least zero.
- Unchanged on exit.
-
- ALPHA - REAL .
- On entry, ALPHA specifies the scalar alpha.
- Unchanged on exit.
-
- A - REAL array of 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 symmetric 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 part of the symmetric matrix and the strictly
- upper triangular part of A is not referenced.
- Unchanged on exit.
-
- LDA - 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 ).
- Unchanged on exit.
-
- X - REAL array of dimension at least
- ( 1 + ( n - 1 )*abs( INCX ) ).
- Before entry, the incremented array X must contain the n
- element vector x.
- Unchanged on exit.
-
- INCX - INTEGER.
- On entry, INCX specifies the increment for the elements of
- X. INCX must not be zero.
- Unchanged on exit.
-
- BETA - REAL .
- On entry, BETA specifies the scalar beta. When BETA is
- supplied as zero then Y need not be set on input.
- Unchanged on exit.
-
- Y - REAL array of 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.
- Unchanged on exit.
-
-
- SUBROUTINE SSYR(UPLO,N,ALPHA,X,INCX,A,LDA)
-
- SSYR performs the symmetric rank 1 operation
-
- A := alpha*x*x' + A,
-
- where alpha is a real scalar, x is an n element vector and A is an
- n by n symmetric matrix.
-
- UPLO - 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.
-
- Unchanged on exit.
-
- N - INTEGER.
- On entry, N specifies the order of the matrix A.
- N must be at least zero.
- Unchanged on exit.
-
- ALPHA - REAL .
- On entry, ALPHA specifies the scalar alpha.
- Unchanged on exit.
-
- X - REAL array of dimension at least
- ( 1 + ( n - 1 )*abs( INCX ) ).
- Before entry, the incremented array X must contain the n
- element vector x.
- Unchanged on exit.
-
- INCX - INTEGER.
- On entry, INCX specifies the increment for the elements of
- X. INCX must not be zero.
- Unchanged on exit.
-
- A - REAL array of 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 symmetric 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 symmetric 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.
-
- LDA - 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 ).
- Unchanged on exit.
-
-
- SUBROUTINE SSYR2(UPLO,N,ALPHA,X,INCX,Y,INCY,A,LDA)
-
- SSYR2 performs the symmetric rank 2 operation
-
- A := alpha*x*y' + alpha*y*x' + A,
-
- where alpha is a scalar, x and y are n element vectors and A is an n
- by n symmetric matrix.
-
- UPLO - 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.
-
- Unchanged on exit.
-
- N - INTEGER.
- On entry, N specifies the order of the matrix A.
- N must be at least zero.
- Unchanged on exit.
-
- ALPHA - REAL .
- On entry, ALPHA specifies the scalar alpha.
- Unchanged on exit.
-
- X - REAL array of dimension at least
- ( 1 + ( n - 1 )*abs( INCX ) ).
- Before entry, the incremented array X must contain the n
- element vector x.
- Unchanged on exit.
-
- INCX - INTEGER.
- On entry, INCX specifies the increment for the elements of
- X. INCX must not be zero.
- Unchanged on exit.
-
- Y - REAL array of dimension at least
- ( 1 + ( n - 1 )*abs( INCY ) ).
- Before entry, the incremented array Y must contain the n
- element vector y.
- Unchanged on exit.
-
- INCY - INTEGER.
- On entry, INCY specifies the increment for the elements of
- Y. INCY must not be zero.
- Unchanged on exit.
-
- A - REAL array of 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 symmetric 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 symmetric 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.
-
- LDA - 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 ).
- Unchanged on exit.
-
-
- SUBROUTINE STBMV(UPLO,TRANS,DIAG,N,K,A,LDA,X,INCX)
-
- STBMV performs one of the matrix-vector operations
-
- x := A*x, or x := A'*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.
-
- 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.
-
- Unchanged on exit.
-
- 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'*x.
-
- TRANS = 'C' or 'c' x := A'*x.
-
- Unchanged on exit.
-
- 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.
-
- Unchanged on exit.
-
- N - INTEGER.
- On entry, N specifies the order of the matrix A.
- N must be at least zero.
- Unchanged on exit.
-
- K - 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.
- Unchanged on exit.
-
- A - REAL array of 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.
- Unchanged on exit.
-
- LDA - INTEGER.
- On entry, LDA specifies the first dimension of A as declared
- in the calling (sub) program. LDA must be at least
- ( k + 1 ).
- Unchanged on exit.
-
- X - REAL array of 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
- tranformed vector x.
-
- INCX - INTEGER.
- On entry, INCX specifies the increment for the elements of
- X. INCX must not be zero.
- Unchanged on exit.
-
-
- SUBROUTINE STBSV(UPLO,TRANS,DIAG,N,K,A,LDA,X,INCX)
-
- STBSV solves one of the systems of equations
-
- A*x = b, or A'*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.
-
- No test for singularity or near-singularity is included in this
- routine. Such tests must be performed before calling this routine.
-
- 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.
-
- Unchanged on exit.
-
- TRANS - 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'*x = b.
-
- TRANS = 'C' or 'c' A'*x = b.
-
- Unchanged on exit.
-
- 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.
-
- Unchanged on exit.
-
- N - INTEGER.
- On entry, N specifies the order of the matrix A.
- N must be at least zero.
- Unchanged on exit.
-
- K - 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.
- Unchanged on exit.
-
- A - REAL array of 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.
- Unchanged on exit.
-
- LDA - INTEGER.
- On entry, LDA specifies the first dimension of A as declared
- in the calling (sub) program. LDA must be at least
- ( k + 1 ).
- Unchanged on exit.
-
- X - REAL array of 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 - INTEGER.
- On entry, INCX specifies the increment for the elements of
- X. INCX must not be zero.
- Unchanged on exit.
-
-
- SUBROUTINE STPMV(UPLO,TRANS,DIAG,N,AP,X,INCX)
-
- STPMV performs one of the matrix-vector operations
-
- x := A*x, or x := A'*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.
-
- 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.
-
- Unchanged on exit.
-
- 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'*x.
-
- TRANS = 'C' or 'c' x := A'*x.
-
- Unchanged on exit.
-
- 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.
-
- Unchanged on exit.
-
- N - INTEGER.
- On entry, N specifies the order of the matrix A.
- N must be at least zero.
- Unchanged on exit.
-
- AP - REAL array of 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.
- Unchanged on exit.
-
- X - REAL array of 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
- tranformed vector x.
-
- INCX - INTEGER.
- On entry, INCX specifies the increment for the elements of
- X. INCX must not be zero.
- Unchanged on exit.
-
-
- SUBROUTINE STPSV(UPLO,TRANS,DIAG,N,AP,X,INCX)
-
- STPSV solves one of the systems of equations
-
- A*x = b, or A'*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.
-
- 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.
-
- Unchanged on exit.
-
- TRANS - 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'*x = b.
-
- TRANS = 'C' or 'c' A'*x = b.
-
- Unchanged on exit.
-
- 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.
-
- Unchanged on exit.
-
- N - INTEGER.
- On entry, N specifies the order of the matrix A.
- N must be at least zero.
- Unchanged on exit.
-
- AP - REAL array of 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.
- Unchanged on exit.
-
- X - REAL array of 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 - INTEGER.
- On entry, INCX specifies the increment for the elements of
- X. INCX must not be zero.
- Unchanged on exit.
-
-
- SUBROUTINE STRMV(UPLO,TRANS,DIAG,N,A,LDA,X,INCX)
-
- STRMV performs one of the matrix-vector operations
-
- x := A*x, or x := TRANSPOSE(A)*x,
-
- where x is an n element vector and A is an n by n unit, or non-unit,
- upper or lower triangular matrix.
-
- UPLO Input, CHARACTER*1 UPLO.
- 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 Input, CHARACTER*1 TRANS.
- On entry, TRANS specifies the operation to be performed as follows:
-
- TRANS = 'N' or 'n' x := A*x.
-
- TRANS = 'T' or 't' x := A'*x.
-
- TRANS = 'C' or 'c' x := A'*x.
-
- DIAG Input, CHARACTER*1 DIAG.
- 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 Input, INTEGER N.
- On entry, N specifies the order of the matrix A.
- N must be at least zero.
-
- A Input, REAL A(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.
-
- LDA Input, INTEGER LDA.
- 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 Input/output, REAL X(N).
- Before entry, the incremented array X must contain the n
- element vector x. On exit, X is overwritten with the
- tranformed vector x.
-
- INCX Input, INTEGER INCX.
- On entry, INCX specifies the increment for the elements of
- X. INCX must not be zero.
-
-
- SUBROUTINE STRSV(UPLO,TRANS,DIAG,N,A,LDA,X,INCX)
-
- STRSV solves one of the systems of equations
-
- A*x = b, or A'*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.
-
- 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.
-
- Unchanged on exit.
-
- TRANS 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'*x = b.
-
- TRANS = 'C' or 'c' A'*x = b.
-
- Unchanged on exit.
-
- 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.
-
- Unchanged on exit.
-
- N INTEGER.
- On entry, N specifies the order of the matrix A.
- N must be at least zero.
- Unchanged on exit.
-
- A REAL array of 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.
- Unchanged on exit.
-
- LDA 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 ).
- Unchanged on exit.
-
- X REAL array of 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 INTEGER.
- On entry, INCX specifies the increment for the elements of
- X. INCX must not be zero.
- Unchanged on exit.
-
-
- SUBROUTINE XERBLA(SRNAME,INFO)
-
-
- XERBLA is an error handler for the Level 2 BLAS routines.
-
- It is called by the Level 2 BLAS routines if an input parameter is
- invalid.
-
- SRNAME - CHARACTER*6.
- On entry, SRNAME specifies the name of the routine which
- called XERBLA.
-
- INFO - INTEGER.
- On entry, INFO specifies the position of the invalid
- parameter in the parameter-list of the calling routine.
-
-
- LOGICAL FUNCTION LSAME ( CA, CB )
-
- LSAME tests if CA is the same letter as CB regardless of case.
- CB is assumed to be an upper case letter. LSAME returns .TRUE. if
- CA is either the same as CB or the equivalent lower case letter.
-
- N.B. This version of the routine is only correct for ASCII code.
- Installers must modify the routine for other character-codes.
-
- For EBCDIC systems the constant IOFF must be changed to -64.
- For CDC systems using 6-12 bit representations, the system-
- specific code in comments must be activated.
-
- CA - CHARACTER*1
-
- CB - CHARACTER*1
- On entry, CA and CB specify characters to be compared.
- Unchanged on exit.
-
-
- SUBROUTINE CGBMV(TRANS,M,N,KL,KU,ALPHA,A,LDA,X,INCX,BETA,Y,INCY)
-
- CGBMV performs one of the matrix-vector operations
-
- y := alpha*A*x + beta*y, or y := alpha*A'*x + beta*y, or
-
- y := alpha*conjg( A' )*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.
-
- TRANS - 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'*x + beta*y.
-
- TRANS = 'C' or 'c' y := alpha*conjg( A' )*x + beta*y.
-
- Unchanged on exit.
-
- M - INTEGER.
- On entry, M specifies the number of rows of the matrix A.
- M must be at least zero.
- Unchanged on exit.
-
- N - INTEGER.
- On entry, N specifies the number of columns of the matrix A.
- N must be at least zero.
- Unchanged on exit.
-
- KL - INTEGER.
- On entry, KL specifies the number of sub-diagonals of the
- matrix A. KL must satisfy 0 .le. KL.
- Unchanged on exit.
-
- KU - INTEGER.
- On entry, KU specifies the number of super-diagonals of the
- matrix A. KU must satisfy 0 .le. KU.
- Unchanged on exit.
-
- ALPHA - COMPLEX .
- On entry, ALPHA specifies the scalar alpha.
- Unchanged on exit.
-
- A - COMPLEX array of 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
-
- Unchanged on exit.
-
- LDA - 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 ).
- Unchanged on exit.
-
- X - COMPLEX array of 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.
- Unchanged on exit.
-
- INCX - INTEGER.
- On entry, INCX specifies the increment for the elements of
- X. INCX must not be zero.
- Unchanged on exit.
-
- BETA - COMPLEX .
- On entry, BETA specifies the scalar beta. When BETA is
- supplied as zero then Y need not be set on input.
- Unchanged on exit.
-
- Y - COMPLEX array of 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 - INTEGER.
- On entry, INCY specifies the increment for the elements of
- Y. INCY must not be zero.
- Unchanged on exit.
-
-
-
- SUBROUTINE CGEMV(TRANS,M,N,ALPHA,A,LDA,X,INCX,BETA,Y,INCY)
-
- CGEMV performs one of the matrix-vector operations
-
- y := alpha*A*x + beta*y, or y := alpha*A'*x + beta*y, or
-
- y := alpha*conjg( A' )*x + beta*y,
-
- where alpha and beta are scalars, x and y are vectors and A is an
- m by n matrix.
-
- TRANS - 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'*x + beta*y.
-
- TRANS = 'C' or 'c' y := alpha*conjg( A' )*x + beta*y.
-
- Unchanged on exit.
-
- M - INTEGER.
- On entry, M specifies the number of rows of the matrix A.
- M must be at least zero.
- Unchanged on exit.
-
- N - INTEGER.
- On entry, N specifies the number of columns of the matrix A.
- N must be at least zero.
- Unchanged on exit.
-
- ALPHA - COMPLEX .
- On entry, ALPHA specifies the scalar alpha.
- Unchanged on exit.
-
- A - COMPLEX array of DIMENSION ( LDA, n ).
- Before entry, the leading m by n part of the array A must
- contain the matrix of coefficients.
- Unchanged on exit.
-
- LDA - 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 ).
- Unchanged on exit.
-
- X - COMPLEX array of 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.
- Unchanged on exit.
-
- INCX - INTEGER.
- On entry, INCX specifies the increment for the elements of
- X. INCX must not be zero.
- Unchanged on exit.
-
- BETA - COMPLEX .
- On entry, BETA specifies the scalar beta. When BETA is
- supplied as zero then Y need not be set on input.
- Unchanged on exit.
-
- Y - COMPLEX array of 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 - INTEGER.
- On entry, INCY specifies the increment for the elements of
- Y. INCY must not be zero.
- Unchanged on exit.
-
-
- SUBROUTINE CGERC(M,N,ALPHA,X,INCX,Y,INCY,A,LDA)
-
- CGERC performs the rank 1 operation
-
- A := alpha*x*conjg( y' ) + 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.
-
- M - INTEGER.
- On entry, M specifies the number of rows of the matrix A.
- M must be at least zero.
- Unchanged on exit.
-
- N - INTEGER.
- On entry, N specifies the number of columns of the matrix A.
- N must be at least zero.
- Unchanged on exit.
-
- ALPHA - COMPLEX .
- On entry, ALPHA specifies the scalar alpha.
- Unchanged on exit.
-
- X - COMPLEX array of dimension at least
- ( 1 + ( m - 1 )*abs( INCX ) ).
- Before entry, the incremented array X must contain the m
- element vector x.
- Unchanged on exit.
-
- INCX - INTEGER.
- On entry, INCX specifies the increment for the elements of
- X. INCX must not be zero.
- Unchanged on exit.
-
- Y - COMPLEX array of dimension at least
- ( 1 + ( n - 1 )*abs( INCY ) ).
- Before entry, the incremented array Y must contain the n
- element vector y.
- Unchanged on exit.
-
- INCY - INTEGER.
- On entry, INCY specifies the increment for the elements of
- Y. INCY must not be zero.
- Unchanged on exit.
-
- A - COMPLEX array of 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 - 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 ).
- Unchanged on exit.
-
-
- SUBROUTINE CGERU(M,N,ALPHA,X,INCX,Y,INCY,A,LDA)
-
- CGERU performs the rank 1 operation
-
- A := alpha*x*y' + 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.
-
- M - INTEGER.
- On entry, M specifies the number of rows of the matrix A.
- M must be at least zero.
- Unchanged on exit.
-
- N - INTEGER.
- On entry, N specifies the number of columns of the matrix A.
- N must be at least zero.
- Unchanged on exit.
-
- ALPHA - COMPLEX .
- On entry, ALPHA specifies the scalar alpha.
- Unchanged on exit.
-
- X - COMPLEX array of dimension at least
- ( 1 + ( m - 1 )*abs( INCX ) ).
- Before entry, the incremented array X must contain the m
- element vector x.
- Unchanged on exit.
-
- INCX - INTEGER.
- On entry, INCX specifies the increment for the elements of
- X. INCX must not be zero.
- Unchanged on exit.
-
- Y - COMPLEX array of dimension at least
- ( 1 + ( n - 1 )*abs( INCY ) ).
- Before entry, the incremented array Y must contain the n
- element vector y.
- Unchanged on exit.
-
- INCY - INTEGER.
- On entry, INCY specifies the increment for the elements of
- Y. INCY must not be zero.
- Unchanged on exit.
-
- A - COMPLEX array of 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 - 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 ).
- Unchanged on exit.
-
-
- SUBROUTINE CHBMV(UPLO,N,K,ALPHA,A,LDA,X,INCX,BETA,Y,INCY)
-
- 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.
-
- UPLO - 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.
-
- Unchanged on exit.
-
- N - INTEGER.
- On entry, N specifies the order of the matrix A.
- N must be at least zero.
- Unchanged on exit.
-
- K - INTEGER.
- On entry, K specifies the number of super-diagonals of the
- matrix A. K must satisfy 0 .le. K.
- Unchanged on exit.
-
- ALPHA - COMPLEX .
- On entry, ALPHA specifies the scalar alpha.
- Unchanged on exit.
-
- A - COMPLEX array of 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 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.
- Unchanged on exit.
-
- LDA - INTEGER.
- On entry, LDA specifies the first dimension of A as declared
- in the calling (sub) program. LDA must be at least
- ( k + 1 ).
- Unchanged on exit.
-
- X - COMPLEX array of DIMENSION at least
- ( 1 + ( n - 1 )*abs( INCX ) ).
- Before entry, the incremented array X must contain the
- vector x.
- Unchanged on exit.
-
- INCX - INTEGER.
- On entry, INCX specifies the increment for the elements of
- X. INCX must not be zero.
- Unchanged on exit.
-
- BETA - COMPLEX .
- On entry, BETA specifies the scalar beta.
- Unchanged on exit.
-
- Y - COMPLEX array of 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.
-
- INCY - INTEGER.
- On entry, INCY specifies the increment for the elements of
- Y. INCY must not be zero.
- Unchanged on exit.
-
-
- SUBROUTINE CHEMV(UPLO,N,ALPHA,A,LDA,X,INCX,BETA,Y,INCY)
-
- 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.
-
- UPLO - 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.
-
- Unchanged on exit.
-
- N - INTEGER.
- On entry, N specifies the order of the matrix A.
- N must be at least zero.
- Unchanged on exit.
-
- ALPHA - COMPLEX .
- On entry, ALPHA specifies the scalar alpha.
- Unchanged on exit.
-
- A - COMPLEX array of 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.
- 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.
- Note that the imaginary parts of the diagonal elements need
- not be set and are assumed to be zero.
- Unchanged on exit.
-
- LDA - 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 ).
- Unchanged on exit.
-
- X - COMPLEX array of dimension at least
- ( 1 + ( n - 1 )*abs( INCX ) ).
- Before entry, the incremented array X must contain the n
- element vector x.
- Unchanged on exit.
-
- INCX - INTEGER.
- On entry, INCX specifies the increment for the elements of
- X. INCX must not be zero.
- Unchanged on exit.
-
- BETA - COMPLEX .
- On entry, BETA specifies the scalar beta. When BETA is
- supplied as zero then Y need not be set on input.
- Unchanged on exit.
-
- Y - COMPLEX array of 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.
- Unchanged on exit.
-
-
- SUBROUTINE CHER(UPLO,N,ALPHA,X,INCX,A,LDA)
-
- CHER performs the hermitian rank 1 operation
-
- A := alpha*x*conjg( x' ) + A,
-
- where alpha is a real scalar, x is an n element vector and A is an
- n by n hermitian matrix.
-
- UPLO - 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.
-
- Unchanged on exit.
-
- N - INTEGER.
- On entry, N specifies the order of the matrix A.
- N must be at least zero.
- Unchanged on exit.
-
- ALPHA - REAL .
- On entry, ALPHA specifies the scalar alpha.
- Unchanged on exit.
-
- X - COMPLEX array of dimension at least
- ( 1 + ( n - 1 )*abs( INCX ) ).
- Before entry, the incremented array X must contain the n
- element vector x.
- Unchanged on exit.
-
- INCX - INTEGER.
- On entry, INCX specifies the increment for the elements of
- X. INCX must not be zero.
- Unchanged on exit.
-
- A - COMPLEX array of 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.
- 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.
-
- LDA - 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 ).
- Unchanged on exit.
-
-
- SUBROUTINE CHER2(UPLO,N,ALPHA,X,INCX,Y,INCY,A,LDA)
-
- CHER2 performs the hermitian rank 2 operation
-
- A := alpha*x*conjg( y' ) + conjg( alpha )*y*conjg( x' ) + A,
-
- where alpha is a scalar, x and y are n element vectors and A is an n
- by n hermitian matrix.
-
- UPLO - 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.
-
- Unchanged on exit.
-
- N - INTEGER.
- On entry, N specifies the order of the matrix A.
- N must be at least zero.
- Unchanged on exit.
-
- ALPHA - COMPLEX .
- On entry, ALPHA specifies the scalar alpha.
- Unchanged on exit.
-
- X - COMPLEX array of dimension at least
- ( 1 + ( n - 1 )*abs( INCX ) ).
- Before entry, the incremented array X must contain the n
- element vector x.
- Unchanged on exit.
-
- INCX - INTEGER.
- On entry, INCX specifies the increment for the elements of
- X. INCX must not be zero.
- Unchanged on exit.
-
- Y - COMPLEX array of dimension at least
- ( 1 + ( n - 1 )*abs( INCY ) ).
- Before entry, the incremented array Y must contain the n
- element vector y.
- Unchanged on exit.
-
- INCY - INTEGER.
- On entry, INCY specifies the increment for the elements of
- Y. INCY must not be zero.
- Unchanged on exit.
-
- A - COMPLEX array of 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.
- 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.
-
- LDA - 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 ).
- Unchanged on exit.
-
-
- SUBROUTINE CHPMV(UPLO,N,ALPHA,AP,X,INCX,BETA,Y,INCY)
-
- 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.
-
- 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.
-
- Unchanged on exit.
-
- N - INTEGER.
- On entry, N specifies the order of the matrix A.
- N must be at least zero.
- Unchanged on exit.
-
- ALPHA - COMPLEX .
- On entry, ALPHA specifies the scalar alpha.
- Unchanged on exit.
-
- AP - COMPLEX array of 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.
- 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.
- Note that the imaginary parts of the diagonal elements need
- not be set and are assumed to be zero.
- Unchanged on exit.
-
- X - COMPLEX array of dimension at least
- ( 1 + ( n - 1 )*abs( INCX ) ).
- Before entry, the incremented array X must contain the n
- element vector x.
- Unchanged on exit.
-
- INCX - INTEGER.
- On entry, INCX specifies the increment for the elements of
- X. INCX must not be zero.
- Unchanged on exit.
-
- BETA - COMPLEX .
- On entry, BETA specifies the scalar beta. When BETA is
- supplied as zero then Y need not be set on input.
- Unchanged on exit.
-
- Y - COMPLEX array of 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.
- Unchanged on exit.
-
-
- SUBROUTINE CHPR(UPLO,N,ALPHA,X,INCX,AP)
-
- CHPR performs the hermitian rank 1 operation
-
- A := alpha*x*conjg( x' ) + 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.
-
- 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.
-
- Unchanged on exit.
-
- N - INTEGER.
- On entry, N specifies the order of the matrix A.
- N must be at least zero.
- Unchanged on exit.
-
- ALPHA - REAL .
- On entry, ALPHA specifies the scalar alpha.
- Unchanged on exit.
-
- X - COMPLEX array of dimension at least
- ( 1 + ( n - 1 )*abs( INCX ) ).
- Before entry, the incremented array X must contain the n
- element vector x.
- Unchanged on exit.
-
- INCX - INTEGER.
- On entry, INCX specifies the increment for the elements of
- X. INCX must not be zero.
- Unchanged on exit.
-
- AP - COMPLEX array of 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.
-
-
- SUBROUTINE CHPR2(UPLO,N,ALPHA,X,INCX,Y,INCY,AP)
-
- CHPR2 performs the hermitian rank 2 operation
-
- A := alpha*x*conjg( y' ) + conjg( alpha )*y*conjg( x' ) + 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.
-
- 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.
-
- Unchanged on exit.
-
- N - INTEGER.
- On entry, N specifies the order of the matrix A.
- N must be at least zero.
- Unchanged on exit.
-
- ALPHA - COMPLEX .
- On entry, ALPHA specifies the scalar alpha.
- Unchanged on exit.
-
- X - COMPLEX array of dimension at least
- ( 1 + ( n - 1 )*abs( INCX ) ).
- Before entry, the incremented array X must contain the n
- element vector x.
- Unchanged on exit.
-
- INCX - INTEGER.
- On entry, INCX specifies the increment for the elements of
- X. INCX must not be zero.
- Unchanged on exit.
-
- Y - COMPLEX array of dimension at least
- ( 1 + ( n - 1 )*abs( INCY ) ).
- Before entry, the incremented array Y must contain the n
- element vector y.
- Unchanged on exit.
-
- INCY - INTEGER.
- On entry, INCY specifies the increment for the elements of
- Y. INCY must not be zero.
- Unchanged on exit.
-
- AP - COMPLEX array of 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.
-
-
- SUBROUTINE CTBMV(UPLO,TRANS,DIAG,N,K,A,LDA,X,INCX)
-
- CTBMV performs one of the matrix-vector operations
-
- x := A*x, or x := A'*x, or x := conjg( A' )*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.
-
- 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.
-
- Unchanged on exit.
-
- 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'*x.
-
- TRANS = 'C' or 'c' x := conjg( A' )*x.
-
- Unchanged on exit.
-
- 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.
-
- Unchanged on exit.
-
- N - INTEGER.
- On entry, N specifies the order of the matrix A.
- N must be at least zero.
- Unchanged on exit.
-
- K - 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.
- Unchanged on exit.
-
- A - COMPLEX array of 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.
- Unchanged on exit.
-
- LDA - INTEGER.
- On entry, LDA specifies the first dimension of A as declared
- in the calling (sub) program. LDA must be at least
- ( k + 1 ).
- Unchanged on exit.
-
- X - COMPLEX array of 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
- tranformed vector x.
-
- INCX - INTEGER.
- On entry, INCX specifies the increment for the elements of
- X. INCX must not be zero.
- Unchanged on exit.
-
-
- SUBROUTINE CTBSV(UPLO,TRANS,DIAG,N,K,A,LDA,X,INCX)
-
- CTBSV solves one of the systems of equations
-
- A*x = b, or A'*x = b, or conjg( A' )*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.
-
- No test for singularity or near-singularity is included in this
- routine. Such tests must be performed before calling this routine.
-
- 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.
-
- Unchanged on exit.
-
- TRANS - 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'*x = b.
-
- TRANS = 'C' or 'c' conjg( A' )*x = b.
-
- Unchanged on exit.
-
- 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.
-
- Unchanged on exit.
-
- N - INTEGER.
- On entry, N specifies the order of the matrix A.
- N must be at least zero.
- Unchanged on exit.
-
- K - 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.
- Unchanged on exit.
-
- A - COMPLEX array of 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.
- Unchanged on exit.
-
- LDA - INTEGER.
- On entry, LDA specifies the first dimension of A as declared
- in the calling (sub) program. LDA must be at least
- ( k + 1 ).
- Unchanged on exit.
-
- X - COMPLEX array of 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 - INTEGER.
- On entry, INCX specifies the increment for the elements of
- X. INCX must not be zero.
- Unchanged on exit.
-
-
- SUBROUTINE CTPMV(UPLO,TRANS,DIAG,N,AP,X,INCX)
-
- CTPMV performs one of the matrix-vector operations
-
- x := A*x, or x := A'*x, or x := conjg( A' )*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.
-
- 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.
-
- Unchanged on exit.
-
- 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'*x.
-
- TRANS = 'C' or 'c' x := conjg( A' )*x.
-
- Unchanged on exit.
-
- 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.
-
- Unchanged on exit.
-
- N - INTEGER.
- On entry, N specifies the order of the matrix A.
- N must be at least zero.
- Unchanged on exit.
-
- AP - COMPLEX array of 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.
- Unchanged on exit.
-
- X - COMPLEX array of 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
- tranformed vector x.
-
- INCX - INTEGER.
- On entry, INCX specifies the increment for the elements of
- X. INCX must not be zero.
- Unchanged on exit.
-
-
- SUBROUTINE CTPSV(UPLO,TRANS,DIAG,N,AP,X,INCX)
-
- CTPSV solves one of the systems of equations
-
- A*x = b, or A'*x = b, or conjg( A' )*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.
-
- 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.
-
- Unchanged on exit.
-
- TRANS - 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'*x = b.
-
- TRANS = 'C' or 'c' conjg( A' )*x = b.
-
- Unchanged on exit.
-
- 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.
-
- Unchanged on exit.
-
- N - INTEGER.
- On entry, N specifies the order of the matrix A.
- N must be at least zero.
- Unchanged on exit.
-
- AP - COMPLEX array of 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.
- Unchanged on exit.
-
- X - COMPLEX array of 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 - INTEGER.
- On entry, INCX specifies the increment for the elements of
- X. INCX must not be zero.
- Unchanged on exit.
-
-
- SUBROUTINE CTRMV(UPLO,TRANS,DIAG,N,A,LDA,X,INCX)
-
- CTRMV performs one of the matrix-vector operations
-
- x := A*x, or x := A'*x, or x := conjg( A' )*x,
-
- where x is an n element vector and A is an n by n unit, or non-unit,
- upper or lower triangular matrix.
-
- 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.
-
- Unchanged on exit.
-
- 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'*x.
-
- TRANS = 'C' or 'c' x := conjg( A' )*x.
-
- Unchanged on exit.
-
- 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.
-
- Unchanged on exit.
-
- N - INTEGER.
- On entry, N specifies the order of the matrix A.
- N must be at least zero.
- Unchanged on exit.
-
- A - COMPLEX array of 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.
- Unchanged on exit.
-
- LDA - 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 ).
- Unchanged on exit.
-
- X - COMPLEX array of 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
- tranformed vector x.
-
- INCX - INTEGER.
- On entry, INCX specifies the increment for the elements of
- X. INCX must not be zero.
- Unchanged on exit.
-
-
- SUBROUTINE CTRSV(UPLO,TRANS,DIAG,N,A,LDA,X,INCX)
-
- CTRSV solves one of the systems of equations
-
- A*x = b, or A'*x = b, or conjg( A' )*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.
-
- 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.
-
- Unchanged on exit.
-
- TRANS - 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'*x = b.
-
- TRANS = 'C' or 'c' conjg( A' )*x = b.
-
- Unchanged on exit.
-
- 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.
-
- Unchanged on exit.
-
- N - INTEGER.
- On entry, N specifies the order of the matrix A.
- N must be at least zero.
- Unchanged on exit.
-
- A - COMPLEX array of 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.
- Unchanged on exit.
-
- LDA - 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 ).
- Unchanged on exit.
-
- X - COMPLEX array of 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 - INTEGER.
- On entry, INCX specifies the increment for the elements of
- X. INCX must not be zero.
- Unchanged on exit.
-
- *********************************************************************
-
- Level 3 BLAS:
-
- *********************************************************************
-
-
- The Level 3 BLAS were designed to carry out matrix-matrix operations
- or to solve a linear system of equations where there may be multiple
- right hand sides.
-
-
- SUBROUTINE SGEMM(TRANSA,TRANSB,M,N,K,ALPHA,A,LDA,B,LDB,BETA,C,LDC)
-
- SGEMM performs one of the matrix-matrix operations
-
- C := alpha*op( A )*op( B ) + beta*C,
-
- where op( X ) is one of
-
- op( X ) = X or op( X ) = X',
-
- alpha and beta are scalars, and A, B and C are matrices, with op( A )
- an m by k matrix, op( B ) a k by n matrix and C an m by n matrix.
-
- TRANSA - CHARACTER*1.
- On entry, TRANSA specifies the form of op( A ) to be used in
- the matrix multiplication as follows:
-
- TRANSA = 'N' or 'n', op( A ) = A.
-
- TRANSA = 'T' or 't', op( A ) = A'.
-
- TRANSA = 'C' or 'c', op( A ) = A'.
-
- Unchanged on exit.
-
- TRANSB - CHARACTER*1.
- On entry, TRANSB specifies the form of op( B ) to be used in
- the matrix multiplication as follows:
-
- TRANSA = 'N' or 'n', op( B ) = B.
-
- TRANSA = 'T' or 't', op( B ) = B'.
-
- TRANSA = 'C' or 'c', op( B ) = B'.
-
- Unchanged on exit.
-
- M - INTEGER.
- On entry, M specifies the number of rows of the matrix
- op( A ) and of the matrix C. M must be at least zero.
- Unchanged on exit.
-
- N - INTEGER.
- On entry, N specifies the number of columns of the matrix
- op( B ) and the number of columns of the matrix C. N must be
- at least zero.
- Unchanged on exit.
-
- K - INTEGER.
- On entry, K specifies the number of columns of the matrix
- op( A ) and the number of rows of the matrix op( B ). K must
- be at least zero.
- Unchanged on exit.
-
- ALPHA - REAL .
- On entry, ALPHA specifies the scalar alpha.
- Unchanged on exit.
-
- A - REAL array of DIMENSION ( LDA, ka ), where ka is
- k when TRANSA = 'N' or 'n', and is m otherwise.
- Before entry with TRANSA = 'N' or 'n', the leading m by k
- part of the array A must contain the matrix A, otherwise
- the leading k by m part of the array A must contain the
- matrix A.
- Unchanged on exit.
-
- LDA - INTEGER.
- On entry, LDA specifies the first dimension of A as declared
- in the calling (sub) program. When TRANSA = 'N' or 'n' then
- LDA must be at least max( 1, m ), otherwise LDA must be at
- least max( 1, k ).
- Unchanged on exit.
-
- B - REAL array of DIMENSION ( LDB, kb ), where kb is
- n when TRANSB = 'N' or 'n', and is k otherwise.
- Before entry with TRANSB = 'N' or 'n', the leading k by n
- part of the array B must contain the matrix B, otherwise
- the leading n by k part of the array B must contain the
- matrix B.
- Unchanged on exit.
-
- LDB - INTEGER.
- On entry, LDB specifies the first dimension of B as declared
- in the calling (sub) program. When TRANSB = 'N' or 'n' then
- LDB must be at least max( 1, k ), otherwise LDB must be at
- least max( 1, n ).
- Unchanged on exit.
-
- BETA - REAL .
- On entry, BETA specifies the scalar beta. When BETA is
- supplied as zero then C need not be set on input.
- Unchanged on exit.
-
- C - REAL array of DIMENSION ( LDC, n ).
- Before entry, the leading m by n part of the array C must
- contain the matrix C, except when beta is zero, in which
- case C need not be set on entry.
- On exit, the array C is overwritten by the m by n matrix
- ( alpha*op( A )*op( B ) + beta*C ).
-
- LDC - INTEGER.
- On entry, LDC specifies the first dimension of C as declared
- in the calling (sub) program. LDC must be at least
- max( 1, m ).
- Unchanged on exit.
-
-
- SUBROUTINE SSYMM(SIDE,UPLO,TRANSB,M,N,ALPHA,A,LDA,B,LDB,BETA,C,LDC)
-
- SSYMM performs one of the matrix-matrix operations
-
- C := alpha*A*op( B ) + beta*C,
-
- or
-
- C := alpha*op( B )*A + beta*C,
-
- where op( B ) is one of
-
- op( B ) = B or op( B ) = B',
-
- alpha and beta are scalars, A is a symmetric matrix, op( B ) is an
- m by n matrix and C is an m by n matrix.
-
- SIDE - CHARACTER*1.
- On entry, SIDE specifies whether the symmetric matrix A
- appears on the left or right in the operation as follows:
-
- SIDE = 'L' or 'l' C := alpha*A*op( B ) + beta*C,
-
- SIDE = 'R' or 'r' C := alpha*op( B )*A + beta*C,
-
- Unchanged on exit.
-
- UPLO - CHARACTER*1.
- On entry, UPLO specifies whether the upper of lower
- triangular part of the symmetric matrix A is to be
- referenced as follows:
-
- UPLO = 'U' or 'u' Only the upper triangular part of the
- symmetric matrix is to be referenced.
-
- UPLO = 'L' or 'l' Only the lower triangular part of the
- symmetric matrix is to be referenced.
-
- Unchanged on exit.
-
- TRANSB - CHARACTER*1.
- On entry, TRANSB specifies the form of op( B ) to be used
- in the matrix multiplication as follows:
-
- TRANSB = 'N' or 'n' op( B ) = B.
-
- TRANSB = 'T' or 't' op( B ) = B'.
-
- TRANSB = 'C' or 'c' op( B ) = B'.
-
- Unchanged on exit.
-
- M - INTEGER.
- On entry, M specifies the number of rows of the matrix C.
- M must be at least zero.
- Unchanged on exit.
-
- N - INTEGER.
- On entry, N specifies the number of columns of the matrix C.
- N must be at least zero.
- Unchanged on exit.
-
- ALPHA - REAL .
- On entry, ALPHA specifies the scalar alpha.
- Unchanged on exit.
-
- A - REAL array of DIMENSION ( LDA, ka ), where ka is
- m when SIDE = 'L' or 'l' and is n otherwise.
- Before entry with SIDE = 'L' or 'l', the m by m part of
- the array A must contain the symmetric matrix, such that
- when UPLO = 'U' or 'u', the leading m by m upper triangular
- part of the array A must contain the upper triangular part
- of the symmetric matrix and the strictly lower triangular
- part of A is not referenced, and when UPLO = 'L' or 'l',
- the leading m by m lower triangular part of the array A
- must contain the lower triangular part of the symmetric
- matrix and the strictly upper triangular part of A is not
- referenced.
- Before entry with SIDE = 'R' or 'r', the n by n part of
- the array A must contain the symmetric matrix, such that
- when UPLO = 'U' or 'u', the leading n by n upper triangular
- part of the array A must contain the upper triangular part
- of the symmetric matrix and the strictly lower triangular
- part of A is not referenced, and when UPLO = 'L' or 'l',
- the leading n by n lower triangular part of the array A
- must contain the lower triangular part of the symmetric
- matrix and the strictly upper triangular part of A is not
- referenced.
- Unchanged on exit.
-
- LDA - INTEGER.
- On entry, LDA specifies the first dimension of A as declared
- in the calling (sub) program. When SIDE = 'L' or 'l' then
- LDA must be at least max( 1, m ), otherwise LDA must be at
- least max( 1, n ).
- Unchanged on exit.
-
- B - REAL array of DIMENSION ( LDB, kb ), where kb is
- n when TRANSB = 'N' or 'n' and is m otherwise.
- Before entry with TRANSB = 'N' or 'n', the leading m by n
- part of the array B must contain the matrix B. Before entry
- with TRANSB = 'T' or 't' or 'C' or 'c', the leading n by m
- part of the array B must contain the matrix B.
- Unchanged on exit.
-
- LDB - INTEGER.
- On entry, LDB specifies the first dimension of B as declared
- in the calling (sub) program. When TRANSB = 'N' or 'n'
- then LDB must be at least max( 1, m ), otherwise LDB must
- be at least max( 1, n ).
- Unchanged on exit.
-
- BETA - REAL .
- On entry, BETA specifies the scalar beta. When BETA is
- supplied as zero then C need not be set on input.
- Unchanged on exit.
-
- C - REAL array of DIMENSION ( LDC, n ).
- Before entry, the leading m by n part of the array C must
- contain the matrix C, except when beta is zero, in which
- case C need not be set on entry.
- On exit, the array C is overwritten by the m by n updated
- matrix.
-
- LDC - INTEGER.
- On entry, LDC specifies the first dimension of C as declared
- in the calling (sub) program. LDC must be at least
- max( 1, m ).
- Unchanged on exit.
-
-
- SUBROUTINE SSYRK(UPLO,TRANSA,N,K,ALPHA,A,LDA,BETA,C,LDC)
-
- SSYRK performs one of the symmetric rank k operations
-
- C := alpha*A*A' + beta*C,
-
- or
-
- C := alpha*A'*A + beta*C,
-
- where alpha and beta are scalars, C is an n by n symmetric matrix
- and A is an n by k matrix in the first case and a k by n matrix
- in the second case.
-
- UPLO - CHARACTER*1.
- On entry, UPLO specifies whether the upper or lower
- triangular part of the array C is to be referenced as
- follows:
-
- UPLO = 'U' or 'u' Only the upper triangular part of C
- is to be referenced.
-
- UPLO = 'L' or 'l' Only the lower triangular part of C
- is to be referenced.
-
- Unchanged on exit.
-
- TRANSA - CHARACTER*1.
- On entry, TRANSA specifies the operation to be performed as
- follows:
-
- TRANSA = 'N' or 'n' C := alpha*A*A' + beta*C.
-
- TRANSA = 'T' or 't' C := alpha*A'*A + beta*C.
-
- TRANSA = 'C' or 'c' C := alpha*A'*A + beta*C.
-
- Unchanged on exit.
-
- N - INTEGER.
- On entry, N specifies the order of the matrix C. N must be
- at least zero.
- Unchanged on exit.
-
- K - INTEGER.
- On entry with TRANSA = 'N' or 'n', K specifies the number
- of columns of the matrix A, and on entry with
- TRANSA = 'T' or 't' or 'C' or 'c', K specifies the number
- of rows of the matrix A. K must be at least zero.
- Unchanged on exit.
-
- ALPHA - REAL .
- On entry, ALPHA specifies the scalar alpha.
- Unchanged on exit.
-
- A - REAL array of DIMENSION ( LDA, ka ), where ka is
- k when TRANSA = 'N' or 'n', and is n otherwise.
- Before entry with TRANSA = 'N' or 'n', the leading n by k
- part of the array A must contain the matrix A, otherwise
- the leading k by n part of the array A must contain the
- matrix A.
- Unchanged on exit.
-
- LDA - INTEGER.
- On entry, LDA specifies the first dimension of A as declared
- in the calling (sub) program. When TRANSA = 'N' or 'n'
- then LDA must be at least max( 1, n ), otherwise LDA must
- be at least max( 1, k ).
- Unchanged on exit.
-
- BETA - REAL .
- On entry, BETA specifies the scalar beta.
- Unchanged on exit.
-
- C - REAL array of DIMENSION ( LDC, n ).
- Before entry with UPLO = 'U' or 'u', the leading n by n
- upper triangular part of the array C must contain the upper
- triangular part of the symmetric matrix and the strictly
- lower triangular part of C is not referenced. On exit, the
- upper triangular part of the array C 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 C must contain the lower
- triangular part of the symmetric matrix and the strictly
- upper triangular part of C is not referenced. On exit, the
- lower triangular part of the array C is overwritten by the
- lower triangular part of the updated matrix.
-
- LDC - INTEGER.
- On entry, LDC specifies the first dimension of C as declared
- in the calling (sub) program. LDC must be at least
- max( 1, n ).
- Unchanged on exit.
-
-
- SUBROUTINE SSYR2K(UPLO,TRANSA,N,K,ALPHA,A,LDA,B,LDB,BETA,C,LDC)
-
- SSYR2K performs one of the symmetric rank 2k operations
-
- C := alpha*A*B' + alpha*B*A' + beta*C,
-
- or
-
- C := alpha*A'*B + alpha*B'*A + beta*C,
-
- where alpha and beta are scalars, C is an n by n symmetric matrix
- and A and B are n by k matrices in the first case and k by n
- matrices in the second case.
-
- UPLO - CHARACTER*1.
- On entry, UPLO specifies whether the upper or lower
- triangular part of the array C is to be referenced as
- follows:
-
- UPLO = 'U' or 'u' Only the upper triangular part of C
- is to be referenced.
-
- UPLO = 'L' or 'l' Only the lower triangular part of C
- is to be referenced.
-
- Unchanged on exit.
-
- TRANSA - CHARACTER*1.
- On entry, TRANSA specifies the operation to be performed as
- follows:
-
- TRANSA = 'N' or 'n' C := alpha*A*B' + alpha*B*A' +
- beta*C.
-
- TRANSA = 'T' or 't' C := alpha*A'*B + alpha*B'*A +
- beta*C.
-
- TRANSA = 'C' or 'c' C := alpha*A'*B + alpha*B'*A +
- beta*C.
-
- Unchanged on exit.
-
- N - INTEGER.
- On entry, N specifies the order of the matrix C. N must be
- at least zero.
- Unchanged on exit.
-
- K - INTEGER.
- On entry with TRANSA = 'N' or 'n', K specifies the number
- of columns of the matrices A and B, and on entry with
- TRANSA = 'T' or 't' or 'C' or 'c', K specifies the number
- of rows of the matrices A and B. K must be at least zero.
- Unchanged on exit.
-
- ALPHA - REAL .
- On entry, ALPHA specifies the scalar alpha.
- Unchanged on exit.
-
- A - REAL array of DIMENSION ( LDA, ka ), where ka is
- k when TRANSA = 'N' or 'n', and is n otherwise.
- Before entry with TRANSA = 'N' or 'n', the leading n by k
- part of the array A must contain the matrix A, otherwise
- the leading k by n part of the array A must contain the
- matrix A.
- Unchanged on exit.
-
- LDA - INTEGER.
- On entry, LDA specifies the first dimension of A as declared
- in the calling (sub) program. When TRANSA = 'N' or 'n'
- then LDA must be at least max( 1, n ), otherwise LDA must
- be at least max( 1, k ).
- Unchanged on exit.
-
- B - REAL array of DIMENSION ( LDB, kb ), where kb is
- k when TRANSA = 'N' or 'n', and is n otherwise.
- Before entry with TRANSA = 'N' or 'n', the leading n by k
- part of the array B must contain the matrix B, otherwise
- the leading k by n part of the array B must contain the
- matrix B.
- Unchanged on exit.
-
- LDB - INTEGER.
- On entry, LDB specifies the first dimension of B as declared
- in the calling (sub) program. When TRANSA = 'N' or 'n'
- then LDB must be at least max( 1, n ), otherwise LDB must
- be at least max( 1, k ).
- Unchanged on exit.
-
- BETA - REAL .
- On entry, BETA specifies the scalar beta.
- Unchanged on exit.
-
- C - REAL array of DIMENSION ( LDC, n ).
- Before entry with UPLO = 'U' or 'u', the leading n by n
- upper triangular part of the array C must contain the upper
- triangular part of the symmetric matrix and the strictly
- lower triangular part of C is not referenced. On exit, the
- upper triangular part of the array C 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 C must contain the lower
- triangular part of the symmetric matrix and the strictly
- upper triangular part of C is not referenced. On exit, the
- lower triangular part of the array C is overwritten by the
- lower triangular part of the updated matrix.
-
- LDC - INTEGER.
- On entry, LDC specifies the first dimension of C as declared
- in the calling (sub) program. LDC must be at least
- max( 1, n ).
- Unchanged on exit.
-
-
- SUBROUTINE STRMM(SIDE,UPLO,TRANS,DIAG,M,N,A,LDA,B,LDB)
-
- STRMM performs one of the matrix-matrix operations
-
- B := op( A )*B, or B := B*op( A )
-
- where B is an m by n matrix, 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'.
-
- SIDE - CHARACTER*1.
- On entry, SIDE specifies whether op( A ) multiplies B from
- the left or right as follows:
-
- SIDE = 'L' or 'l' B := op( A )*B.
-
- SIDE = 'R' or 'r' B := B*op( A ).
-
- Unchanged on exit.
-
- UPLO - CHARACTER*1.
- On entry, UPLO specifies whether the matrix A 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.
-
- Unchanged on exit.
-
- TRANS - CHARACTER*1.
- On entry, TRANS specifies the form of op( A ) to be used in
- the matrix multiplication as follows:
-
- TRANS = 'N' or 'n' op( A ) = A.
-
- TRANS = 'T' or 't' op( A ) = A'.
-
- TRANS = 'C' or 'c' op( A ) = A'.
-
- Unchanged on exit.
-
- 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.
-
- Unchanged on exit.
-
- M - INTEGER.
- On entry, M specifies the number of rows of B. M must be at
- least zero.
- Unchanged on exit.
-
- N - INTEGER.
- On entry, N specifies the number of columns of B. N must be
- at least zero.
- Unchanged on exit.
-
- A - REAL array of DIMENSION ( LDA, k ), where k is m
- when SIDE = 'L' or 'l' and is n when SIDE = 'R' or 'r'.
- Before entry with UPLO = 'U' or 'u', the leading k by k
- 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 k by k
- 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.
- Unchanged on exit.
-
- LDA - INTEGER.
- On entry, LDA specifies the first dimension of A as declared
- in the calling (sub) program. When SIDE = 'L' or 'l' then
- LDA must be at least max( 1, m ), when SIDE = 'R' or 'r'
- then LDA must be at least max( 1, n ).
- Unchanged on exit.
-
- B - REAL array of DIMENSION ( LDB, n ).
- Before entry, the leading m by n part of the array B must
- contain the matrix B, and on exit is overwritten by the
- transformed matrix.
-
- LDB - INTEGER.
- On entry, LDB specifies the first dimension of B as declared
- in the calling (sub) program. LDB must be at least
- max( 1, m ).
- Unchanged on exit.
-
-
- SUBROUTINE STRSM(SIDE,UPLO,TRANS,DIAG,M,N,A,LDA,B,LDB)
-
- STRSM solves one of the matrix equations
-
- op( A )*X = B, or X*op( A ) = B,
-
- where 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'.
-
- The matrix X is overwritten on B.
-
- SIDE - CHARACTER*1.
- On entry, SIDE specifies whether op( A ) appears on the left
- or right of X as follows:
-
- SIDE = 'L' or 'l' op( A )*X = B.
-
- SIDE = 'R' or 'r' X*op( A ) = B.
-
- Unchanged on exit.
-
- UPLO - CHARACTER*1.
- On entry, UPLO specifies whether the matrix A 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.
-
- Unchanged on exit.
-
- TRANS - CHARACTER*1.
- On entry, TRANS specifies the form of op( A ) to be used in
- the matrix multiplication as follows:
-
- TRANS = 'N' or 'n' op( A ) = A.
-
- TRANS = 'T' or 't' op( A ) = A'.
-
- TRANS = 'C' or 'c' op( A ) = A'.
-
- Unchanged on exit.
-
- 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.
-
- Unchanged on exit.
-
- M - INTEGER.
- On entry, M specifies the number of rows of B. M must be at
- least zero.
- Unchanged on exit.
-
- N - INTEGER.
- On entry, N specifies the number of columns of B. N must be
- at least zero.
- Unchanged on exit.
-
- A - REAL array of DIMENSION ( LDA, k ), where k is m
- when SIDE = 'L' or 'l' and is n when SIDE = 'R' or 'r'.
- Before entry with UPLO = 'U' or 'u', the leading k by k
- 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 k by k
- 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.
- Unchanged on exit.
-
- LDA - INTEGER.
- On entry, LDA specifies the first dimension of A as declared
- in the calling (sub) program. When SIDE = 'L' or 'l' then
- LDA must be at least max( 1, m ), when SIDE = 'R' or 'r'
- then LDA must be at least max( 1, n ).
- Unchanged on exit.
-
- B - REAL array of DIMENSION ( LDB, n ).
- Before entry, the leading m by n part of the array B must
- contain the right-hand side matrix B, and on exit is
- overwritten by the solution matrix X.
-
- LDB - INTEGER.
- On entry, LDB specifies the first dimension of B as declared
- in the calling (sub) program. LDB must be at least
- max( 1, m ).
- Unchanged on exit.
-
-
-
- SUBROUTINE CGEMM(TRANSA,TRANSB,M,N,K,ALPHA,A,LDA,B,LDB,BETA,C,LDC)
-
- CGEMM performs one of the matrix-matrix operations
-
- C := alpha*op( A )*op( B ) + beta*C,
-
- where op( X ) is one of
-
- op( X ) = X or op( X ) = X' or op( X ) = conjg( X' ),
-
- alpha and beta are scalars, and A, B and C are matrices, with op( A )
- an m by k matrix, op( B ) a k by n matrix and C an m by n matrix.
-
- TRANSA - CHARACTER*1.
- On entry, TRANSA specifies the form of op( A ) to be used in
- the matrix multiplication as follows:
-
- TRANSA = 'N' or 'n', op( A ) = A.
-
- TRANSA = 'T' or 't', op( A ) = A'.
-
- TRANSA = 'C' or 'c', op( A ) = conjg( A' ).
-
- Unchanged on exit.
-
- TRANSB - CHARACTER*1.
- On entry, TRANSB specifies the form of op( B ) to be used in
- the matrix multiplication as follows:
-
- TRANSB = 'N' or 'n', op( B ) = B.
-
- TRANSB = 'T' or 't', op( B ) = B'.
-
- TRANSB = 'C' or 'c', op( B ) = conjg( B' ).
-
- Unchanged on exit.
-
- M - INTEGER.
- On entry, M specifies the number of rows of the matrix
- op( A ) and of the matrix C. M must be at least zero.
- Unchanged on exit.
-
- N - INTEGER.
- On entry, N specifies the number of columns of the matrix
- op( B ) and the number of columns of the matrix C. N must be
- at least zero.
- Unchanged on exit.
-
- K - INTEGER.
- On entry, K specifies the number of columns of the matrix
- op( A ) and the number of rows of the matrix op( B ). K must
- be at least zero.
- Unchanged on exit.
-
- ALPHA - COMPLEX .
- On entry, ALPHA specifies the scalar alpha.
- Unchanged on exit.
-
- A - COMPLEX array of DIMENSION ( LDA, ka ), where ka is
- k when TRANSA = 'N' or 'n', and is m otherwise.
- Before entry with TRANSA = 'N' or 'n', the leading m by k
- part of the array A must contain the matrix A, otherwise
- the leading k by m part of the array A must contain the
- matrix A.
- Unchanged on exit.
-
- LDA - INTEGER.
- On entry, LDA specifies the first dimension of A as declared
- in the calling (sub) program. When TRANSA = 'N' or 'n' then
- LDA must be at least max( 1, m ), otherwise LDA must be at
- least max( 1, k ).
- Unchanged on exit.
-
- B - COMPLEX array of DIMENSION ( LDB, kb ), where kb is
- n when TRANSB = 'N' or 'n', and is k otherwise.
- Before entry with TRANSB = 'N' or 'n', the leading k by n
- part of the array B must contain the matrix B, otherwise
- the leading n by k part of the array B must contain the
- matrix B.
- Unchanged on exit.
-
- LDB - INTEGER.
- On entry, LDB specifies the first dimension of B as declared
- in the calling (sub) program. When TRANSB = 'N' or 'n' then
- LDB must be at least max( 1, k ), otherwise LDB must be at
- least max( 1, n ).
- Unchanged on exit.
-
- BETA - COMPLEX .
- On entry, BETA specifies the scalar beta. When BETA is
- supplied as zero then C need not be set on input.
- Unchanged on exit.
-
- C - COMPLEX array of DIMENSION ( LDC, n ).
- Before entry, the leading m by n part of the array C must
- contain the matrix C, except when beta is zero, in which
- case C need not be set on entry.
- On exit, the array C is overwritten by the m by n matrix
- ( alpha*op( A )*op( B ) + beta*C ).
-
- LDC - INTEGER.
- On entry, LDC specifies the first dimension of C as declared
- in the calling (sub) program. LDC must be at least
- max( 1, m ).
- Unchanged on exit.
-
-
- SUBROUTINE CSYMM(SIDE,UPLO,M,N,ALPHA,A,LDA,B,LDB,BETA,C,LDC)
-
- CSYMM performs one of the matrix-matrix operations
-
- C := alpha*A*B + beta*C,
-
- or
-
- C := alpha*B*A + beta*C,
-
- where alpha and beta are scalars, A is a symmetric matrix and B and
- C are m by n matrices.
-
- SIDE - CHARACTER*1.
- On entry, SIDE specifies whether the symmetric matrix A
- appears on the left or right in the operation as follows:
-
- SIDE = 'L' or 'l' C := alpha*A*B + beta*C,
-
- SIDE = 'R' or 'r' C := alpha*B*A + beta*C,
-
- Unchanged on exit.
-
- UPLO - CHARACTER*1.
- On entry, UPLO specifies whether the upper of lower
- triangular part of the symmetric matrix A is to be
- referenced as follows:
-
- UPLO = 'U' or 'u' Only the upper triangular part of the
- symmetric matrix is to be referenced.
-
- UPLO = 'L' or 'l' Only the lower triangular part of the
- symmetric matrix is to be referenced.
-
- Unchanged on exit.
-
- M - INTEGER.
- On entry, M specifies the number of rows of the matrix C.
- M must be at least zero.
- Unchanged on exit.
-
- N - INTEGER.
- On entry, N specifies the number of columns of the matrix C.
- N must be at least zero.
- Unchanged on exit.
-
- ALPHA - COMPLEX .
- On entry, ALPHA specifies the scalar alpha.
- Unchanged on exit.
-
- A - COMPLEX array of DIMENSION ( LDA, ka ), where ka is
- m when SIDE = 'L' or 'l' and is n otherwise.
- Before entry with SIDE = 'L' or 'l', the m by m part of
- the array A must contain the symmetric matrix, such that
- when UPLO = 'U' or 'u', the leading m by m upper triangular
- part of the array A must contain the upper triangular part
- of the symmetric matrix and the strictly lower triangular
- part of A is not referenced, and when UPLO = 'L' or 'l',
- the leading m by m lower triangular part of the array A
- must contain the lower triangular part of the symmetric
- matrix and the strictly upper triangular part of A is not
- referenced.
- Before entry with SIDE = 'R' or 'r', the n by n part of
- the array A must contain the symmetric matrix, such that
- when UPLO = 'U' or 'u', the leading n by n upper triangular
- part of the array A must contain the upper triangular part
- of the symmetric matrix and the strictly lower triangular
- part of A is not referenced, and when UPLO = 'L' or 'l',
- the leading n by n lower triangular part of the array A
- must contain the lower triangular part of the symmetric
- matrix and the strictly upper triangular part of A is not
- referenced.
- Unchanged on exit.
-
- LDA - INTEGER.
- On entry, LDA specifies the first dimension of A as declared
- in the calling (sub) program. When SIDE = 'L' or 'l' then
- LDA must be at least max( 1, m ), otherwise LDA must be at
- least max( 1, n ).
- Unchanged on exit.
-
- B - COMPLEX array of DIMENSION ( LDB, n ).
- Before entry, the leading m by n part of the array B must
- contain the matrix B.
- Unchanged on exit.
-
- LDB - INTEGER.
- On entry, LDB specifies the first dimension of B as declared
- in the calling (sub) program. LDB must be at least
- max( 1, m ).
- Unchanged on exit.
-
- BETA - COMPLEX .
- On entry, BETA specifies the scalar beta. When BETA is
- supplied as zero then C need not be set on input.
- Unchanged on exit.
-
- C - COMPLEX array of DIMENSION ( LDC, n ).
- Before entry, the leading m by n part of the array C must
- contain the matrix C, except when beta is zero, in which
- case C need not be set on entry.
- On exit, the array C is overwritten by the m by n updated
- matrix.
-
- LDC - INTEGER.
- On entry, LDC specifies the first dimension of C as declared
- in the calling (sub) program. LDC must be at least
- max( 1, m ).
- Unchanged on exit.
-
-
- SUBROUTINE CHEMM(SIDE,UPLO,M,N,ALPHA,A,LDA,B,LDB,BETA,C,LDC)
-
- CHEMM performs one of the matrix-matrix operations
-
- C := alpha*A*B + beta*C,
-
- or
-
- C := alpha*B*A + beta*C,
-
- where alpha and beta are scalars, A is an hermitian matrix and B and
- C are m by n matrices.
-
- SIDE - CHARACTER*1.
- On entry, SIDE specifies whether the hermitian matrix A
- appears on the left or right in the operation as follows:
-
- SIDE = 'L' or 'l' C := alpha*A*B + beta*C,
-
- SIDE = 'R' or 'r' C := alpha*B*A + beta*C,
-
- Unchanged on exit.
-
- UPLO - CHARACTER*1.
- On entry, UPLO specifies whether the upper of lower
- triangular part of the hermitian matrix A is to be
- referenced as follows:
-
- UPLO = 'U' or 'u' Only the upper triangular part of the
- hermitian matrix is to be referenced.
-
- UPLO = 'L' or 'l' Only the lower triangular part of the
- hermitian matrix is to be referenced.
-
- Unchanged on exit.
-
- M - INTEGER.
- On entry, M specifies the number of rows of the matrix C.
- M must be at least zero.
- Unchanged on exit.
-
- N - INTEGER.
- On entry, N specifies the number of columns of the matrix C.
- N must be at least zero.
- Unchanged on exit.
-
- ALPHA - COMPLEX .
- On entry, ALPHA specifies the scalar alpha.
- Unchanged on exit.
-
- A - COMPLEX array of DIMENSION ( LDA, ka ), where ka is
- m when SIDE = 'L' or 'l' and is n otherwise.
- Before entry with SIDE = 'L' or 'l', the m by m part of
- the array A must contain the hermitian matrix, such that
- when UPLO = 'U' or 'u', the leading m by m 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, and when UPLO = 'L' or 'l',
- the leading m by m 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.
- Before entry with SIDE = 'R' or 'r', the n by n part of
- the array A must contain the hermitian matrix, such that
- when 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, and when 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.
- Note that the imaginary parts of the diagonal elements need
- not be set, they are assumed to be zero.
- Unchanged on exit.
-
- LDA - INTEGER.
- On entry, LDA specifies the first dimension of A as declared
- in the calling (sub) program. When SIDE = 'L' or 'l' then
- LDA must be at least max( 1, m ), otherwise LDA must be at
- least max( 1, n ).
- Unchanged on exit.
-
- B - COMPLEX array of DIMENSION ( LDB, n ).
- Before entry, the leading m by n part of the array B must
- contain the matrix B.
- Unchanged on exit.
-
- LDB - INTEGER.
- On entry, LDB specifies the first dimension of B as declared
- in the calling (sub) program. LDB must be at least
- max( 1, m ).
- Unchanged on exit.
-
- BETA - COMPLEX .
- On entry, BETA specifies the scalar beta. When BETA is
- supplied as zero then C need not be set on input.
- Unchanged on exit.
-
- C - COMPLEX array of DIMENSION ( LDC, n ).
- Before entry, the leading m by n part of the array C must
- contain the matrix C, except when beta is zero, in which
- case C need not be set on entry.
- On exit, the array C is overwritten by the m by n updated
- matrix.
-
- LDC - INTEGER.
- On entry, LDC specifies the first dimension of C as declared
- in the calling (sub) program. LDC must be at least
- max( 1, m ).
- Unchanged on exit.
-
-
- SUBROUTINE CSYRK(UPLO,TRANS,N,K,ALPHA,A,LDA,BETA,C,LDC)
-
- CSYRK performs one of the symmetric rank k operations
-
- C := alpha*A*A' + beta*C,
-
- or
-
- C := alpha*A'*A + beta*C,
-
- where alpha and beta are scalars, C is an n by n symmetric matrix
- and A is an n by k matrix in the first case and a k by n matrix
- in the second case.
-
- UPLO - CHARACTER*1.
- On entry, UPLO specifies whether the upper or lower
- triangular part of the array C is to be referenced as
- follows:
-
- UPLO = 'U' or 'u' Only the upper triangular part of C
- is to be referenced.
-
- UPLO = 'L' or 'l' Only the lower triangular part of C
- is to be referenced.
-
- Unchanged on exit.
-
- TRANS - CHARACTER*1.
- On entry, TRANS specifies the operation to be performed as
- follows:
-
- TRANS = 'N' or 'n' C := alpha*A*A' + beta*C.
-
- TRANS = 'T' or 't' C := alpha*A'*A + beta*C.
-
- Unchanged on exit.
-
- N - INTEGER.
- On entry, N specifies the order of the matrix C. N must be
- at least zero.
- Unchanged on exit.
-
- K - INTEGER.
- On entry with TRANS = 'N' or 'n', K specifies the number
- of columns of the matrix A, and on entry with
- TRANS = 'T' or 't', K specifies the number of rows of the
- matrix A. K must be at least zero.
- Unchanged on exit.
-
- ALPHA - COMPLEX .
- On entry, ALPHA specifies the scalar alpha.
- Unchanged on exit.
-
- A - COMPLEX array of DIMENSION ( LDA, ka ), where ka is
- k when TRANS = 'N' or 'n', and is n otherwise.
- Before entry with TRANS = 'N' or 'n', the leading n by k
- part of the array A must contain the matrix A, otherwise
- the leading k by n part of the array A must contain the
- matrix A.
- Unchanged on exit.
-
- LDA - INTEGER.
- On entry, LDA specifies the first dimension of A as declared
- in the calling (sub) program. When TRANS = 'N' or 'n'
- then LDA must be at least max( 1, n ), otherwise LDA must
- be at least max( 1, k ).
- Unchanged on exit.
-
- BETA - COMPLEX .
- On entry, BETA specifies the scalar beta.
- Unchanged on exit.
-
- C - COMPLEX array of DIMENSION ( LDC, n ).
- Before entry with UPLO = 'U' or 'u', the leading n by n
- upper triangular part of the array C must contain the upper
- triangular part of the symmetric matrix and the strictly
- lower triangular part of C is not referenced. On exit, the
- upper triangular part of the array C 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 C must contain the lower
- triangular part of the symmetric matrix and the strictly
- upper triangular part of C is not referenced. On exit, the
- lower triangular part of the array C is overwritten by the
- lower triangular part of the updated matrix.
-
- LDC - INTEGER.
- On entry, LDC specifies the first dimension of C as declared
- in the calling (sub) program. LDC must be at least
- max( 1, n ).
- Unchanged on exit.
-
-
- SUBROUTINE CHERK(UPLO,TRANS,N,K,ALPHA,A,LDA,BETA,C,LDC)
-
- CHERK performs one of the hermitian rank k operations
-
- C := alpha*A*conjg( A' ) + beta*C,
-
- or
-
- C := alpha*conjg( A' )*A + beta*C,
-
- where alpha and beta are real scalars, C is an n by n hermitian
- matrix and A is an n by k matrix in the first case and a k by n
- matrix in the second case.
-
- UPLO - CHARACTER*1.
- On entry, UPLO specifies whether the upper or lower
- triangular part of the array C is to be referenced as
- follows:
-
- UPLO = 'U' or 'u' Only the upper triangular part of C
- is to be referenced.
-
- UPLO = 'L' or 'l' Only the lower triangular part of C
- is to be referenced.
-
- Unchanged on exit.
-
- TRANS - CHARACTER*1.
- On entry, TRANS specifies the operation to be performed as
- follows:
-
- TRANS = 'N' or 'n' C := alpha*A*conjg( A' ) + beta*C.
-
- TRANS = 'C' or 'c' C := alpha*conjg( A' )*A + beta*C.
-
- Unchanged on exit.
-
- N - INTEGER.
- On entry, N specifies the order of the matrix C. N must be
- at least zero.
- Unchanged on exit.
-
- K - INTEGER.
- On entry with TRANS = 'N' or 'n', K specifies the number
- of columns of the matrix A, and on entry with
- TRANS = 'C' or 'c', K specifies the number of rows of the
- matrix A. K must be at least zero.
- Unchanged on exit.
-
- ALPHA - REAL .
- On entry, ALPHA specifies the scalar alpha.
- Unchanged on exit.
-
- A - COMPLEX array of DIMENSION ( LDA, ka ), where ka is
- k when TRANS = 'N' or 'n', and is n otherwise.
- Before entry with TRANS = 'N' or 'n', the leading n by k
- part of the array A must contain the matrix A, otherwise
- the leading k by n part of the array A must contain the
- matrix A.
- Unchanged on exit.
-
- LDA - INTEGER.
- On entry, LDA specifies the first dimension of A as declared
- in the calling (sub) program. When TRANS = 'N' or 'n'
- then LDA must be at least max( 1, n ), otherwise LDA must
- be at least max( 1, k ).
- Unchanged on exit.
-
- BETA - REAL .
- On entry, BETA specifies the scalar beta.
- Unchanged on exit.
-
- C - COMPLEX array of DIMENSION ( LDC, n ).
- Before entry with UPLO = 'U' or 'u', the leading n by n
- upper triangular part of the array C must contain the upper
- triangular part of the hermitian matrix and the strictly
- lower triangular part of C is not referenced. On exit, the
- upper triangular part of the array C 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 C must contain the lower
- triangular part of the hermitian matrix and the strictly
- upper triangular part of C is not referenced. On exit, the
- lower triangular part of the array C 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.
-
- LDC - INTEGER.
- On entry, LDC specifies the first dimension of C as declared
- in the calling (sub) program. LDC must be at least
- max( 1, n ).
- Unchanged on exit.
-
-
- SUBROUTINE CSYR2K(UPLO,TRANS,N,K,ALPHA,A,LDA,B,LDB,BETA,C,LDC)
-
- CSYR2K performs one of the symmetric rank 2k operations
-
- C := alpha*A*B' + alpha*B*A' + beta*C,
-
- or
-
- C := alpha*A'*B + alpha*B'*A + beta*C,
-
- where alpha and beta are scalars, C is an n by n symmetric matrix
- and A and B are n by k matrices in the first case and k by n
- matrices in the second case.
-
- UPLO - CHARACTER*1.
- On entry, UPLO specifies whether the upper or lower
- triangular part of the array C is to be referenced as
- follows:
-
- UPLO = 'U' or 'u' Only the upper triangular part of C
- is to be referenced.
-
- UPLO = 'L' or 'l' Only the lower triangular part of C
- is to be referenced.
-
- Unchanged on exit.
-
- TRANS - CHARACTER*1.
- On entry, TRANS specifies the operation to be performed as
- follows:
-
- TRANS = 'N' or 'n' C := alpha*A*B' + alpha*B*A' +
- beta*C.
-
- TRANS = 'T' or 't' C := alpha*A'*B + alpha*B'*A +
- beta*C.
-
- Unchanged on exit.
-
- N - INTEGER.
- On entry, N specifies the order of the matrix C. N must be
- at least zero.
- Unchanged on exit.
-
- K - INTEGER.
- On entry with TRANS = 'N' or 'n', K specifies the number
- of columns of the matrices A and B, and on entry with
- TRANS = 'T' or 't', K specifies the number of rows of the
- matrices A and B. K must be at least zero.
- Unchanged on exit.
-
- ALPHA - COMPLEX .
- On entry, ALPHA specifies the scalar alpha.
- Unchanged on exit.
-
- A - COMPLEX array of DIMENSION ( LDA, ka ), where ka is
- k when TRANS = 'N' or 'n', and is n otherwise.
- Before entry with TRANS = 'N' or 'n', the leading n by k
- part of the array A must contain the matrix A, otherwise
- the leading k by n part of the array A must contain the
- matrix A.
- Unchanged on exit.
-
- LDA - INTEGER.
- On entry, LDA specifies the first dimension of A as declared
- in the calling (sub) program. When TRANS = 'N' or 'n'
- then LDA must be at least max( 1, n ), otherwise LDA must
- be at least max( 1, k ).
- Unchanged on exit.
-
- B - COMPLEX array of DIMENSION ( LDB, kb ), where kb is
- k when TRANS = 'N' or 'n', and is n otherwise.
- Before entry with TRANS = 'N' or 'n', the leading n by k
- part of the array B must contain the matrix B, otherwise
- the leading k by n part of the array B must contain the
- matrix B.
- Unchanged on exit.
-
- LDB - INTEGER.
- On entry, LDB specifies the first dimension of B as declared
- in the calling (sub) program. When TRANS = 'N' or 'n'
- then LDB must be at least max( 1, n ), otherwise LDB must
- be at least max( 1, k ).
- Unchanged on exit.
-
- BETA - COMPLEX .
- On entry, BETA specifies the scalar beta.
- Unchanged on exit.
-
- C - COMPLEX array of DIMENSION ( LDC, n ).
- Before entry with UPLO = 'U' or 'u', the leading n by n
- upper triangular part of the array C must contain the upper
- triangular part of the symmetric matrix and the strictly
- lower triangular part of C is not referenced. On exit, the
- upper triangular part of the array C 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 C must contain the lower
- triangular part of the symmetric matrix and the strictly
- upper triangular part of C is not referenced. On exit, the
- lower triangular part of the array C is overwritten by the
- lower triangular part of the updated matrix.
-
- LDC - INTEGER.
- On entry, LDC specifies the first dimension of C as declared
- in the calling (sub) program. LDC must be at least
- max( 1, n ).
- Unchanged on exit.
-
-
- SUBROUTINE CHER2K(UPLO,TRANS,N,K,ALPHA,A,LDA,B,LDB,BETA,C,LDC)
-
- CHER2K performs one of the hermitian rank 2k operations
-
- C := alpha*A*conjg( B' ) + conjg( alpha )*B*conjg( A' ) + beta*C,
-
- or
-
- C := alpha*conjg( A' )*B + conjg( alpha )*conjg( B' )*A + beta*C,
-
- where alpha and beta are scalars with beta real, C is an n by n
- hermitian matrix and A and B are n by k matrices in the first case
- and k by n matrices in the second case.
-
- UPLO - CHARACTER*1.
- On entry, UPLO specifies whether the upper or lower
- triangular part of the array C is to be referenced as
- follows:
-
- UPLO = 'U' or 'u' Only the upper triangular part of C
- is to be referenced.
-
- UPLO = 'L' or 'l' Only the lower triangular part of C
- is to be referenced.
-
- Unchanged on exit.
-
- TRANS - CHARACTER*1.
- On entry, TRANS specifies the operation to be performed as
- follows:
-
- TRANS = 'N' or 'n' C := alpha*A*conjg( B' ) +
- conjg( alpha )*B*conjg( A' ) +
- beta*C.
-
- TRANS = 'C' or 'c' C := alpha*conjg( A' )*B +
- conjg( alpha )*conjg( B' )*A +
- beta*C.
-
- Unchanged on exit.
-
- N - INTEGER.
- On entry, N specifies the order of the matrix C. N must be
- at least zero.
- Unchanged on exit.
-
- K - INTEGER.
- On entry with TRANS = 'N' or 'n', K specifies the number
- of columns of the matrices A and B, and on entry with
- TRANS = 'C' or 'c', K specifies the number of rows of the
- matrices A and B. K must be at least zero.
- Unchanged on exit.
-
- ALPHA - COMPLEX .
- On entry, ALPHA specifies the scalar alpha.
- Unchanged on exit.
-
- A - COMPLEX array of DIMENSION ( LDA, ka ), where ka is
- k when TRANS = 'N' or 'n', and is n otherwise.
- Before entry with TRANS = 'N' or 'n', the leading n by k
- part of the array A must contain the matrix A, otherwise
- the leading k by n part of the array A must contain the
- matrix A.
- Unchanged on exit.
-
- LDA - INTEGER.
- On entry, LDA specifies the first dimension of A as declared
- in the calling (sub) program. When TRANS = 'N' or 'n'
- then LDA must be at least max( 1, n ), otherwise LDA must
- be at least max( 1, k ).
- Unchanged on exit.
-
- B - COMPLEX array of DIMENSION ( LDB, kb ), where kb is
- k when TRANS = 'N' or 'n', and is n otherwise.
- Before entry with TRANS = 'N' or 'n', the leading n by k
- part of the array B must contain the matrix B, otherwise
- the leading k by n part of the array B must contain the
- matrix B.
- Unchanged on exit.
-
- LDB - INTEGER.
- On entry, LDB specifies the first dimension of B as declared
- in the calling (sub) program. When TRANS = 'N' or 'n'
- then LDB must be at least max( 1, n ), otherwise LDB must
- be at least max( 1, k ).
- Unchanged on exit.
-
- BETA - REAL .
- On entry, BETA specifies the scalar beta.
- Unchanged on exit.
-
- C - COMPLEX array of DIMENSION ( LDC, n ).
- Before entry with UPLO = 'U' or 'u', the leading n by n
- upper triangular part of the array C must contain the upper
- triangular part of the hermitian matrix and the strictly
- lower triangular part of C is not referenced. On exit, the
- upper triangular part of the array C 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 C must contain the lower
- triangular part of the hermitian matrix and the strictly
- upper triangular part of C is not referenced. On exit, the
- lower triangular part of the array C 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.
-
- LDC - INTEGER.
- On entry, LDC specifies the first dimension of C as declared
- in the calling (sub) program. LDC must be at least
- max( 1, n ).
- Unchanged on exit.
-
-
- SUBROUTINE CTRMM(SIDE,UPLO,TRANSA,DIAG,M,N,ALPHA,A,LDA,B,LDB)
-
- CTRMM performs one of the matrix-matrix operations
-
- B := alpha*op( A )*B, or B := alpha*B*op( A )
-
- where alpha is a scalar, B is an m by n matrix, 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' or op( A ) = conjg( A' ).
-
- SIDE - CHARACTER*1.
- On entry, SIDE specifies whether op( A ) multiplies B from
- the left or right as follows:
-
- SIDE = 'L' or 'l' B := alpha*op( A )*B.
-
- SIDE = 'R' or 'r' B := alpha*B*op( A ).
-
- Unchanged on exit.
-
- UPLO - CHARACTER*1.
- On entry, UPLO specifies whether the matrix A 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.
-
- Unchanged on exit.
-
- TRANSA - CHARACTER*1.
- On entry, TRANSA specifies the form of op( A ) to be used in
- the matrix multiplication as follows:
-
- TRANSA = 'N' or 'n' op( A ) = A.
-
- TRANSA = 'T' or 't' op( A ) = A'.
-
- TRANSA = 'C' or 'c' op( A ) = conjg( A' ).
-
- Unchanged on exit.
-
- 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.
-
- Unchanged on exit.
-
- M - INTEGER.
- On entry, M specifies the number of rows of B. M must be at
- least zero.
- Unchanged on exit.
-
- N - INTEGER.
- On entry, N specifies the number of columns of B. N must be
- at least zero.
- Unchanged on exit.
-
- ALPHA - COMPLEX .
- 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 - COMPLEX array of DIMENSION ( LDA, k ), where k is m
- when SIDE = 'L' or 'l' and is n when SIDE = 'R' or 'r'.
- Before entry with UPLO = 'U' or 'u', the leading k by k
- 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 k by k
- 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.
- Unchanged on exit.
-
- LDA - INTEGER.
- On entry, LDA specifies the first dimension of A as declared
- in the calling (sub) program. When SIDE = 'L' or 'l' then
- LDA must be at least max( 1, m ), when SIDE = 'R' or 'r'
- then LDA must be at least max( 1, n ).
- Unchanged on exit.
-
- B - COMPLEX array of DIMENSION ( LDB, n ).
- Before entry, the leading m by n part of the array B must
- contain the matrix B, and on exit is overwritten by the
- transformed matrix.
-
- LDB - INTEGER.
- On entry, LDB specifies the first dimension of B as declared
- in the calling (sub) program. LDB must be at least
- max( 1, m ).
- Unchanged on exit.
-
-
- SUBROUTINE CTRSM(SIDE,UPLO,TRANSA,DIAG,M,N,ALPHA,A,LDA,B,LDB)
-
- CTRSM solves one of the matrix equations
-
- 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' or op( A ) = conjg( A' ).
-
- The matrix X is overwritten on B.
-
- SIDE - CHARACTER*1.
- On entry, SIDE specifies whether op( A ) appears on the left
- or right of X as follows:
-
- SIDE = 'L' or 'l' op( A )*X = alpha*B.
-
- SIDE = 'R' or 'r' X*op( A ) = alpha*B.
-
- Unchanged on exit.
-
- UPLO - CHARACTER*1.
- On entry, UPLO specifies whether the matrix A 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.
-
- Unchanged on exit.
-
- TRANSA - CHARACTER*1.
- On entry, TRANSA specifies the form of op( A ) to be used in
- the matrix multiplication as follows:
-
- TRANSA = 'N' or 'n' op( A ) = A.
-
- TRANSA = 'T' or 't' op( A ) = A'.
-
- TRANSA = 'C' or 'c' op( A ) = conjg( A' ).
-
- Unchanged on exit.
-
- 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.
-
- Unchanged on exit.
-
- M - INTEGER.
- On entry, M specifies the number of rows of B. M must be at
- least zero.
- Unchanged on exit.
-
- N - INTEGER.
- On entry, N specifies the number of columns of B. N must be
- at least zero.
- Unchanged on exit.
-
- ALPHA - COMPLEX .
- 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 - COMPLEX array of DIMENSION ( LDA, k ), where k is m
- when SIDE = 'L' or 'l' and is n when SIDE = 'R' or 'r'.
- Before entry with UPLO = 'U' or 'u', the leading k by k
- 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 k by k
- 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.
- Unchanged on exit.
-
- LDA - INTEGER.
- On entry, LDA specifies the first dimension of A as declared
- in the calling (sub) program. When SIDE = 'L' or 'l' then
- LDA must be at least max( 1, m ), when SIDE = 'R' or 'r'
- then LDA must be at least max( 1, n ).
- Unchanged on exit.
-
- B - COMPLEX array of DIMENSION ( LDB, n ).
- Before entry, the leading m by n part of the array B must
- contain the right-hand side matrix B, and on exit is
- overwritten by the solution matrix X.
-
- LDB - INTEGER.
- On entry, LDB specifies the first dimension of B as declared
- in the calling (sub) program. LDB must be at least
- max( 1, m ).
- Unchanged on exit.
-
-
-