home *** CD-ROM | disk | FTP | other *** search
/ SGI Developer Toolbox 6.1 / SGI Developer Toolbox 6.1 - Disc 4.iso / lib / mathlib / libblas / blas.doc next >
Encoding:
Text File  |  1994-08-02  |  188.1 KB  |  5,480 lines

  1. Abstract from:
  2. PSCDOC:BLAS.DOC  10 February 1991
  3. Downloaded from anonymous@a.psc.edu, ftp server.
  4.  
  5. BLAS or Basic Linear Algebra Subprograms, began as a small core library
  6. of linear algebra utilities, proposed in an article in the ACM TOMS.
  7. Shortly thereafter, a subset of the BLAS was included in LINPACK, and
  8. then in the Cray SCILIB.  New, higher level routines (BLAS 2 and BLAS 3)
  9. have been added to the library and these routines are now also included
  10. in the Cray SCILIB.  The BLAS represent a kernel library which can be
  11. highly optimized for a specific machine.  Almost any scientific code
  12. can be modified to use the BLAS.
  13.  
  14. The BLAS are ACM TOMS algorithm 539 and 656.
  15.  
  16. Versions of the BLAS are included in many other libraries.
  17.  
  18. Reference:    Lawson, Hanson, Kincaid and Krogh,
  19.               Basic Linear Algebra Subprograms for FORTRAN usage,
  20.               ACM Transactions on Mathematical Software,
  21.               Volume 5, pages 308-323, 1979.
  22.  
  23.               Coleman and Van Loan,
  24.               Handbook for Matrix Computations,
  25.               Society for Industrial and Applied Mathematics,
  26.               3600 University City Science Center
  27.               Philadelphia, PA 19104-2688
  28.  
  29. Level 1 BLAS summary:
  30.  
  31.  
  32.        (IA is an integer scalar, IX and IY are integer vectors)
  33.        (SA, SC, SS are real scalars, SX and SY are real vectors)
  34.        (CA, CC, CS are complex scalars, CX and CY are complex vectors)
  35.        Note:  For complex vectors, the "absolute value" employed is
  36.        the "L1-norm".  ABS(CX)=ABS(REAL(CX)) + ABS(AIMAG(CX)).  This
  37.        is a norm, but it is distinct from the Euclidean or "L2-norm".
  38.  
  39. CAXPY  CY:=CY+CA*CX
  40. CCOPY  CY:=CX
  41. CDOTC  CDOTC := SUM CONJUGATE(CX) * CY  (conjugated vector dot product)
  42. CDOTU  CDOTU := SUM CX * CY  (unconjugated vector dot product)
  43. CINIT  CX:=CA, sets a vector to a scalar value.
  44. CMACH  CMACH:= one of three real machine dependent numbers.
  45. CROT   Applies a general complex Given's rotation to complex vectors.
  46. CROTG  Generate a hermitian Given's rotation.
  47. CSCAL  CX:=CA*CX (complex multiplier)
  48. CSROT  Applies a real Given's rotation to complex vectors.
  49. CSSCAL CX:=SA*CX (real multiplier).
  50. CSWAP  Interchange vectors CX and CY.
  51. CVSAME .TRUE. if CX=CY for all indices.
  52.  
  53. ICAMAX Return index of maximum "absolute value" in CX.
  54. ICAMIN Return index of minimum "absolute value" in CX.
  55. ICOPY  IY:=IX
  56. IINIT  IX:=IA
  57. ISAMAX Return index of maximum absolute value in SX.
  58. ISAMIN Return index of minimum absolute value in SX.
  59. ISMAX  Return index of maximum value in SX
  60. ISMIN  Return index of minimum value in SX.
  61. IVSAME .TRUE. if IY=IX for all indices.
  62.  
  63. SAMAX  SAMAX := maximum absolute value of entries in SX.
  64. SAMIN  SAMIN := minimum absolute value of entries in SX.
  65. SASUM  SASUM:=sum of absolute values of SX.
  66. SAXPY  SY:=SY+SA*SX
  67. SAXPYX SX:=SY+SA*SX
  68. SCAMAX SCAMAX=maximum "absolute value" of entries in CX.
  69. SCAMIN SCAMIN=minimum "absolute value" of entries in CX.
  70. SCASUM SCASUM:=SUM(I=1 to N) ABS(REAL(CX(I)))+ABS(AIMAG(CX(I))).
  71. SCNRM2 SCNRM2:= square root of sum of magnitudes of entries of CX.
  72. SCOPY  SY:=SX
  73. SDOT   SDOT := SUM SX * SY  (vector dot product)
  74. SDSDOT SDSDOT := SUM SX * SY (accumulated double precision, returned single)
  75. SINIT  SX:=SA, sets a vector to a constant.
  76. SMACH  SMACH:=one of three machine dependent number.
  77. SMAX   SMAX := maximum entry in SX.
  78. SMIN   SMIN := minimum entry in SX.
  79. SNRM2  SNRM2 := square root of sum of SX(I)**2
  80. SROT   Apply Given's rotation.
  81. SROTG  Generate Given's rotation.
  82. SROTM  Apply a modified Given's rotation.
  83. SROTMG Generate a modified Given's rotation.
  84. SSCAL  SX:=SA*SX.
  85. SSUM   SSUM:=sum of values of SX.
  86. SSWAP  Interchange vectors SX and SY.
  87. SVCAL  SY:=SA*SX.
  88. SVSAME .TRUE. if SY=SX for all indices.
  89.   
  90.  
  91. Level 2 BLAS summary:
  92.  
  93.  
  94.        (SX, SY real vectors, alpha and beta real scalars, A a real matrix)
  95.        (In most cases, either A or TRANSPOSE(A) may be used).
  96.  
  97. SGBMV  SY:=alpha*A*SX+beta*SY, A a band matrix.
  98. SGEMV  SY:=alpha*A*SX+beta*SY, A a rectangular matrix.
  99. SGER   A:=A+alpha*SX*TRANSPOSE(SY), rank 1 update, A a rectangular matrix.
  100. SMXPY  SY:=SY+A*SX
  101. SSBMV  SY:=alpha*A*SX+beta*SY, A a symmetric band matrix.
  102. SSPMV  SY:=alpha*A*SX+beta*SY, A a packed symmetric matrix.
  103. SSPR   A:=A+alpha*SX*TRANSPOSE(SX), A a packed symmetric matrix.
  104. SSPR2  A:=A+alpha*SX*TRANSPOSE(SY)+alpha*SY*TRANSPOSE(SX), A packed symmetric.
  105. SSYMV  SY:=alpha*A*SX+beta*SY, A a symmetric matrix.
  106. SSYR   A:=A+alpha*SX*TRANSPOSE(SX), A a symmetric matrix.
  107. SSYR2  A:=A+alpha*SX*TRANSPOSE(SY)+alpha*SY*TRANSPOSE(SX), A a symmetric matrix.
  108. STBMV  SX:=A*SX, A a triangular band matrix.
  109. STBSV  SX:=INVERSE(A)*SX, A a triangular band matrix.
  110. STPMV  SX:=A*SX, A a packed symmetric matrix.
  111. STPSV  SX:=INVERSE(A)*SX, A a packed symmetric matrix.
  112. STRMV  SX:=A*SX, A a triangular matrix.
  113. STRSV  SX:=INVERSE(A)*SX, A a triangular matrix.
  114. SXMPY  SY:=SY+SX*A
  115.  
  116.        (alpha and beta are complex scalars, CX and CY complex vectors,
  117.        and A is a matrix.  In most cases, the routines can also handle
  118.        TRANSPOSE(A) and CONJUGATE-TRANSPOSE(A)).
  119.  
  120. CGEMV  CY := alpha*A*CX + beta*CY, A a rectangular matrix.
  121. CGBMV  CY := alpha*A*CX + beta*CY, A a rectangular band matrix.
  122. CHEMV  CY := alpha*A*CX + beta*CY, A a (square) hermitian matrix.
  123. CHBMV  CY := alpha*A*CX + beta*CY, A a (square) hermitian band matrix.
  124. CHPMV  CY := alpha*A*CX + beta*CY, A a (square) hermitian packed matrix.
  125. CTRMV  CX := A*CX, A is a triangular matrix.
  126. CTBMV  CX := A*CX, A is a triangular band matrix.
  127. CTPMV  CX := A*CX, A is a packed triangular band matrix.
  128. CTRSV  CX := INVERSE(A)*CX, where A is a triangular matrix.
  129. CTBSV  CX := INVERSE(A)*CX, where A is a triangular band matrix.
  130. CTPSV  CX := INVERSE(A)*CX, where A is a packed triangular band matrix.
  131. CGERU  A := A + alpha*CX*TRANSPOSE(CY), A a rectangular matrix.
  132. CGERC  A := A + alpha*CX*CONJUGATE-TRANSPOSE(CY), A a rectangular matrix.
  133. CHER   A := A + alpha*CX*CONJUGATE-TRANSPOSE(CX), A a (square) hermitian matrix.
  134. CHPR   A := A + alpha*CX*CONJUGATE-TRANSPOSE(CX), a a (square) hermitian packed.
  135. CHER2  A := A + alpha*CX*CONJUGATE-TRANSPOSE(CY)
  136.               + CONJUGATE(alpha)*CY*CONJUGATE-TRANSPOSE(CX),
  137.               A a (square) hermitian matrix.
  138. CHPR2  A := A + alpha*CX*CONJUGATE-TRANSPOSE(CY)
  139.               + CONJUGATE(ALPHA)*CY*CONJUGATE-TRANSPOSE(CX),
  140.               A a (square) hermitian packed matrix.
  141.  
  142.  
  143. Level 3 BLAS summary:
  144.  
  145.  
  146.        (A, B, C are real matrices, alpha and beta real scalars)
  147.        (In most cases, the matrices on the left side may also
  148.        be transposed)
  149.  
  150. SGEMM  C:=alpha*A*B+beta*C, A, B, C rectangular.
  151. SSYMM  C:=alpha*A*B+beta*C, A symmetric, B, C rectangular.
  152. SSYRK  C:=alpha*A*TRANSPOSE(A)+beta*C, C symmetric.
  153. SSYR2K C:=alpha*A*TRANSPOSE(B)+alpha*B*TRANSPOSE(A)+beta*C, C symmetric.
  154. STRMM  B:=A*B or B:=B*A, A triangular, B rectangular.
  155. STRSM  B:=INVERSE(A)*C or B:=C*INVERSE(A), B, C rectangular, A triangular.
  156.  
  157.        (A, B, C are complex matrices, alpha and beta complex scalars,
  158.        in most cases, the matrices on the left side may also be transposed
  159.        or conjugated)
  160.  
  161. CGEMM  C:=alpha*A*B+beta*C, A, B, C rectangular.
  162. CSYMM  C:=alpha*A*B+beta*C, A symmetric, B, C rectangular.
  163. CHEMM  C:=alpha*A*TRANSPOSE(A)+beta*C, A hermitian, B, C rectangular.
  164. CSYRK  C:=alpha*A*TRANSPOSE(A)+beta*C, C symmetric.
  165. CHERK  C:=alpha*A*TRANSPOSE(A)+beta*C, C hermitian.
  166. CSYR2K C:=alpha*A*TRANSPOSE(B)+alpha*B*TRANSPOSE(A)+beta*C, C symmetric.
  167. CHER2K C:=alpha*A*TRANSPOSE(B)+alpha*B*TRANSPOSE(A)+beta*C, C hermitian.
  168. CTRMM  B:=A*B or B:=B*A, A triangular, B rectangular.
  169. CTRSM  B:=INVERSE(A)*C or B:=C*INVERSE(A), B, C rectangular, A triangular.
  170.  
  171. *************************************************************************
  172.  
  173. Level 1 BLAS:
  174.  
  175. *************************************************************************
  176.  
  177.  
  178. SUBROUTINE ICOPY(N,IX,INCX,IY,INCY)
  179.  
  180. copies one integer vector IX into another IY.  IY:= IX.
  181.  
  182. N      Input, INTEGER N, number of elements in the vectors.
  183.  
  184. IX     Input, INTEGER IX(N), vector to be copied.
  185.  
  186. INCX   Input, INTEGER INCX, increment between elements of IX.  For 
  187.        contiguous elements, INCX = 1.
  188.  
  189. IY     Output, INTEGER IY(N), result vector.
  190.  
  191. INCY   Input, INTEGER INCY, increment between elements of IY.  For 
  192.        contiguous elements, INCY = 1.
  193.  
  194.  
  195.  
  196. SUBROUTINE IINIT(N,IA,IX,INCX)
  197.  
  198. sets all the entries of a vector IX to the scalar value IA.
  199.  
  200. N      Input, INTEGER N, number of elements in IX.
  201.  
  202. IA     Input, INTEGER IA, the scalar value to be assigned to all entries.
  203.  
  204. IX     Output, INTEGER IX(N), the vector, all of whose entries are
  205.        now equal to IA.
  206.  
  207. INCX   Input, INTEGER INCX, increment between elements of IX.  For 
  208.        contiguous elements, INCX=1.
  209.  
  210.  
  211. INTEGER FUNCTION ISAMAX(N,SX,INCX)
  212.  
  213. an integer function that returns the index of the element in a real vector
  214. with the largest absolute value.
  215.  
  216. N      Input, INTEGER N, number of elements in SX.
  217.  
  218. SX     Input, REAL SX(N), vector to be searched.
  219.  
  220. INCX   Input, INTEGER INCX, increment between elements of SX.  For contiguous
  221.        elements, INCX = 1.
  222.  
  223. ISAMAX Output, INTEGER ISAMAX, the index of the entry of maximum absolute 
  224.        magnitude.
  225.  
  226.  
  227. INTEGER FUNCTION ISAMIN(N,SX,INCX)
  228.  
  229. an integer function that returns the index of the element in a real vector
  230. with the smallest absolute value.
  231.  
  232. N      Input, INTEGER N, number of elements in SX.
  233.  
  234. SX     Input, REAL SX(N), vector to be searched.
  235.  
  236. INCX   Input, INTEGER INCX, increment between elements of SX.  For contiguous
  237.        elements, INCX = 1.
  238.  
  239. ISAMIN Output, INTEGER ISAMIN, the index of the entry of minimum absolute 
  240.        magnitude.
  241.  
  242.  
  243. INTEGER FUNCTION ISMAX(N,SX,INCX)
  244.  
  245. an integer function that returns the index of the element in a real vector
  246. with the largest value.
  247.  
  248. N      Input, INTEGER N, number of elements in SX.
  249.  
  250. SX     Input, REAL SX(N), vector to be searched.
  251.  
  252. INCX   Input, INTEGER INCX, increment between elements of SX.  For contiguous
  253.        elements, INCX = 1.
  254.  
  255. ISMAX  Output, INTEGER ISMAX, the index of the entry of maximum value.
  256.  
  257.  
  258. INTEGER FUNCTION ISMIN(N,SX,INCX)
  259.  
  260. an integer function that returns the index of the element in a real vector
  261. with the smallest value.
  262.  
  263. N      Input, INTEGER N, number of elements in SX.
  264.  
  265. SX     Input, REAL SX(N), vector to be searched.
  266.  
  267. INCX   Input, INTEGER INCX, increment between elements of SX.  For contiguous
  268.        elements, INCX = 1.
  269.  
  270. ISMIN  Output, INTEGER ISMIN, the index of the entry of minimum value.
  271.  
  272.  
  273. LOGICAL FUNCTION IVSAME(N,IX,IY)
  274.  
  275. checks whether two vectors are identical.
  276.  
  277. N      Input, INTEGER N, number of elements in IX and IY.
  278.  
  279. IX     Input, INTEGER IX(N), first vector to compare.
  280.  
  281. IY     Input, INTEGER IY(N), second vector to compare.
  282.  
  283. IVSAME Output, LOGICAL IVSAME, .TRUE. if IX(I).EQ.IY(I) for I=1 to N,
  284.        .FALSE. otherwise.
  285.  
  286.  
  287. REAL FUNCTION SAMAX(N,SX,INCX)
  288.  
  289. returns the maximum absolute value of all entries in SX.
  290.  
  291. N      Input, INTEGER N, number of elements in SX.
  292.  
  293. SX     Input, REAL SX(N), vector to be searched.
  294.  
  295. INCX   Input, INTEGER INCX, increment between elements of SX.  For contiguous
  296.        elements, INCX = 1.
  297.  
  298. SAMAX  Output, REAL SAMAX, the maximum absolute value of all entries in SX.
  299.  
  300.  
  301. REAL FUNCTION SAMIN(N,SX,INCX)
  302.  
  303. returns the minimum absolute value of all entries in SX.
  304.  
  305. N      Input, INTEGER N, number of elements in SX.
  306.  
  307. SX     Input, REAL SX(N), vector to be searched.
  308.  
  309. INCX   Input, INTEGER INCX, increment between elements of SX.  For contiguous
  310.        elements, INCX = 1.
  311.  
  312. SAMIN  Output, REAL SAMIN, the minimum absolute value of all entries in SX.
  313.  
  314.  
  315. REAL FUNCTION SASUM(N,SX,INCX)
  316.  
  317. a real function that returns the sum of the absolute values of a real vector.
  318.  
  319. N      Input, INTEGER N, number of elements in SX.
  320.  
  321. SX     Input, REAL SX(N), real vector whose entries are to be summed.
  322.  
  323. INCX   Input, INTEGER INCX, increment between elements of SX.  For contiguous
  324.        elements, INCX = 1.
  325.  
  326. SASUM  Output, REAL SASUM, the sum of the absolute values of the
  327.        entries.
  328.  
  329.  
  330. SUBROUTINE SAXPY(N,SA,SX,INCX,SY,INCY)
  331.  
  332. adds a scalar multiple SA of one vector SX to another vector SY.
  333. SY := SA*SX + SY
  334.  
  335. N      Input, INTEGER N, number of elements in the vectors.
  336.  
  337. SA     Input, REAL SA, scalar multiplier.
  338.  
  339. SX     Input, REAL SX(N), vector.
  340.  
  341. INCX   Input, INTEGER INCX, increment between elements of SX.  For contiguous
  342.        elements, INCX = 1.
  343.  
  344. SY     Input/output, REAL SY(N).  On input, the vector to which SA*SX
  345.        is to be added, on output, SY:=SY+SA*SX.
  346.  
  347. INCY   Input, INTEGER INCY, increment between elements of SY.  For contiguous
  348.        elements, INCY = 1.
  349.  
  350.  
  351. SUBROUTINE SAXPYX(N,SA,SX,INCX,SY,INCY)
  352.  
  353. SAXPYX scales a vector SX, and adds SY to it.  SX := SA*SX + SY.
  354.  
  355. N      Input, INTEGER N, number of elements in the vectors.
  356.  
  357. SA     Input, REAL SA, scalar multiplier.
  358.  
  359. SX     Input/output, REAL SX(N), vector.  Output value of SX
  360.        is SA*SX+SY.
  361.  
  362. INCX   Input, INTEGER INCX, increment between elements of SX.  For contiguous
  363.        elements, INCX = 1.
  364.  
  365. SY     Input, REAL SY(N), the vector to be added to SX.
  366.  
  367. INCY   Input, INTEGER INCY, increment between elements of SY.  For contiguous
  368.        elements, INCY = 1.
  369.  
  370.  
  371. SUBROUTINE SCOPY(N,SX,INCX,SY,INCY)
  372.  
  373. copies one real vector SX into another SY.  SY:= SX.
  374.  
  375. N      Input, INTEGER N, number of elements in the vectors.
  376.  
  377. SX     Input, REAL SX(N), real vector to be copied.
  378.  
  379. INCX   Input, INTEGER INCX, increment between elements of SX.  For contiguous
  380.        elements, INCX = 1.
  381.  
  382. SY     Output, REAL SY(N), real result vector.
  383.  
  384. INCY   Input, INTEGER INCY, increment between elements of SY.  For contiguous
  385.        elements, INCY = 1.
  386.  
  387.  
  388. REAL FUNCTION SDOT(N,SX,INCX,SY,INCY)
  389.  
  390. computes the inner (dot) product of two vectors.
  391. SDOT = SUM(I=1 to N) of SX(I)*SY(I).
  392.  
  393. N      Input, INTEGER N, number of elements in the vectors.
  394.  
  395. SX     Input, REAL SX(N), vector operand.
  396.  
  397. INCX   Input, INTEGER INCX, increment between elements of SX.  For contiguous
  398.        elements, INCX = 1.
  399.  
  400. SY     Input, REAL SY(N), vector operand.
  401.  
  402. INCY   Input, INTEGER INCY, increment between elements of SY.  For contiguous
  403.        elements, INCY = 1.
  404.  
  405. SDOT   Output, REAL SDOT, the dot product of SX and SY.
  406.  
  407.  
  408. REAL FUNCTION SDSDOT(N,SX,INCX,SY,INCY)
  409.  
  410. computes the inner (dot) product of two vectors.
  411. SDSDOT = SUM(I=1 to N) of SX(I)*SY(I).  Double precision arithmetic is
  412. used to compute the dot product with greater accuracy, although the
  413. final result is returned as single precision.
  414.  
  415. N      Input, INTEGER N, number of elements in the vectors.
  416.  
  417. SX     Input, REAL SX(N), vector operand.
  418.  
  419. INCX   Input, INTEGER INCX, increment between elements of SX.  For contiguous
  420.        elements, INCX = 1.
  421.  
  422. SY     Input, REAL SY(N), vector operand.
  423.  
  424. INCY   Input, INTEGER INCY, increment between elements of SY.  For contiguous
  425.        elements, INCY = 1.
  426.  
  427. SDSDOT Output, REAL SDSDOT, the dot product of SX and SY.
  428.  
  429.   
  430. SUBROUTINE SINIT(N,SA,SX,INCX)
  431.  
  432. sets all the entries of a vector SX to the scalar value SA.
  433.  
  434. N      Input, INTEGER N, number of elements in SX.
  435.  
  436. SA     Input, REAL SA, the scalar value to be assigned to all entries.
  437.  
  438. SX     Output, REAL SX(N), the vector, all of whose entries are
  439.        now equal to SA.
  440.  
  441. INCX   Input, INTEGER INCX, increment between elements of SX.  For contiguous
  442.        elements, INCX=1.
  443.  
  444.  
  445. REAL FUNCTION SMACH(JOB)
  446.  
  447. returns machine constants for the real limits of a given machine.
  448.  
  449. JOB    Input, INTEGER JOB, determines the number to be computed.
  450.        1, compute the machine epsilon (the smallest number eps
  451.           such that (1. + eps > 1) and (1. - eps < 1)).
  452.        2, compute a number close to smallest normalized, representable
  453.           number.
  454.        3, compute a number close to largest normalized, representable
  455.           number.
  456.  
  457. SMACH  Output, REAL SMACH, the request machine number.
  458.  
  459.  
  460. REAL FUNCTION SMAX(N,SX,INCX)
  461.  
  462. returns the maximum entry in SX.
  463.  
  464. N      Input, INTEGER N, number of elements in SX.
  465.  
  466. SX     Input, REAL SX(N), vector to be searched.
  467.  
  468. INCX   Input, INTEGER INCX, increment between elements of SX.  For contiguous
  469.        elements, INCX = 1.
  470.  
  471. SMAX   Output, REAL SMAX, the maximum entry in SX.
  472.  
  473.  
  474. REAL FUNCTION SMIN(N,SX,INCX)
  475.  
  476. returns the minimum entry in SX.
  477.  
  478. N      Input, INTEGER N, number of elements in SX.
  479.  
  480. SX     Input, REAL SX(N), vector to be searched.
  481.  
  482. INCX   Input, INTEGER INCX, increment between elements of SX.  For contiguous
  483.        elements, INCX = 1.
  484.  
  485. SMIN   Output, REAL SMIN, the minimum entry in SX.
  486.  
  487.  
  488. REAL FUNCTION SNRM2(N,SX,INCX)
  489.  
  490. a real function that computes the Euclidean norm of a real
  491. vector, also known as the root-mean-square norm, or the square root
  492. of the sum of the squares of the entries.
  493.  
  494. N      Input, INTEGER N, number of elements in vector.
  495.  
  496. SX     Input, REAL SX(N), the vector whose norm is to be taken.
  497.  
  498. INCX   Input, INTEGER INCX, increment between elements of SX.  For contiguous
  499.        elements, INCX = 1.
  500.  
  501. SNRM2  Output, REAL SNRM2, the Euclidean norm of SX.
  502.  
  503.  
  504. SUBROUTINE SROT(N,SX,INCX,SY,INCY,C,S)
  505.  
  506. applies a Givens rotation to two vectors, which generally represent
  507. rows or columns of a matrix.
  508.  
  509.   TEMP :=-S*SX(I)+C*SY(I)
  510.   SX(I):= C*SX(I)+S*SY(I)
  511.   SY(I):= TEMP
  512.  
  513. N      Input, INTEGER N, number of elements in vectors.
  514.  
  515. SX     Input/output, REAL SX(N), vector to be modified.
  516.  
  517. INCX   Input, INTEGER INCX, increment between elements of SX.  For contiguous
  518.        elements, INCX = 1.
  519.  
  520. SY     Input/output, REAL SY(N), vector to be modified.
  521.  
  522. INCY   Input, INTEGER INCY, increment between elements of SY.  For contiguous
  523.        elements, INCY = 1.
  524.  
  525. C      Input, REAL C, cosine normally calculated using SROTG.
  526.  
  527. S      Input, REAL S, sine normally calculated using SROTG.
  528.   
  529.  
  530. SUBROUTINE SROTG(A,B,C,S)
  531.  
  532. computes the elements of a Givens rotation
  533. matrix.  Given that A and B are elements of two different rows
  534. of a matrix in the same column, or of two different vectors in
  535. the same position, SROTG computes a cosine C and sine S such
  536. that the rotation through the angle defined by C and S will
  537. zero out the entry B in the second vector.  That is, setting
  538. X=C*X+S*Y and Y=-S*X+C*Y results in the entry of Y that was
  539. equal to B now being zero.
  540.  
  541. A      Input/output, REAL A. On input, the value of the vector or matrix
  542.        entry which is not required to be zeroed out.  On output, it is
  543.        overwritten by other information.
  544.  
  545. B      Input/output, REAL B.  On input, the value of the vector or matrix
  546.        entry which is required to be zeroed out.  It is overwritten on return.
  547.  
  548. C      Output, REAL C, cosine of rotation matrix.
  549.  
  550. S      Output, REAL S, sine of rotation matrix.
  551.  
  552.  
  553. SUBROUTINE SROTM(N,SX,INCX,SY,INCY,SPARAM)
  554.   
  555. SROTM applies the modified Givens rotation H to the 2 by N matrix
  556.  
  557.   ( X(1) ... X(N) )
  558.   ( Y(1) ... Y(N) )
  559.  
  560. H takes one of the following forms, depending on the value of SPARAM:
  561.  
  562. SPARAM(1) = -2.0
  563. H11 = 1.0        H12 = 0.0
  564. H21 = 0.0        H22 = 1.0
  565.  
  566. SPARAM(1) = -1.0
  567. H11 = SPARAM(2)  H12 = SPARAM(4)
  568. H21 = SPARAM(3)  H22 = SPARAM(5)
  569.  
  570. SPARAM(1) = 0.0
  571. H11 = 1.0        H12 = SPARAM(4)
  572. H21 = SPARAM(3)  H22 = 1.0
  573.  
  574. SPARAM(1) = 1.0
  575. H11 = SPARAM(2)  H12 = 1.0
  576. H21 = -1.0       H22 = SPARAM(5)
  577.  
  578. N      Input, INTEGER N, length of vectors X and Y.
  579.  
  580. SX     Input/output, REAL SX(N).
  581.        SROTM replaces X(I) with H11*X(I)+H12*Y(I) for I=1,...,N.
  582.        X(I) and Y(I) refer to specific elements of SX and SY.
  583.        The H components refer to the rotation defined by SPARAM.
  584.  
  585. INCX   Input, INTEGER INCX, displacement between elements of SX.
  586.        X(I) is defined to be
  587.        SX(1+(I-1)*INCX) if INCX.GE.0  or
  588.        SX(1+(I-N)*INCX) if INCX.LT.0.
  589.  
  590. SY     Input/output, REAL SY(N).
  591.        SROTM replaces Y(I) with H21*X(I)+H22*Y(I) for I=1,...,N.
  592.        X(I) and Y(I) refer to specific elements of SX and SY.
  593.        The H components refer to the rotation defined by SPARAM.
  594.  
  595. INCY   Input, INTEGER INCY, displacement between elements of SY.
  596.        Y(I) is defined to be
  597.        SY(1+(I-1)*INCY) if INCY.GE.0  or
  598.        SY(1+(I-N)*INCY) if INCY.LT.0.
  599.  
  600. SPARAM Input, REAL SPARAM(5), defines the rotation matrix H.
  601.        See remarks above.
  602.  
  603.  
  604. SUBROUTINE SROTMG(SD1,SD2,SX1,SY1,SPARAM)
  605.   
  606. SROTMG constructs a modified Givens rotation H and updates the
  607. scale factors SD1 and SD2 which zero SY1. The transformed value of
  608. SD1 replaces SD1, i.e.
  609.  
  610. On input,  SW1  =  SQRT(SD1)*SX1, SZ1  =  SQRT(SD2)*SY1.
  611.  
  612. On output, ( C  S ) (SW1) = (C*SW1 + S*SZ1) = (SQRT(SD1)*SX1)
  613.            (-S  C ) (SZ1) = (      0      ) = (          0  )
  614. where C and S define a Givens rotation.
  615.  
  616. H takes the form:
  617.  
  618. SPARAM(1) = -2.0
  619. SPARAM(2) = Unchanged   SPARAM(4) = Unchanged
  620. SPARAM(3) = Unchanged   SPARAM(5) = Unchanged
  621.  
  622. SPARAM(1) = -1.0
  623. SPARAM(2) = H11    SPARAM(4) = H12
  624. SPARAM(3) = H21    SPARAM(5) = H22
  625.  
  626. SPARAM(1) = 0.0
  627. SPARAM(2) = Unchanged   SPARAM(4) = H12
  628. SPARAM(3) = H21         SPARAM(5) = Unchanged
  629.  
  630. SPARAM(1) = 1.0
  631. SPARAM(2) = H11    SPARAM(4) = Unchanged
  632.   
  633. SD1    Input/output, REAL SD1, scale factor.
  634.        On input, SD1 contains the first scale factor.  On
  635.        output, SD1 contains the updated scale factor.
  636.  
  637. SD2    Input/output, REAL SD2, scale factor.
  638.        On input, SD2 contains the second scale factor.  On
  639.        output, SD2 contains the updated scale factor.
  640.  
  641. SX1    Input/output, REAL SX1, on input contains the first component of the 
  642.        vector to be rotated and output SX1 contains the rotated value
  643.        of the first component.
  644.  
  645. SY1    Input, REAL SY1, on input, second component of the vector to be 
  646.        rotated.  Since this component is zeroed by the rotation, it is
  647.        left unchanged in storage.
  648.  
  649. SPARAM Input/output, REAL SPARAM(5), defines the rotation matrix H.
  650.        See remarks above.
  651.  
  652.  
  653. SUBROUTINE SSCAL(N,SA,SX,INCX)
  654.  
  655. scales a real vector SX by multiplying it by a real number SA.
  656.  
  657. N      Input, INTEGER N, number of elements in vector.
  658.  
  659. SA     Input, REAL SA, scaling factor.
  660.  
  661. SX     Input/output, REAL SX(N), vector to be scaled.
  662.  
  663. INCX   Input, INTEGER INCX, increment between elements of SX.  For 
  664.        contiguous elements, INCX = 1.
  665.  
  666.  
  667. SUBROUTINE SSET(N,SA,SX,INCX)
  668.  
  669. SSET sets all the entries of a vector SX to the scalar value SA.
  670.  
  671. N      Input, INTEGER N, number of elements in SX.
  672.  
  673. SA     Input, REAL SA, the scalar value to be assigned to all entries.
  674.  
  675. SX     Output, REAL SX(N), the vector, all of whose entries are
  676.        now equal to SA.
  677.  
  678. INCX   Input, INTEGER INCX, increment between elements of SX.  For contiguous
  679.        elements, INCX=1.
  680.  
  681.  
  682. REAL FUNCTION SSUM(N,SX,INCX)
  683.  
  684. a real function that returns the sum of the values of a real vector.
  685.  
  686. N      Input, INTEGER N, number of elements in SX.
  687.  
  688. SX     Input, REAL SX(N), real vector whose entries are to be summed.
  689.  
  690. INCX   Input, INTEGER INCX, increment between elements of SX.  For contiguous
  691.        elements, INCX = 1.
  692.  
  693. SSUM   Output, REAL SSUM, the sum of the values of the entries.
  694.  
  695.  
  696. SUBROUTINE SSWAP(N,SX,INCX,SY,INCY)
  697.  
  698. exchanges two real vectors SX and SY.
  699.  
  700. N      Input, INTEGER N, number of elements in vectors.
  701.  
  702. SX     Input/output, REAL SX(N).  On output, the contents of
  703.        SX and SY have been interchanged.
  704.  
  705. INCX   Input, INTEGER INCX, increment between elements of SX.  For contiguous
  706.        elements, INCX = 1.
  707.  
  708. SY     Input/output, REAL SY(N), the other vector to interchange.
  709.  
  710. INCY   Input, INTEGER INCY, increment between elements of SY.  For contiguous
  711.        elements, INCY = 1.
  712.  
  713.  
  714. SUBROUTINE SVCAL(N,SA,SX,INCX,SY,INCY)
  715.  
  716. sets the vector SY to SA times the vector SX.
  717.  
  718. N      Input, INTEGER N, number of elements in vector.
  719.  
  720. SA     Input, REAL SA, scaling factor.
  721.  
  722. SX     Input, REAL SX(N), vector to be copied.
  723.  
  724. INCX   Input, INTEGER INCX, increment between elements of SX.  For contiguous
  725.        elements, INCX = 1.
  726.  
  727. SY     Output, REAL SY(N), SY(I)=SA*SX(I).
  728.  
  729. INCY   Input, INTEGER INCY, increment between elements of SY.  For contiguous
  730.        elements, INCY=1.
  731.  
  732.  
  733. LOGICAL FUNCTION SVSAME(N,SX,SY)
  734.  
  735. checks whether two vectors are identical.
  736.  
  737. N      Input, INTEGER N, number of elements in SX and SY.
  738.  
  739. SX     Input, REAL SX(N), first vector to compare.
  740.  
  741. SY     Input, REAL SY(N), second vector to compare.
  742.  
  743. SVSAME Output, LOGICAL SVSAME, .TRUE. if SX(I).EQ.SY(I) for I=1 to N,
  744.        .FALSE. otherwise.
  745.  
  746.  
  747. SUBROUTINE CAXPY(N,CA,CX,INCX,CY,INCY)
  748.  
  749. CAXPY adds a scalar multiple CA of one vector CX to another vector CY.
  750. CY:=CY+CA*CX.
  751.  
  752. N      Input, INTEGER N, number of elements in the vectors.
  753.  
  754. CA     Input, COMPLEX CA, scalar multiplier.
  755.  
  756. CX     Input, COMPLEX CX(N), vector to be added.
  757.  
  758. INCX   Input, INTEGER INCX, increment between elements of CX.  For contiguous
  759.        elements, INCX = 1.
  760.  
  761. CY     Input/output, COMPLEX CY(N), vector to which CA*CX is to be
  762.        added.
  763.  
  764. INCY   Input, INTEGER INCY, increment between elements of CY.  For contiguous
  765.        elements, INCY = 1.
  766.  
  767.  
  768. SUBROUTINE CCOPY(N,CX,INCX,CY,INCY)
  769.  
  770. copies one vector to another, CY:=CX.
  771.  
  772. N      Input, INTEGER N, number of elements in the vectors.
  773.  
  774. CX     Input, COMPLEX CX(N), vector to be copied.
  775.  
  776. INCX   Input, INTEGER INCX, increment between elements of CX.  For contiguous
  777.        elements, INCX = 1.
  778.  
  779. CY     Output, COMPLEX CY(N), result vector.
  780.  
  781. INCY   Input, INTEGER INCY, increment between elements of CY.  For contiguous
  782.        elements, INCY = 1.
  783.  
  784.  
  785. COMPLEX FUNCTION CDOTC(N,CX,INCX,CY,INCY)
  786.  
  787. computes the (conjugated) dot product of two vectors.
  788. CDOTC=SUM(I=1 to N) CONJUGATE(CX(I)) * CY(I)
  789.  
  790. N      Input, INTEGER N, number of elements in the vectors.
  791.  
  792. CX     Input, COMPLEX CX(N), operand.
  793.  
  794. INCX   Input, INTEGER INCX, increment between elements of CX.  For contiguous
  795.        elements, INCX = 1.
  796.  
  797. CY     Input, COMPLEX CY(N), operand.
  798.  
  799. INCY   Input, INTEGER INCY, increment between elements of CY.  For contiguous
  800.        elements, INCY = 1.
  801.  
  802. CDOTC  Output, COMPLEX CDOTC, the conjugated dot product of CX and CY.
  803.  
  804.  
  805. COMPLEX FUNCTION CDOTU(N,CX,INCX,CY,INCY)
  806.  
  807. computes the (unconjugated) dot product of two vectors.
  808. This is the simple sum of the product of the entries of the vectors.
  809.  
  810. N      Input, INTEGER N, number of elements in the vectors.
  811.  
  812. CX     Input, COMPLEX CX(N), operand.
  813.  
  814. INCX   Input, INTEGER INCX, increment between elements of CX.  For contiguous
  815.        elements, INCX = 1.
  816.  
  817. CY     Input, COMPLEX CY(N), operand.
  818.  
  819. INCY   Input, INTEGER INCY, increment between elements of CY.  For contiguous
  820.        elements, INCY = 1.
  821.  
  822. CDOTU  Output, COMPLEX CDOTU, the unconjugated dot product of CX and CY.
  823.  
  824.  
  825. SUBROUTINE CINIT(N,CA,CX,INCX)
  826.  
  827. sets all the entries of a vector CX to the scalar value CA.
  828.  
  829. N      Input, INTEGER N, number of elements in CX.
  830.  
  831. CA     Input, COMPLEX CA, the scalar value to be assigned to all entries.
  832.  
  833. CX     Output, COMPLEX CX(N), the vector, all of whose entries are
  834.        now equal to CA.
  835.  
  836. INCX   Input, INTEGER INCX, increment between elements of CX.  For contiguous
  837.        elements, INCX=1.
  838.  
  839.  
  840. REAL FUNCTION CMACH(JOB)
  841.  
  842. returns (real valued) machine constants for a given machine.
  843.  
  844. JOB    Input, INTEGER JOB, determines the number to be computed.
  845.        1, compute the machine epsilon (the norm of the smallest number eps
  846.           such that (1. + eps > 1) and (1. - eps < 1)).
  847.        2, compute the norm of a number close to smallest normalized,
  848.           representable number.
  849.        3, compute the norm of a number close to largest normalized,
  850.           representable number.
  851.  
  852. CMACH  Output, REAL CMACH, the value of the number requested.
  853.  
  854.  
  855. SUBROUTINE CROT(N,CX,INCX,CY,INCY,C,S)
  856.  
  857. carries out a complex Given's plane rotation:
  858.  
  859.   TEMP :=-CONJUGATE(S)*CX(I)+C*CY(I)
  860.   CX(I):=           C*CX(I)+S*CY(I)
  861.   CY(I):=           TEMP
  862.  
  863. N      Input, INTEGER N, number of elements in vectors.
  864.  
  865. CX     Input/output, COMPLEX CX(N), vector to be modified.
  866.  
  867. INCX   Input, INTEGER INCX, increment between elements of CX.  For contiguous
  868.        elements, INCX = 1.
  869.  
  870. CY     Input/output, COMPLEX CY(N), vector to be modified.
  871.  
  872. INCY   Input, INTEGER INCY, increment between elements of CY.  For contiguous
  873.        elements, INCY = 1.
  874.  
  875. C      Input, COMPLEX C, cosine of transformation.
  876.  
  877. S      Input, COMPLEX S, sine of transformation.
  878.  
  879.  
  880. SUBROUTINE CROTG(A,B,C,S)
  881.  
  882. CROTG computes the elements of a Givens rotation
  883. matrix.  Given that A and B are elements of two different rows
  884. of a matrix in the same column, or of two different vectors in
  885. the same position, CROTG computes a real cosine C and complex sine S such
  886. that the rotation through the angle defined by C and S will
  887. zero out the entry B in the second vector.  That is, setting
  888. X=C*X+S*Y and Y=-S*X+C*Y results in the entry of Y that was
  889. equal to B now being zero.
  890.  
  891. A      Input/output, COMPLEX A, on input, the value of the vector or matrix
  892.        entry which is not required to be zeroed out.  It is overwritten
  893.        on return.
  894.  
  895. B      Input/output, COMPLEX B, on input, the value of the vector or matrix
  896.        entry which is required to be zeroed out.  It is overwritten on return.
  897.  
  898. C      Output, REAL C, cosine of rotation matrix.
  899.  
  900. S      Output, COMPLEX S, sine of rotation matrix.
  901.  
  902.  
  903. SUBROUTINE CSCAL(N,CA,CX,INCX)
  904.  
  905. scales a complex vector by multiplying it by a complex number.
  906.  
  907. N      Input, INTEGER N, number of elements in vector.
  908.  
  909. CA     Input, COMPLEX CA, scaling factor.
  910.  
  911. CX     Input/output, COMPLEX CX(N), vector to be scaled.
  912.  
  913. INCX   Input, INTEGER INCX, increment between elements of CX.  For contiguous
  914.        elements, INCX = 1.
  915.  
  916.  
  917. SUBROUTINE CSROT(N,CX,INCX,CY,INCY,C,S)
  918.  
  919. carries out a real Given's plane rotation:
  920.  
  921.   TEMP :=-S*CX(I)+C*CY(I)
  922.   CX(I):= C*CX(I)+S*CY(I)
  923.   CY(I):= TEMP
  924.  
  925. N      Input, INTEGER N, number of elements in vectors.
  926.  
  927. CX     Input/output, COMPLEX CX(N), vector to be modified.
  928.  
  929. INCX   Input, INTEGER INCX, increment between elements of CX.  For contiguous
  930.        elements, INCX = 1.
  931.  
  932. CY     Input/output, COMPLEX CY(N), vector to be modified.
  933.  
  934. INCY   Input, INTEGER INCY, increment between elements of CY.  For contiguous
  935.        elements, INCY = 1.
  936.  
  937. C      Input, REAL C, cosine normally calculated using SROTG (the REAL
  938.        arithmetic routine).
  939.  
  940. S      Input, REAL S, sine normally calculated using SROTG (the REAL arithmetic
  941.        routine).
  942.  
  943.  
  944. SUBROUTINE CSSCAL(N,SA,CX,INCX)
  945.  
  946. scales a complex vector by multiplying it by a REAL number.
  947.  
  948. N      Input, INTEGER N, number of elements in vector.
  949.  
  950. SA     Input, REAL SA, scaling factor.
  951.  
  952. CX     Input/output, COMPLEX CX(N), vector to be scaled.
  953.  
  954. INCX   Input, INTEGER INCX, increment between elements of CX.  For contiguous
  955.        elements, INCX = 1.
  956.  
  957.  
  958. SUBROUTINE CSWAP(N,CX,INCX,CY,INCY)
  959.  
  960. exchanges two vectors.
  961.  
  962. N      Input, INTEGER N, number of elements in vectors.
  963.  
  964. CX     Input/output, COMPLEX CX(N).
  965.  
  966. INCX   Input, INTEGER INCX, increment between elements of CX.  For contiguous
  967.        elements, INCX = 1.
  968.  
  969. CY     Input/output, COMPLEX CY(N).
  970.  
  971. INCY   Input, INTEGER INCY, increment between elements of CY.  For contiguous
  972.        elements, INCY = 1.
  973.  
  974.  
  975. LOGICAL FUNCTION CVSAME(N,CX,CY)
  976.  
  977. checks whether two vectors are identical.
  978.  
  979. N      Input, INTEGER N, number of elements in CX and CY.
  980.  
  981. CX     Input, COMPLEX CX(N), first vector to compare.
  982.  
  983. CY     Input, COMPLEX CY(N), second vector to compare.
  984.  
  985. CVSAME Output, LOGICAL CVSAME, .TRUE. if CX(I).EQ.CY(I) for I=1 to N,
  986.        .FALSE. otherwise.
  987.  
  988.  
  989. INTEGER FUNCTION ICAMAX(N,CX,INCX)
  990.  
  991. an integer function that returns the index of the first occurrence of the
  992. element in a complex vector with the largest absolute value.  Here
  993. absolute value is defined as ABS(X)=ABS(REAL(X)) + ABS(AIMAG(X)).
  994.  
  995. N      Input, INTEGER N, number of elements to process in vector CX.
  996.  
  997. CX     Input, COMPLEX CX(N), vector to be searched.
  998.  
  999. INCX   Input, INTEGER INCX, increment between elements of CX.  For contiguous
  1000.        elements, INCX = 1.
  1001.  
  1002. ICAMAX Output, INTEGER ICAMAX, the index of the entry in CX of
  1003.        largest absolute value.
  1004.  
  1005.  
  1006. INTEGER FUNCTION ICAMIN(N,CX,INCX)
  1007.  
  1008. an integer function that returns the index of the first occurrence of the
  1009. element in a complex vector with the smallest absolute value.  Here
  1010. absolute value is defined as ABS(X)=ABS(REAL(X)) + ABS(AIMAG(X)).
  1011.  
  1012. N      Input, INTEGER N, number of elements to process in vector CX.
  1013.  
  1014. CX     Input, COMPLEX CX(N), vector to be searched.
  1015.  
  1016. INCX   Input, INTEGER INCX, increment between elements of CX.  For contiguous
  1017.        elements, INCX = 1.
  1018.  
  1019. ICAMIN Output, INTEGER ICAMIN, the index of the entry in CX of
  1020.        smallest absolute value.
  1021.  
  1022.  
  1023. REAL FUNCTION SCAMAX(N,CX,INCX)
  1024.  
  1025. returns the maximum "absolute value" of the entries in CX.  Here,
  1026. absolute value is defined as ABS(X)=ABS(REAL(X)) + ABS(AIMAG(X)).
  1027.  
  1028. N      Input, INTEGER N, number of elements to process in vector CX.
  1029.  
  1030. CX     Input, COMPLEX CX(N), vector to be searched.
  1031.  
  1032. INCX   Input, INTEGER INCX, increment between elements of CX.  For contiguous
  1033.        elements, INCX = 1.
  1034.  
  1035. SCAMAX Output, REAL SCAMAX, the maximum absolute value of the
  1036.        entries in CX.
  1037.  
  1038.  
  1039. REAL FUNCTION SCAMIN(N,CX,INCX)
  1040.  
  1041. returns the minimum "absolute value" of the entries of CX.  Here,
  1042. absolute value is defined as ABS(X)=ABS(REAL(X)) + ABS(AIMAG(X)).
  1043.  
  1044. N      Input, INTEGER N, number of elements to process in vector CX.
  1045.  
  1046. CX     Input, COMPLEX CX(N), vector to be searched.
  1047.  
  1048. INCX   Input, INTEGER INCX, increment between elements of CX.  For contiguous
  1049.        elements, INCX = 1.
  1050.  
  1051. SCAMIN Output, REAL SCAMIN, the minimum absolute value of the
  1052.        entries in CX.
  1053.  
  1054.  
  1055. REAL FUNCTION SCASUM(N,CX,INCX)
  1056.  
  1057. a REAL function that returns the sum of the absolute values
  1058. of the real and complex parts of a complex vector.  SCASUM=
  1059. SUM(I=1 to N) ABS(REAL(CX(I))) + ABS(AIMAG(CX(I))).
  1060.  
  1061. N      Input, INTEGER N, number of elements to process in vector CX.
  1062.  
  1063. CX     Input, COMPLEX CX(N), vector to be summed.
  1064.  
  1065. INCX   Input, INTEGER INCX, increment between elements of CX.  For contiguous
  1066.        elements, INCX = 1.
  1067.  
  1068. SCASUM Output, REAL SCASUM, the sum of the absolute values of
  1069.        the entries of CX.
  1070.  
  1071.  
  1072. REAL FUNCTION SCNRM2(N,CX,INCX)
  1073.  
  1074. a real function that computes the Euclidean norm of a complex
  1075. vector, also known as the root-mean-square norm, or the square root
  1076. of the sum of the squares of the entries.
  1077. SCNRM2:=SQRT(SUM(I=1 to N)REAL(CX(I))**2+AIMAG(CX(I))**2)
  1078.  
  1079. N      Input, INTEGER N, number of elements in vector.
  1080.  
  1081. SX     Input, COMPLEX SX(N), vector whose norm is desired.
  1082.  
  1083. INCX   Input, INTEGER INCX, increment between elements of SX.  For contiguous
  1084.        elements, INCX = 1.
  1085.  
  1086. SCNRM2 Output, REAL SCNRM2, the euclidean norm of the vector SX.
  1087.  
  1088. *********************************************************************
  1089.  
  1090. Level 2 BLAS:
  1091.  
  1092. *********************************************************************
  1093.  
  1094.  
  1095. The level 2 BLAS were designed to perform linear algebra operations at
  1096. a 'higher level' than the level 1 BLAS.  Instead of simple vector
  1097. operations, these routines are able to carry out matrix-vector operations,
  1098. and to solve linear systems.
  1099.  
  1100.  
  1101. SUBROUTINE SMXPY(N1,Y,N2,LDA,X,A)
  1102.  
  1103. SMXPY computes the product of a column vector X times a matrix A,
  1104. and adds the result to another column vector Y.
  1105.  
  1106. Y(I) = Y(I) + SUM(J=1 to N2) A(I,J)*X(J)
  1107.  
  1108. N1     Input, number of entries in Y.
  1109.  
  1110. Y      Input/output, REAL Y(N1), the vector to which X*A is to
  1111.        be added.
  1112.  
  1113. N2     Input, number of entries in X.
  1114.  
  1115. LDA    Input, leading dimension of the array A.
  1116.  
  1117. X      Input, REAL X(N2), column vector to be multiplied by X.
  1118.  
  1119. A      Input, REAL A(LDA,*), containing an N1 by N2 matrix
  1120.        which is to multiply X.
  1121.  
  1122.  
  1123. SUBROUTINE SXMPY(N1,LDY,Y,N2,LDX,X,LDA,A)
  1124.  
  1125. SXMPY computes the product of a row vector X and a matrix A,
  1126. and adds the result to another row vector Y.
  1127.  
  1128. Y(1,J)=Y(1,J) + SUM(I=1 to N2) X(1,I)*A(I,J)
  1129.  
  1130. N1     Input, number of entries in row vector Y
  1131.        (or number of columns in the array Y).
  1132.  
  1133. LDY    Input, leading dimension of the array Y.
  1134.  
  1135. Y      Input/output, REAL Y(LDY,N1), array containing the row
  1136.        vector Y as its first row.  On output, X*A has been
  1137.        added to the first row of Y.
  1138.  
  1139. N2     Input, number of entries in the row vector X,
  1140.        (or number of coumns in the array X).
  1141.  
  1142. LDX    Input, leading dimension of the array X.
  1143.  
  1144. X      Input, REAL X(LDX,N2), array containing the row vector
  1145.        X as its first row.
  1146.  
  1147. LDA    Input, leading dimension of the array A.
  1148.  
  1149. A      Input, REAL A(LDA,N1), array which is to be multiplied
  1150.        by X.
  1151.  
  1152.  
  1153. SUBROUTINE SGBMV(TRANS,M,N,KL,KU,ALPHA,A,LDA,X,INCX,BETA,Y,INCY)
  1154.  
  1155. SGBMV  performs one of the matrix-vector operations
  1156.  
  1157.    y := alpha*A*x + beta*y,   or   y := alpha*A'*x + beta*y,
  1158.  
  1159. where alpha and beta are scalars, x and y are vectors and A is an
  1160. m by n band matrix, with kl sub-diagonals and ku super-diagonals.
  1161.  
  1162. TRANS  - CHARACTER*1.
  1163.          On entry, TRANS specifies the operation to be performed as
  1164.          follows:
  1165.  
  1166.             TRANS = 'N' or 'n'   y := alpha*A*x + beta*y.
  1167.  
  1168.             TRANS = 'T' or 't'   y := alpha*A'*x + beta*y.
  1169.  
  1170.             TRANS = 'C' or 'c'   y := alpha*A'*x + beta*y.
  1171.  
  1172.          Unchanged on exit.
  1173.  
  1174. M      - INTEGER.
  1175.          On entry, M specifies the number of rows of the matrix A.
  1176.          M must be at least zero.
  1177.          Unchanged on exit.
  1178.  
  1179. N      - INTEGER.
  1180.          On entry, N specifies the number of columns of the matrix A.
  1181.          N must be at least zero.
  1182.          Unchanged on exit.
  1183.  
  1184. KL     - INTEGER.
  1185.          On entry, KL specifies the number of sub-diagonals of the
  1186.          matrix A. KL must satisfy  0 .le. KL.
  1187.          Unchanged on exit.
  1188.  
  1189. KU     - INTEGER.
  1190.          On entry, KU specifies the number of super-diagonals of the
  1191.          matrix A. KU must satisfy  0 .le. KU.
  1192.          Unchanged on exit.
  1193.  
  1194. ALPHA  - REAL            .
  1195.          On entry, ALPHA specifies the scalar alpha.
  1196.          Unchanged on exit.
  1197.  
  1198. A      - REAL             array of DIMENSION ( LDA, n ).
  1199.          Before entry, the leading ( kl + ku + 1 ) by n part of the
  1200.          array A must contain the matrix of coefficients, supplied
  1201.          column by column, with the leading diagonal of the matrix in
  1202.          row ( ku + 1 ) of the array, the first super-diagonal
  1203.          starting at position 2 in row ku, the first sub-diagonal
  1204.          starting at position 1 in row ( ku + 2 ), and so on.
  1205.          Elements in the array A that do not correspond to elements
  1206.          in the band matrix (such as the top left ku by ku triangle)
  1207.          are not referenced.
  1208.          The following program segment will transfer a band matrix
  1209.          from conventional full matrix storage to band storage:
  1210.  
  1211.                DO 20, J = 1, N
  1212.                   K = KU + 1 - J
  1213.                   DO 10, I = MAX( 1, J - KU ), MIN( M, J + KL )
  1214.                      A( K + I, J ) = matrix( I, J )
  1215.             10    CONTINUE
  1216.             20 CONTINUE
  1217.  
  1218.          Unchanged on exit.
  1219.  
  1220. LDA    - INTEGER.
  1221.          On entry, LDA specifies the first dimension of A as declared
  1222.          in the calling (sub) program. LDA must be at least
  1223.          ( kl + ku + 1 ).
  1224.          Unchanged on exit.
  1225.  
  1226. X      - REAL             array of DIMENSION at least
  1227.          ( 1 + ( n - 1 )*abs( INCX ) ) when TRANS = 'N' or 'n'
  1228.          and at least
  1229.          ( 1 + ( m - 1 )*abs( INCX ) ) otherwise.
  1230.          Before entry, the incremented array X must contain the
  1231.          vector x.
  1232.          Unchanged on exit.
  1233.  
  1234. INCX   - INTEGER.
  1235.          On entry, INCX specifies the increment for the elements of
  1236.          X. INCX must not be zero.
  1237.          Unchanged on exit.
  1238.  
  1239. BETA   - REAL            .
  1240.          On entry, BETA specifies the scalar beta. When BETA is
  1241.          supplied as zero then Y need not be set on input.
  1242.          Unchanged on exit.
  1243.  
  1244. Y      - REAL             array of DIMENSION at least
  1245.          ( 1 + ( m - 1 )*abs( INCY ) ) when TRANS = 'N' or 'n'
  1246.          and at least
  1247.          ( 1 + ( n - 1 )*abs( INCY ) ) otherwise.
  1248.          Before entry, the incremented array Y must contain the
  1249.          vector y. On exit, Y is overwritten by the updated vector y.
  1250.  
  1251. INCY   - INTEGER.
  1252.          On entry, INCY specifies the increment for the elements of
  1253.          Y. INCY must not be zero.
  1254.          Unchanged on exit.
  1255.  
  1256.  
  1257. SUBROUTINE SGEMV(TRANS,M,N,ALPHA,A,LDA,X,INCX,BETA,Y,INCY)
  1258.  
  1259. SGEMV  performs one of the matrix-vector operations
  1260.  
  1261.    y := alpha*A*x + beta*y,   or   y := alpha*A'*x + beta*y,
  1262.  
  1263. where alpha and beta are scalars, x and y are vectors and A is an
  1264. m by n matrix.
  1265.  
  1266. TRANS  - CHARACTER*1.
  1267.          On entry, TRANS specifies the operation to be performed as
  1268.          follows:
  1269.  
  1270.             TRANS = 'N' or 'n'   y := alpha*A*x + beta*y.
  1271.  
  1272.             TRANS = 'T' or 't'   y := alpha*A'*x + beta*y.
  1273.  
  1274.             TRANS = 'C' or 'c'   y := alpha*A'*x + beta*y.
  1275.  
  1276.          Unchanged on exit.
  1277.  
  1278. M      - INTEGER.
  1279.          On entry, M specifies the number of rows of the matrix A.
  1280.          M must be at least zero.
  1281.          Unchanged on exit.
  1282.  
  1283. N      - INTEGER.
  1284.          On entry, N specifies the number of columns of the matrix A.
  1285.          N must be at least zero.
  1286.          Unchanged on exit.
  1287.  
  1288. ALPHA  - REAL            .
  1289.          On entry, ALPHA specifies the scalar alpha.
  1290.          Unchanged on exit.
  1291.  
  1292. A      - REAL             array of DIMENSION ( LDA, n ).
  1293.          Before entry, the leading m by n part of the array A must
  1294.          contain the matrix of coefficients.
  1295.          Unchanged on exit.
  1296.  
  1297. LDA    - INTEGER.
  1298.          On entry, LDA specifies the first dimension of A as declared
  1299.          in the calling (sub) program. LDA must be at least
  1300.          max( 1, m ).
  1301.          Unchanged on exit.
  1302.  
  1303. X      - REAL             array of DIMENSION at least
  1304.          ( 1 + ( n - 1 )*abs( INCX ) ) when TRANS = 'N' or 'n'
  1305.          and at least
  1306.          ( 1 + ( m - 1 )*abs( INCX ) ) otherwise.
  1307.          Before entry, the incremented array X must contain the
  1308.          vector x.
  1309.          Unchanged on exit.
  1310.  
  1311. INCX   - INTEGER.
  1312.          On entry, INCX specifies the increment for the elements of
  1313.          X. INCX must not be zero.
  1314.          Unchanged on exit.
  1315.  
  1316. BETA   - REAL            .
  1317.          On entry, BETA specifies the scalar beta. When BETA is
  1318.          supplied as zero then Y need not be set on input.
  1319.          Unchanged on exit.
  1320.  
  1321. Y      - REAL             array of DIMENSION at least
  1322.          ( 1 + ( m - 1 )*abs( INCY ) ) when TRANS = 'N' or 'n'
  1323.          and at least
  1324.          ( 1 + ( n - 1 )*abs( INCY ) ) otherwise.
  1325.          Before entry with BETA non-zero, the incremented array Y
  1326.          must contain the vector y. On exit, Y is overwritten by the
  1327.          updated vector y.
  1328.  
  1329. INCY   - INTEGER.
  1330.          On entry, INCY specifies the increment for the elements of
  1331.          Y. INCY must not be zero.
  1332.          Unchanged on exit.
  1333.  
  1334.  
  1335. SUBROUTINE SGER(M,N,ALPHA,X,INCX,Y,INCY,A,LDA)
  1336.  
  1337. SGER   performs the rank 1 operation
  1338.  
  1339.    A := alpha*x*y' + A,
  1340.  
  1341. where alpha is a scalar, x is an m element vector, y is an n element
  1342. vector and A is an m by n matrix.
  1343.  
  1344. M      - INTEGER.
  1345.          On entry, M specifies the number of rows of the matrix A.
  1346.          M must be at least zero.
  1347.          Unchanged on exit.
  1348.  
  1349. N      - INTEGER.
  1350.          On entry, N specifies the number of columns of the matrix A.
  1351.          N must be at least zero.
  1352.          Unchanged on exit.
  1353.  
  1354. ALPHA  - REAL            .
  1355.          On entry, ALPHA specifies the scalar alpha.
  1356.          Unchanged on exit.
  1357.  
  1358. X      - REAL             array of dimension at least
  1359.          ( 1 + ( m - 1 )*abs( INCX ) ).
  1360.          Before entry, the incremented array X must contain the m
  1361.          element vector x.
  1362.          Unchanged on exit.
  1363.  
  1364. INCX   - INTEGER.
  1365.          On entry, INCX specifies the increment for the elements of
  1366.          X. INCX must not be zero.
  1367.          Unchanged on exit.
  1368.  
  1369. Y      - REAL             array of dimension at least
  1370.          ( 1 + ( n - 1 )*abs( INCY ) ).
  1371.          Before entry, the incremented array Y must contain the n
  1372.          element vector y.
  1373.          Unchanged on exit.
  1374.  
  1375. INCY   - INTEGER.
  1376.          On entry, INCY specifies the increment for the elements of
  1377.          Y. INCY must not be zero.
  1378.          Unchanged on exit.
  1379.  
  1380. A      - REAL             array of DIMENSION ( LDA, n ).
  1381.          Before entry, the leading m by n part of the array A must
  1382.          contain the matrix of coefficients. On exit, A is
  1383.          overwritten by the updated matrix.
  1384.  
  1385. LDA    - INTEGER.
  1386.          On entry, LDA specifies the first dimension of A as declared
  1387.          in the calling (sub) program. LDA must be at least
  1388.          max( 1, m ).
  1389.          Unchanged on exit.
  1390.  
  1391.  
  1392. SUBROUTINE SSBMV(UPLO,N,K,ALPHA,A,LDA,X,INCX,BETA,Y,INCY)
  1393.  
  1394. SSBMV  performs the matrix-vector  operation
  1395.  
  1396.    y := alpha*A*x + beta*y,
  1397.  
  1398. where alpha and beta are scalars, x and y are n element vectors and
  1399. A is an n by n symmetric band matrix, with k super-diagonals.
  1400.  
  1401. UPLO   - CHARACTER*1.
  1402.          On entry, UPLO specifies whether the upper or lower
  1403.          triangular part of the band matrix A is being supplied as
  1404.          follows:
  1405.  
  1406.             UPLO = 'U' or 'u'   The upper triangular part of A is
  1407.                                 being supplied.
  1408.  
  1409.             UPLO = 'L' or 'l'   The lower triangular part of A is
  1410.                                 being supplied.
  1411.  
  1412.          Unchanged on exit.
  1413.  
  1414. N      - INTEGER.
  1415.          On entry, N specifies the order of the matrix A.
  1416.          N must be at least zero.
  1417.          Unchanged on exit.
  1418.  
  1419. K      - INTEGER.
  1420.          On entry, K specifies the number of super-diagonals of the
  1421.          matrix A. K must satisfy  0 .le. K.
  1422.          Unchanged on exit.
  1423.  
  1424. ALPHA  - REAL            .
  1425.          On entry, ALPHA specifies the scalar alpha.
  1426.          Unchanged on exit.
  1427.  
  1428. A      - REAL             array of DIMENSION ( LDA, n ).
  1429.          Before entry with UPLO = 'U' or 'u', the leading ( k + 1 )
  1430.          by n part of the array A must contain the upper triangular
  1431.          band part of the symmetric matrix, supplied column by
  1432.          column, with the leading diagonal of the matrix in row
  1433.          ( k + 1 ) of the array, the first super-diagonal starting at
  1434.          position 2 in row k, and so on. The top left k by k triangle
  1435.          of the array A is not referenced.
  1436.          The following program segment will transfer the upper
  1437.          triangular part of a symmetric band matrix from conventional
  1438.          full matrix storage to band storage:
  1439.  
  1440.                DO 20, J = 1, N
  1441.                   M = K + 1 - J
  1442.                   DO 10, I = MAX( 1, J - K ), J
  1443.                      A( M + I, J ) = matrix( I, J )
  1444.             10    CONTINUE
  1445.             20 CONTINUE
  1446.  
  1447.          Before entry with UPLO = 'L' or 'l', the leading ( k + 1 )
  1448.          by n part of the array A must contain the lower triangular
  1449.          band part of the symmetric matrix, supplied column by
  1450.          column, with the leading diagonal of the matrix in row 1 of
  1451.          the array, the first sub-diagonal starting at position 1 in
  1452.          row 2, and so on. The bottom right k by k triangle of the
  1453.          array A is not referenced.
  1454.          The following program segment will transfer the lower
  1455.          triangular part of a symmetric band matrix from conventional
  1456.          full matrix storage to band storage:
  1457.  
  1458.                DO 20, J = 1, N
  1459.                   M = 1 - J
  1460.                   DO 10, I = J, MIN( N, J + K )
  1461.                      A( M + I, J ) = matrix( I, J )
  1462.             10    CONTINUE
  1463.             20 CONTINUE
  1464.  
  1465.          Unchanged on exit.
  1466.  
  1467. LDA    - INTEGER.
  1468.          On entry, LDA specifies the first dimension of A as declared
  1469.          in the calling (sub) program. LDA must be at least
  1470.          ( k + 1 ).
  1471.          Unchanged on exit.
  1472.  
  1473. X      - REAL             array of DIMENSION at least
  1474.          ( 1 + ( n - 1 )*abs( INCX ) ).
  1475.          Before entry, the incremented array X must contain the
  1476.          vector x.
  1477.          Unchanged on exit.
  1478.  
  1479. INCX   - INTEGER.
  1480.          On entry, INCX specifies the increment for the elements of
  1481.          X. INCX must not be zero.
  1482.          Unchanged on exit.
  1483.  
  1484. BETA   - REAL            .
  1485.          On entry, BETA specifies the scalar beta.
  1486.          Unchanged on exit.
  1487.  
  1488. Y      - REAL             array of DIMENSION at least
  1489.          ( 1 + ( n - 1 )*abs( INCY ) ).
  1490.          Before entry, the incremented array Y must contain the
  1491.          vector y. On exit, Y is overwritten by the updated vector y.
  1492.  
  1493. INCY   - INTEGER.
  1494.          On entry, INCY specifies the increment for the elements of
  1495.          Y. INCY must not be zero.
  1496.          Unchanged on exit.
  1497.  
  1498.  
  1499. SUBROUTINE SSPMV(UPLO,N,ALPHA,AP,X,INCX,BETA,Y,INCY)
  1500.  
  1501. SSPMV  performs the matrix-vector operation
  1502.  
  1503.    y := alpha*A*x + beta*y,
  1504.  
  1505. where alpha and beta are scalars, x and y are n element vectors and
  1506. A is an n by n symmetric matrix, supplied in packed form.
  1507.  
  1508. UPLO   - CHARACTER*1.
  1509.          On entry, UPLO specifies whether the upper or lower
  1510.          triangular part of the matrix A is supplied in the packed
  1511.          array AP as follows:
  1512.  
  1513.             UPLO = 'U' or 'u'   The upper triangular part of A is
  1514.                                 supplied in AP.
  1515.  
  1516.             UPLO = 'L' or 'l'   The lower triangular part of A is
  1517.                                 supplied in AP.
  1518.  
  1519.          Unchanged on exit.
  1520.  
  1521. N      - INTEGER.
  1522.          On entry, N specifies the order of the matrix A.
  1523.          N must be at least zero.
  1524.          Unchanged on exit.
  1525.  
  1526. ALPHA  - REAL            .
  1527.          On entry, ALPHA specifies the scalar alpha.
  1528.          Unchanged on exit.
  1529.  
  1530. AP     - REAL             array of DIMENSION at least
  1531.          ( ( n*( n + 1 ) )/2 ).
  1532.          Before entry with UPLO = 'U' or 'u', the array AP must
  1533.          contain the upper triangular part of the symmetric matrix
  1534.          packed sequentially, column by column, so that AP( 1 )
  1535.          contains a( 1, 1 ), AP( 2 ) and AP( 3 ) contain a( 1, 2 )
  1536.          and a( 2, 2 ) respectively, and so on.
  1537.          Before entry with UPLO = 'L' or 'l', the array AP must
  1538.          contain the lower triangular part of the symmetric matrix
  1539.          packed sequentially, column by column, so that AP( 1 )
  1540.          contains a( 1, 1 ), AP( 2 ) and AP( 3 ) contain a( 2, 1 )
  1541.          and a( 3, 1 ) respectively, and so on.
  1542.          Unchanged on exit.
  1543.  
  1544. X      - REAL             array of dimension at least
  1545.          ( 1 + ( n - 1 )*abs( INCX ) ).
  1546.          Before entry, the incremented array X must contain the n
  1547.          element vector x.
  1548.          Unchanged on exit.
  1549.  
  1550. INCX   - INTEGER.
  1551.          On entry, INCX specifies the increment for the elements of
  1552.          X. INCX must not be zero.
  1553.          Unchanged on exit.
  1554.  
  1555. BETA   - REAL            .
  1556.          On entry, BETA specifies the scalar beta. When BETA is
  1557.          supplied as zero then Y need not be set on input.
  1558.          Unchanged on exit.
  1559.  
  1560. Y      - REAL             array of dimension at least
  1561.          ( 1 + ( n - 1 )*abs( INCY ) ).
  1562.          Before entry, the incremented array Y must contain the n
  1563.          element vector y. On exit, Y is overwritten by the updated
  1564.          vector y.
  1565.  
  1566. INCY   - INTEGER.
  1567.          On entry, INCY specifies the increment for the elements of
  1568.          Y. INCY must not be zero.
  1569.          Unchanged on exit.
  1570.  
  1571.  
  1572. SUBROUTINE SSPR(UPLO,N,ALPHA,X,INCX,AP)
  1573.  
  1574. SSPR    performs the symmetric rank 1 operation
  1575.  
  1576.    A := alpha*x*x' + A,
  1577.  
  1578. where alpha is a real scalar, x is an n element vector and A is an
  1579. n by n symmetric matrix, supplied in packed form.
  1580.  
  1581. UPLO   - CHARACTER*1.
  1582.          On entry, UPLO specifies whether the upper or lower
  1583.          triangular part of the matrix A is supplied in the packed
  1584.          array AP as follows:
  1585.  
  1586.             UPLO = 'U' or 'u'   The upper triangular part of A is
  1587.                                 supplied in AP.
  1588.  
  1589.             UPLO = 'L' or 'l'   The lower triangular part of A is
  1590.                                 supplied in AP.
  1591.  
  1592.          Unchanged on exit.
  1593.  
  1594. N      - INTEGER.
  1595.          On entry, N specifies the order of the matrix A.
  1596.          N must be at least zero.
  1597.          Unchanged on exit.
  1598.  
  1599. ALPHA  - REAL            .
  1600.          On entry, ALPHA specifies the scalar alpha.
  1601.          Unchanged on exit.
  1602.  
  1603. X      - REAL             array of dimension at least
  1604.          ( 1 + ( n - 1 )*abs( INCX ) ).
  1605.          Before entry, the incremented array X must contain the n
  1606.          element vector x.
  1607.          Unchanged on exit.
  1608.  
  1609. INCX   - INTEGER.
  1610.          On entry, INCX specifies the increment for the elements of
  1611.          X. INCX must not be zero.
  1612.          Unchanged on exit.
  1613.  
  1614. AP     - REAL             array of DIMENSION at least
  1615.          ( ( n*( n + 1 ) )/2 ).
  1616.          Before entry with  UPLO = 'U' or 'u', the array AP must
  1617.          contain the upper triangular part of the symmetric matrix
  1618.          packed sequentially, column by column, so that AP( 1 )
  1619.          contains a( 1, 1 ), AP( 2 ) and AP( 3 ) contain a( 1, 2 )
  1620.          and a( 2, 2 ) respectively, and so on. On exit, the array
  1621.          AP is overwritten by the upper triangular part of the
  1622.          updated matrix.
  1623.          Before entry with UPLO = 'L' or 'l', the array AP must
  1624.          contain the lower triangular part of the symmetric matrix
  1625.          packed sequentially, column by column, so that AP( 1 )
  1626.          contains a( 1, 1 ), AP( 2 ) and AP( 3 ) contain a( 2, 1 )
  1627.          and a( 3, 1 ) respectively, and so on. On exit, the array
  1628.          AP is overwritten by the lower triangular part of the
  1629.          updated matrix.
  1630.  
  1631.  
  1632. SUBROUTINE SSPR2(UPLO,N,ALPHA,X,INCX,Y,INCY,AP)
  1633.  
  1634. SSPR2  performs the symmetric rank 2 operation
  1635.  
  1636.    A := alpha*x*y' + alpha*y*x' + A,
  1637.  
  1638. where alpha is a scalar, x and y are n element vectors and A is an
  1639. n by n symmetric matrix, supplied in packed form.
  1640.  
  1641. UPLO   - CHARACTER*1.
  1642.          On entry, UPLO specifies whether the upper or lower
  1643.          triangular part of the matrix A is supplied in the packed
  1644.          array AP as follows:
  1645.  
  1646.             UPLO = 'U' or 'u'   The upper triangular part of A is
  1647.                                 supplied in AP.
  1648.  
  1649.             UPLO = 'L' or 'l'   The lower triangular part of A is
  1650.                                 supplied in AP.
  1651.  
  1652.          Unchanged on exit.
  1653.  
  1654. N      - INTEGER.
  1655.          On entry, N specifies the order of the matrix A.
  1656.          N must be at least zero.
  1657.          Unchanged on exit.
  1658.  
  1659. ALPHA  - REAL            .
  1660.          On entry, ALPHA specifies the scalar alpha.
  1661.          Unchanged on exit.
  1662.  
  1663. X      - REAL             array of dimension at least
  1664.          ( 1 + ( n - 1 )*abs( INCX ) ).
  1665.          Before entry, the incremented array X must contain the n
  1666.          element vector x.
  1667.          Unchanged on exit.
  1668.  
  1669. INCX   - INTEGER.
  1670.          On entry, INCX specifies the increment for the elements of
  1671.          X. INCX must not be zero.
  1672.          Unchanged on exit.
  1673.  
  1674. Y      - REAL             array of dimension at least
  1675.          ( 1 + ( n - 1 )*abs( INCY ) ).
  1676.          Before entry, the incremented array Y must contain the n
  1677.          element vector y.
  1678.          Unchanged on exit.
  1679.  
  1680. INCY   - INTEGER.
  1681.          On entry, INCY specifies the increment for the elements of
  1682.          Y. INCY must not be zero.
  1683.          Unchanged on exit.
  1684.  
  1685. AP     - REAL             array of DIMENSION at least
  1686.          ( ( n*( n + 1 ) )/2 ).
  1687.          Before entry with  UPLO = 'U' or 'u', the array AP must
  1688.          contain the upper triangular part of the symmetric matrix
  1689.          packed sequentially, column by column, so that AP( 1 )
  1690.          contains a( 1, 1 ), AP( 2 ) and AP( 3 ) contain a( 1, 2 )
  1691.          and a( 2, 2 ) respectively, and so on. On exit, the array
  1692.          AP is overwritten by the upper triangular part of the
  1693.          updated matrix.
  1694.          Before entry with UPLO = 'L' or 'l', the array AP must
  1695.          contain the lower triangular part of the symmetric matrix
  1696.          packed sequentially, column by column, so that AP( 1 )
  1697.          contains a( 1, 1 ), AP( 2 ) and AP( 3 ) contain a( 2, 1 )
  1698.          and a( 3, 1 ) respectively, and so on. On exit, the array
  1699.          AP is overwritten by the lower triangular part of the
  1700.          updated matrix.
  1701.  
  1702.  
  1703. SUBROUTINE SSYMV(UPLO,N,ALPHA,A,LDA,X,INCX,BETA,Y,INCY)
  1704.  
  1705. SSYMV  performs the matrix-vector  operation
  1706.  
  1707.    y := alpha*A*x + beta*y,
  1708.  
  1709. where alpha and beta are scalars, x and y are n element vectors and
  1710. A is an n by n symmetric matrix.
  1711.  
  1712. UPLO   - CHARACTER*1.
  1713.          On entry, UPLO specifies whether the upper or lower
  1714.          triangular part of the array A is to be referenced as
  1715.          follows:
  1716.  
  1717.             UPLO = 'U' or 'u'   Only the upper triangular part of A
  1718.                                 is to be referenced.
  1719.  
  1720.             UPLO = 'L' or 'l'   Only the lower triangular part of A
  1721.                                 is to be referenced.
  1722.  
  1723.          Unchanged on exit.
  1724.  
  1725. N      - INTEGER.
  1726.          On entry, N specifies the order of the matrix A.
  1727.          N must be at least zero.
  1728.          Unchanged on exit.
  1729.  
  1730. ALPHA  - REAL            .
  1731.          On entry, ALPHA specifies the scalar alpha.
  1732.          Unchanged on exit.
  1733.  
  1734. A      - REAL             array of DIMENSION ( LDA, n ).
  1735.          Before entry with  UPLO = 'U' or 'u', the leading n by n
  1736.          upper triangular part of the array A must contain the upper
  1737.          triangular part of the symmetric matrix and the strictly
  1738.          lower triangular part of A is not referenced.
  1739.          Before entry with UPLO = 'L' or 'l', the leading n by n
  1740.          lower triangular part of the array A must contain the lower
  1741.          triangular part of the symmetric matrix and the strictly
  1742.          upper triangular part of A is not referenced.
  1743.          Unchanged on exit.
  1744.  
  1745. LDA    - INTEGER.
  1746.          On entry, LDA specifies the first dimension of A as declared
  1747.          in the calling (sub) program. LDA must be at least
  1748.          max( 1, n ).
  1749.          Unchanged on exit.
  1750.  
  1751. X      - REAL             array of dimension at least
  1752.          ( 1 + ( n - 1 )*abs( INCX ) ).
  1753.          Before entry, the incremented array X must contain the n
  1754.          element vector x.
  1755.          Unchanged on exit.
  1756.  
  1757. INCX   - INTEGER.
  1758.          On entry, INCX specifies the increment for the elements of
  1759.          X. INCX must not be zero.
  1760.          Unchanged on exit.
  1761.  
  1762. BETA   - REAL            .
  1763.          On entry, BETA specifies the scalar beta. When BETA is
  1764.          supplied as zero then Y need not be set on input.
  1765.          Unchanged on exit.
  1766.  
  1767. Y      - REAL             array of dimension at least
  1768.          ( 1 + ( n - 1 )*abs( INCY ) ).
  1769.          Before entry, the incremented array Y must contain the n
  1770.          element vector y. On exit, Y is overwritten by the updated
  1771.          vector y.
  1772.  
  1773. INCY   - INTEGER.
  1774.          On entry, INCY specifies the increment for the elements of
  1775.          Y. INCY must not be zero.
  1776.          Unchanged on exit.
  1777.  
  1778.  
  1779. SUBROUTINE SSYR(UPLO,N,ALPHA,X,INCX,A,LDA)
  1780.  
  1781. SSYR   performs the symmetric rank 1 operation
  1782.  
  1783.    A := alpha*x*x' + A,
  1784.  
  1785. where alpha is a real scalar, x is an n element vector and A is an
  1786. n by n symmetric matrix.
  1787.  
  1788. UPLO   - CHARACTER*1.
  1789.          On entry, UPLO specifies whether the upper or lower
  1790.          triangular part of the array A is to be referenced as
  1791.          follows:
  1792.  
  1793.             UPLO = 'U' or 'u'   Only the upper triangular part of A
  1794.                                 is to be referenced.
  1795.  
  1796.             UPLO = 'L' or 'l'   Only the lower triangular part of A
  1797.                                 is to be referenced.
  1798.  
  1799.          Unchanged on exit.
  1800.  
  1801. N      - INTEGER.
  1802.          On entry, N specifies the order of the matrix A.
  1803.          N must be at least zero.
  1804.          Unchanged on exit.
  1805.  
  1806. ALPHA  - REAL            .
  1807.          On entry, ALPHA specifies the scalar alpha.
  1808.          Unchanged on exit.
  1809.  
  1810. X      - REAL             array of dimension at least
  1811.          ( 1 + ( n - 1 )*abs( INCX ) ).
  1812.          Before entry, the incremented array X must contain the n
  1813.          element vector x.
  1814.          Unchanged on exit.
  1815.  
  1816. INCX   - INTEGER.
  1817.          On entry, INCX specifies the increment for the elements of
  1818.          X. INCX must not be zero.
  1819.          Unchanged on exit.
  1820.  
  1821. A      - REAL             array of DIMENSION ( LDA, n ).
  1822.          Before entry with  UPLO = 'U' or 'u', the leading n by n
  1823.          upper triangular part of the array A must contain the upper
  1824.          triangular part of the symmetric matrix and the strictly
  1825.          lower triangular part of A is not referenced. On exit, the
  1826.          upper triangular part of the array A is overwritten by the
  1827.          upper triangular part of the updated matrix.
  1828.          Before entry with UPLO = 'L' or 'l', the leading n by n
  1829.          lower triangular part of the array A must contain the lower
  1830.          triangular part of the symmetric matrix and the strictly
  1831.          upper triangular part of A is not referenced. On exit, the
  1832.          lower triangular part of the array A is overwritten by the
  1833.          lower triangular part of the updated matrix.
  1834.  
  1835. LDA    - INTEGER.
  1836.          On entry, LDA specifies the first dimension of A as declared
  1837.          in the calling (sub) program. LDA must be at least
  1838.          max( 1, n ).
  1839.          Unchanged on exit.
  1840.  
  1841.  
  1842. SUBROUTINE SSYR2(UPLO,N,ALPHA,X,INCX,Y,INCY,A,LDA)
  1843.  
  1844. SSYR2  performs the symmetric rank 2 operation
  1845.  
  1846.    A := alpha*x*y' + alpha*y*x' + A,
  1847.  
  1848. where alpha is a scalar, x and y are n element vectors and A is an n
  1849. by n symmetric matrix.
  1850.  
  1851. UPLO   - CHARACTER*1.
  1852.          On entry, UPLO specifies whether the upper or lower
  1853.          triangular part of the array A is to be referenced as
  1854.          follows:
  1855.  
  1856.             UPLO = 'U' or 'u'   Only the upper triangular part of A
  1857.                                 is to be referenced.
  1858.  
  1859.             UPLO = 'L' or 'l'   Only the lower triangular part of A
  1860.                                 is to be referenced.
  1861.  
  1862.          Unchanged on exit.
  1863.  
  1864. N      - INTEGER.
  1865.          On entry, N specifies the order of the matrix A.
  1866.          N must be at least zero.
  1867.          Unchanged on exit.
  1868.  
  1869. ALPHA  - REAL            .
  1870.          On entry, ALPHA specifies the scalar alpha.
  1871.          Unchanged on exit.
  1872.  
  1873. X      - REAL             array of dimension at least
  1874.          ( 1 + ( n - 1 )*abs( INCX ) ).
  1875.          Before entry, the incremented array X must contain the n
  1876.          element vector x.
  1877.          Unchanged on exit.
  1878.  
  1879. INCX   - INTEGER.
  1880.          On entry, INCX specifies the increment for the elements of
  1881.          X. INCX must not be zero.
  1882.          Unchanged on exit.
  1883.  
  1884. Y      - REAL             array of dimension at least
  1885.          ( 1 + ( n - 1 )*abs( INCY ) ).
  1886.          Before entry, the incremented array Y must contain the n
  1887.          element vector y.
  1888.          Unchanged on exit.
  1889.  
  1890. INCY   - INTEGER.
  1891.          On entry, INCY specifies the increment for the elements of
  1892.          Y. INCY must not be zero.
  1893.          Unchanged on exit.
  1894.  
  1895. A      - REAL             array of DIMENSION ( LDA, n ).
  1896.          Before entry with  UPLO = 'U' or 'u', the leading n by n
  1897.          upper triangular part of the array A must contain the upper
  1898.          triangular part of the symmetric matrix and the strictly
  1899.          lower triangular part of A is not referenced. On exit, the
  1900.          upper triangular part of the array A is overwritten by the
  1901.          upper triangular part of the updated matrix.
  1902.          Before entry with UPLO = 'L' or 'l', the leading n by n
  1903.          lower triangular part of the array A must contain the lower
  1904.          triangular part of the symmetric matrix and the strictly
  1905.          upper triangular part of A is not referenced. On exit, the
  1906.          lower triangular part of the array A is overwritten by the
  1907.          lower triangular part of the updated matrix.
  1908.  
  1909. LDA    - INTEGER.
  1910.          On entry, LDA specifies the first dimension of A as declared
  1911.          in the calling (sub) program. LDA must be at least
  1912.          max( 1, n ).
  1913.          Unchanged on exit.
  1914.  
  1915.  
  1916. SUBROUTINE STBMV(UPLO,TRANS,DIAG,N,K,A,LDA,X,INCX)
  1917.  
  1918. STBMV  performs one of the matrix-vector operations
  1919.  
  1920.    x := A*x,   or   x := A'*x,
  1921.  
  1922. where x is an n element vector and  A is an n by n unit, or non-unit,
  1923. upper or lower triangular band matrix, with ( k + 1 ) diagonals.
  1924.  
  1925. UPLO   - CHARACTER*1.
  1926.          On entry, UPLO specifies whether the matrix is an upper or
  1927.          lower triangular matrix as follows:
  1928.  
  1929.             UPLO = 'U' or 'u'   A is an upper triangular matrix.
  1930.  
  1931.             UPLO = 'L' or 'l'   A is a lower triangular matrix.
  1932.  
  1933.          Unchanged on exit.
  1934.  
  1935. TRANS  - CHARACTER*1.
  1936.          On entry, TRANS specifies the operation to be performed as
  1937.          follows:
  1938.  
  1939.             TRANS = 'N' or 'n'   x := A*x.
  1940.  
  1941.             TRANS = 'T' or 't'   x := A'*x.
  1942.  
  1943.             TRANS = 'C' or 'c'   x := A'*x.
  1944.  
  1945.          Unchanged on exit.
  1946.  
  1947. DIAG   - CHARACTER*1.
  1948.          On entry, DIAG specifies whether or not A is unit
  1949.          triangular as follows:
  1950.  
  1951.             DIAG = 'U' or 'u'   A is assumed to be unit triangular.
  1952.  
  1953.             DIAG = 'N' or 'n'   A is not assumed to be unit
  1954.                                 triangular.
  1955.  
  1956.          Unchanged on exit.
  1957.  
  1958. N      - INTEGER.
  1959.          On entry, N specifies the order of the matrix A.
  1960.          N must be at least zero.
  1961.          Unchanged on exit.
  1962.  
  1963. K      - INTEGER.
  1964.          On entry with UPLO = 'U' or 'u', K specifies the number of
  1965.          super-diagonals of the matrix A.
  1966.          On entry with UPLO = 'L' or 'l', K specifies the number of
  1967.          sub-diagonals of the matrix A.
  1968.          K must satisfy  0 .le. K.
  1969.          Unchanged on exit.
  1970.  
  1971. A      - REAL             array of DIMENSION ( LDA, n ).
  1972.          Before entry with UPLO = 'U' or 'u', the leading ( k + 1 )
  1973.          by n part of the array A must contain the upper triangular
  1974.          band part of the matrix of coefficients, supplied column by
  1975.          column, with the leading diagonal of the matrix in row
  1976.          ( k + 1 ) of the array, the first super-diagonal starting at
  1977.          position 2 in row k, and so on. The top left k by k triangle
  1978.          of the array A is not referenced.
  1979.          The following program segment will transfer an upper
  1980.          triangular band matrix from conventional full matrix storage
  1981.          to band storage:
  1982.  
  1983.                DO 20, J = 1, N
  1984.                   M = K + 1 - J
  1985.                   DO 10, I = MAX( 1, J - K ), J
  1986.                      A( M + I, J ) = matrix( I, J )
  1987.             10    CONTINUE
  1988.             20 CONTINUE
  1989.  
  1990.          Before entry with UPLO = 'L' or 'l', the leading ( k + 1 )
  1991.          by n part of the array A must contain the lower triangular
  1992.          band part of the matrix of coefficients, supplied column by
  1993.          column, with the leading diagonal of the matrix in row 1 of
  1994.          the array, the first sub-diagonal starting at position 1 in
  1995.          row 2, and so on. The bottom right k by k triangle of the
  1996.          array A is not referenced.
  1997.          The following program segment will transfer a lower
  1998.          triangular band matrix from conventional full matrix storage
  1999.          to band storage:
  2000.  
  2001.                DO 20, J = 1, N
  2002.                   M = 1 - J
  2003.                   DO 10, I = J, MIN( N, J + K )
  2004.                      A( M + I, J ) = matrix( I, J )
  2005.             10    CONTINUE
  2006.             20 CONTINUE
  2007.  
  2008.          Note that when DIAG = 'U' or 'u' the elements of the array A
  2009.          corresponding to the diagonal elements of the matrix are not
  2010.          referenced, but are assumed to be unity.
  2011.          Unchanged on exit.
  2012.  
  2013. LDA    - INTEGER.
  2014.          On entry, LDA specifies the first dimension of A as declared
  2015.          in the calling (sub) program. LDA must be at least
  2016.          ( k + 1 ).
  2017.          Unchanged on exit.
  2018.  
  2019. X      - REAL             array of dimension at least
  2020.          ( 1 + ( n - 1 )*abs( INCX ) ).
  2021.          Before entry, the incremented array X must contain the n
  2022.          element vector x. On exit, X is overwritten with the
  2023.          tranformed vector x.
  2024.  
  2025. INCX   - INTEGER.
  2026.          On entry, INCX specifies the increment for the elements of
  2027.          X. INCX must not be zero.
  2028.          Unchanged on exit.
  2029.  
  2030.  
  2031. SUBROUTINE STBSV(UPLO,TRANS,DIAG,N,K,A,LDA,X,INCX)
  2032.  
  2033. STBSV  solves one of the systems of equations
  2034.  
  2035.    A*x = b,   or   A'*x = b,
  2036.  
  2037. where b and x are n element vectors and A is an n by n unit, or
  2038. non-unit, upper or lower triangular band matrix, with ( k + 1 )
  2039. diagonals.
  2040.  
  2041. No test for singularity or near-singularity is included in this
  2042. routine. Such tests must be performed before calling this routine.
  2043.  
  2044. UPLO   - CHARACTER*1.
  2045.          On entry, UPLO specifies whether the matrix is an upper or
  2046.          lower triangular matrix as follows:
  2047.  
  2048.             UPLO = 'U' or 'u'   A is an upper triangular matrix.
  2049.  
  2050.             UPLO = 'L' or 'l'   A is a lower triangular matrix.
  2051.  
  2052.          Unchanged on exit.
  2053.  
  2054. TRANS  - CHARACTER*1.
  2055.          On entry, TRANS specifies the equations to be solved as
  2056.          follows:
  2057.  
  2058.             TRANS = 'N' or 'n'   A*x = b.
  2059.  
  2060.             TRANS = 'T' or 't'   A'*x = b.
  2061.  
  2062.             TRANS = 'C' or 'c'   A'*x = b.
  2063.  
  2064.          Unchanged on exit.
  2065.  
  2066. DIAG   - CHARACTER*1.
  2067.          On entry, DIAG specifies whether or not A is unit
  2068.          triangular as follows:
  2069.  
  2070.             DIAG = 'U' or 'u'   A is assumed to be unit triangular.
  2071.  
  2072.             DIAG = 'N' or 'n'   A is not assumed to be unit
  2073.                                 triangular.
  2074.  
  2075.          Unchanged on exit.
  2076.  
  2077. N      - INTEGER.
  2078.          On entry, N specifies the order of the matrix A.
  2079.          N must be at least zero.
  2080.          Unchanged on exit.
  2081.  
  2082. K      - INTEGER.
  2083.          On entry with UPLO = 'U' or 'u', K specifies the number of
  2084.          super-diagonals of the matrix A.
  2085.          On entry with UPLO = 'L' or 'l', K specifies the number of
  2086.          sub-diagonals of the matrix A.
  2087.          K must satisfy  0 .le. K.
  2088.          Unchanged on exit.
  2089.  
  2090. A      - REAL             array of DIMENSION ( LDA, n ).
  2091.          Before entry with UPLO = 'U' or 'u', the leading ( k + 1 )
  2092.          by n part of the array A must contain the upper triangular
  2093.          band part of the matrix of coefficients, supplied column by
  2094.          column, with the leading diagonal of the matrix in row
  2095.          ( k + 1 ) of the array, the first super-diagonal starting at
  2096.          position 2 in row k, and so on. The top left k by k triangle
  2097.          of the array A is not referenced.
  2098.          The following program segment will transfer an upper
  2099.          triangular band matrix from conventional full matrix storage
  2100.          to band storage:
  2101.  
  2102.                DO 20, J = 1, N
  2103.                   M = K + 1 - J
  2104.                   DO 10, I = MAX( 1, J - K ), J
  2105.                      A( M + I, J ) = matrix( I, J )
  2106.             10    CONTINUE
  2107.             20 CONTINUE
  2108.  
  2109.          Before entry with UPLO = 'L' or 'l', the leading ( k + 1 )
  2110.          by n part of the array A must contain the lower triangular
  2111.          band part of the matrix of coefficients, supplied column by
  2112.          column, with the leading diagonal of the matrix in row 1 of
  2113.          the array, the first sub-diagonal starting at position 1 in
  2114.          row 2, and so on. The bottom right k by k triangle of the
  2115.          array A is not referenced.
  2116.          The following program segment will transfer a lower
  2117.          triangular band matrix from conventional full matrix storage
  2118.          to band storage:
  2119.  
  2120.                DO 20, J = 1, N
  2121.                   M = 1 - J
  2122.                   DO 10, I = J, MIN( N, J + K )
  2123.                      A( M + I, J ) = matrix( I, J )
  2124.             10    CONTINUE
  2125.             20 CONTINUE
  2126.  
  2127.          Note that when DIAG = 'U' or 'u' the elements of the array A
  2128.          corresponding to the diagonal elements of the matrix are not
  2129.          referenced, but are assumed to be unity.
  2130.          Unchanged on exit.
  2131.  
  2132. LDA    - INTEGER.
  2133.          On entry, LDA specifies the first dimension of A as declared
  2134.          in the calling (sub) program. LDA must be at least
  2135.          ( k + 1 ).
  2136.          Unchanged on exit.
  2137.  
  2138. X      - REAL             array of dimension at least
  2139.          ( 1 + ( n - 1 )*abs( INCX ) ).
  2140.          Before entry, the incremented array X must contain the n
  2141.          element right-hand side vector b. On exit, X is overwritten
  2142.          with the solution vector x.
  2143.  
  2144. INCX   - INTEGER.
  2145.          On entry, INCX specifies the increment for the elements of
  2146.          X. INCX must not be zero.
  2147.          Unchanged on exit.
  2148.  
  2149.  
  2150. SUBROUTINE STPMV(UPLO,TRANS,DIAG,N,AP,X,INCX)
  2151.  
  2152. STPMV  performs one of the matrix-vector operations
  2153.  
  2154.    x := A*x,   or   x := A'*x,
  2155.  
  2156. where x is an n element vector and  A is an n by n unit, or non-unit,
  2157. upper or lower triangular matrix, supplied in packed form.
  2158.  
  2159. UPLO   - CHARACTER*1.
  2160.          On entry, UPLO specifies whether the matrix is an upper or
  2161.          lower triangular matrix as follows:
  2162.  
  2163.             UPLO = 'U' or 'u'   A is an upper triangular matrix.
  2164.  
  2165.             UPLO = 'L' or 'l'   A is a lower triangular matrix.
  2166.  
  2167.          Unchanged on exit.
  2168.  
  2169. TRANS  - CHARACTER*1.
  2170.          On entry, TRANS specifies the operation to be performed as
  2171.          follows:
  2172.  
  2173.             TRANS = 'N' or 'n'   x := A*x.
  2174.  
  2175.             TRANS = 'T' or 't'   x := A'*x.
  2176.  
  2177.             TRANS = 'C' or 'c'   x := A'*x.
  2178.  
  2179.          Unchanged on exit.
  2180.  
  2181. DIAG   - CHARACTER*1.
  2182.          On entry, DIAG specifies whether or not A is unit
  2183.          triangular as follows:
  2184.  
  2185.             DIAG = 'U' or 'u'   A is assumed to be unit triangular.
  2186.  
  2187.             DIAG = 'N' or 'n'   A is not assumed to be unit
  2188.                                 triangular.
  2189.  
  2190.          Unchanged on exit.
  2191.  
  2192. N      - INTEGER.
  2193.          On entry, N specifies the order of the matrix A.
  2194.          N must be at least zero.
  2195.          Unchanged on exit.
  2196.  
  2197. AP     - REAL             array of DIMENSION at least
  2198.          ( ( n*( n + 1 ) )/2 ).
  2199.          Before entry with  UPLO = 'U' or 'u', the array AP must
  2200.          contain the upper triangular matrix packed sequentially,
  2201.          column by column, so that AP( 1 ) contains a( 1, 1 ),
  2202.          AP( 2 ) and AP( 3 ) contain a( 1, 2 ) and a( 2, 2 )
  2203.          respectively, and so on.
  2204.          Before entry with UPLO = 'L' or 'l', the array AP must
  2205.          contain the lower triangular matrix packed sequentially,
  2206.          column by column, so that AP( 1 ) contains a( 1, 1 ),
  2207.          AP( 2 ) and AP( 3 ) contain a( 2, 1 ) and a( 3, 1 )
  2208.          respectively, and so on.
  2209.          Note that when  DIAG = 'U' or 'u', the diagonal elements of
  2210.          A are not referenced, but are assumed to be unity.
  2211.          Unchanged on exit.
  2212.  
  2213. X      - REAL             array of dimension at least
  2214.          ( 1 + ( n - 1 )*abs( INCX ) ).
  2215.          Before entry, the incremented array X must contain the n
  2216.          element vector x. On exit, X is overwritten with the
  2217.          tranformed vector x.
  2218.  
  2219. INCX   - INTEGER.
  2220.          On entry, INCX specifies the increment for the elements of
  2221.          X. INCX must not be zero.
  2222.          Unchanged on exit.
  2223.  
  2224.  
  2225. SUBROUTINE STPSV(UPLO,TRANS,DIAG,N,AP,X,INCX)
  2226.  
  2227. STPSV  solves one of the systems of equations
  2228.  
  2229.    A*x = b,   or   A'*x = b,
  2230.  
  2231. where b and x are n element vectors and A is an n by n unit, or
  2232. non-unit, upper or lower triangular matrix, supplied in packed form.
  2233.  
  2234. No test for singularity or near-singularity is included in this
  2235. routine. Such tests must be performed before calling this routine.
  2236.  
  2237. UPLO   - CHARACTER*1.
  2238.          On entry, UPLO specifies whether the matrix is an upper or
  2239.          lower triangular matrix as follows:
  2240.  
  2241.             UPLO = 'U' or 'u'   A is an upper triangular matrix.
  2242.  
  2243.             UPLO = 'L' or 'l'   A is a lower triangular matrix.
  2244.  
  2245.          Unchanged on exit.
  2246.  
  2247. TRANS  - CHARACTER*1.
  2248.          On entry, TRANS specifies the equations to be solved as
  2249.          follows:
  2250.  
  2251.             TRANS = 'N' or 'n'   A*x = b.
  2252.  
  2253.             TRANS = 'T' or 't'   A'*x = b.
  2254.  
  2255.             TRANS = 'C' or 'c'   A'*x = b.
  2256.  
  2257.          Unchanged on exit.
  2258.  
  2259. DIAG   - CHARACTER*1.
  2260.          On entry, DIAG specifies whether or not A is unit
  2261.          triangular as follows:
  2262.  
  2263.             DIAG = 'U' or 'u'   A is assumed to be unit triangular.
  2264.  
  2265.             DIAG = 'N' or 'n'   A is not assumed to be unit
  2266.                                 triangular.
  2267.  
  2268.          Unchanged on exit.
  2269.  
  2270. N      - INTEGER.
  2271.          On entry, N specifies the order of the matrix A.
  2272.          N must be at least zero.
  2273.          Unchanged on exit.
  2274.  
  2275. AP     - REAL             array of DIMENSION at least
  2276.          ( ( n*( n + 1 ) )/2 ).
  2277.          Before entry with  UPLO = 'U' or 'u', the array AP must
  2278.          contain the upper triangular matrix packed sequentially,
  2279.          column by column, so that AP( 1 ) contains a( 1, 1 ),
  2280.          AP( 2 ) and AP( 3 ) contain a( 1, 2 ) and a( 2, 2 )
  2281.          respectively, and so on.
  2282.          Before entry with UPLO = 'L' or 'l', the array AP must
  2283.          contain the lower triangular matrix packed sequentially,
  2284.          column by column, so that AP( 1 ) contains a( 1, 1 ),
  2285.          AP( 2 ) and AP( 3 ) contain a( 2, 1 ) and a( 3, 1 )
  2286.          respectively, and so on.
  2287.          Note that when  DIAG = 'U' or 'u', the diagonal elements of
  2288.          A are not referenced, but are assumed to be unity.
  2289.          Unchanged on exit.
  2290.  
  2291. X      - REAL             array of dimension at least
  2292.          ( 1 + ( n - 1 )*abs( INCX ) ).
  2293.          Before entry, the incremented array X must contain the n
  2294.          element right-hand side vector b. On exit, X is overwritten
  2295.          with the solution vector x.
  2296.  
  2297. INCX   - INTEGER.
  2298.          On entry, INCX specifies the increment for the elements of
  2299.          X. INCX must not be zero.
  2300.          Unchanged on exit.
  2301.  
  2302.  
  2303. SUBROUTINE STRMV(UPLO,TRANS,DIAG,N,A,LDA,X,INCX)
  2304.  
  2305. STRMV  performs one of the matrix-vector operations
  2306.  
  2307.    x := A*x,   or   x := TRANSPOSE(A)*x,
  2308.  
  2309. where x is an n element vector and  A is an n by n unit, or non-unit,
  2310. upper or lower triangular matrix.
  2311.  
  2312. UPLO   Input, CHARACTER*1 UPLO.
  2313.        On entry, UPLO specifies whether the matrix is an upper or
  2314.        lower triangular matrix as follows:
  2315.  
  2316.          UPLO = 'U' or 'u'   A is an upper triangular matrix.
  2317.  
  2318.          UPLO = 'L' or 'l'   A is a lower triangular matrix.
  2319.  
  2320. TRANS  Input, CHARACTER*1 TRANS.
  2321.        On entry, TRANS specifies the operation to be performed as follows:
  2322.  
  2323.          TRANS = 'N' or 'n'   x := A*x.
  2324.  
  2325.          TRANS = 'T' or 't'   x := A'*x.
  2326.  
  2327.          TRANS = 'C' or 'c'   x := A'*x.
  2328.  
  2329. DIAG   Input, CHARACTER*1 DIAG.
  2330.        On entry, DIAG specifies whether or not A is unit triangular as follows:
  2331.  
  2332.          DIAG = 'U' or 'u'   A is assumed to be unit triangular.
  2333.  
  2334.          DIAG = 'N' or 'n'   A is not assumed to be unit triangular.
  2335.  
  2336. N      Input, INTEGER N.
  2337.        On entry, N specifies the order of the matrix A.
  2338.        N must be at least zero.
  2339.  
  2340. A      Input, REAL A(LDA,N).
  2341.        Before entry with  UPLO = 'U' or 'u', the leading n by n
  2342.        upper triangular part of the array A must contain the upper
  2343.        triangular matrix and the strictly lower triangular part of
  2344.        A is not referenced.
  2345.        Before entry with UPLO = 'L' or 'l', the leading n by n
  2346.        lower triangular part of the array A must contain the lower
  2347.        triangular matrix and the strictly upper triangular part of
  2348.        A is not referenced.
  2349.        Note that when  DIAG = 'U' or 'u', the diagonal elements of
  2350.        A are not referenced either, but are assumed to be unity.
  2351.  
  2352. LDA    Input, INTEGER LDA.
  2353.        On entry, LDA specifies the first dimension of A as declared
  2354.        in the calling (sub) program. LDA must be at least max( 1, n ).
  2355.  
  2356. X      Input/output, REAL X(N).
  2357.        Before entry, the incremented array X must contain the n
  2358.        element vector x. On exit, X is overwritten with the
  2359.        tranformed vector x.
  2360.  
  2361. INCX   Input, INTEGER INCX.
  2362.        On entry, INCX specifies the increment for the elements of
  2363.        X. INCX must not be zero.
  2364.  
  2365.  
  2366. SUBROUTINE STRSV(UPLO,TRANS,DIAG,N,A,LDA,X,INCX)
  2367.  
  2368. STRSV solves one of the systems of equations
  2369.  
  2370.    A*x = b,   or   A'*x = b,
  2371.  
  2372. where b and x are n element vectors and A is an n by n unit, or
  2373. non-unit, upper or lower triangular matrix.
  2374.  
  2375. No test for singularity or near-singularity is included in this
  2376. routine. Such tests must be performed before calling this routine.
  2377.  
  2378. UPLO   CHARACTER*1.
  2379.        On entry, UPLO specifies whether the matrix is an upper or
  2380.        lower triangular matrix as follows:
  2381.  
  2382.        UPLO = 'U' or 'u'   A is an upper triangular matrix.
  2383.  
  2384.        UPLO = 'L' or 'l'   A is a lower triangular matrix.
  2385.  
  2386.        Unchanged on exit.
  2387.  
  2388. TRANS  CHARACTER*1.
  2389.        On entry, TRANS specifies the equations to be solved as
  2390.        follows:
  2391.  
  2392.        TRANS = 'N' or 'n'   A*x = b.
  2393.  
  2394.        TRANS = 'T' or 't'   A'*x = b.
  2395.  
  2396.        TRANS = 'C' or 'c'   A'*x = b.
  2397.  
  2398.        Unchanged on exit.
  2399.  
  2400. DIAG   CHARACTER*1.
  2401.        On entry, DIAG specifies whether or not A is unit
  2402.        triangular as follows:
  2403.  
  2404.        DIAG = 'U' or 'u'   A is assumed to be unit triangular.
  2405.  
  2406.        DIAG = 'N' or 'n'   A is not assumed to be unit triangular.
  2407.  
  2408.        Unchanged on exit.
  2409.  
  2410. N      INTEGER.
  2411.        On entry, N specifies the order of the matrix A.
  2412.        N must be at least zero.
  2413.        Unchanged on exit.
  2414.  
  2415. A      REAL             array of DIMENSION ( LDA, n ).
  2416.        Before entry with  UPLO = 'U' or 'u', the leading n by n
  2417.        upper triangular part of the array A must contain the upper
  2418.        triangular matrix and the strictly lower triangular part of
  2419.        A is not referenced.
  2420.        Before entry with UPLO = 'L' or 'l', the leading n by n
  2421.        lower triangular part of the array A must contain the lower
  2422.        triangular matrix and the strictly upper triangular part of
  2423.        A is not referenced.
  2424.        Note that when  DIAG = 'U' or 'u', the diagonal elements of
  2425.        A are not referenced either, but are assumed to be unity.
  2426.        Unchanged on exit.
  2427.  
  2428. LDA    INTEGER.
  2429.        On entry, LDA specifies the first dimension of A as declared
  2430.        in the calling (sub) program. LDA must be at least
  2431.        max( 1, n ).
  2432.        Unchanged on exit.
  2433.  
  2434. X      REAL             array of dimension at least
  2435.        ( 1 + ( n - 1 )*abs( INCX ) ).
  2436.        Before entry, the incremented array X must contain the n
  2437.        element right-hand side vector b. On exit, X is overwritten
  2438.        with the solution vector x.
  2439.  
  2440. INCX   INTEGER.
  2441.        On entry, INCX specifies the increment for the elements of
  2442.        X. INCX must not be zero.
  2443.        Unchanged on exit.
  2444.  
  2445.  
  2446. SUBROUTINE XERBLA(SRNAME,INFO)
  2447.  
  2448.  
  2449. XERBLA  is an error handler for the Level 2 BLAS routines.
  2450.  
  2451. It is called by the Level 2 BLAS routines if an input parameter is
  2452. invalid.
  2453.  
  2454. SRNAME - CHARACTER*6.
  2455.          On entry, SRNAME specifies the name of the routine which
  2456.          called XERBLA.
  2457.  
  2458. INFO   - INTEGER.
  2459.          On entry, INFO specifies the position of the invalid
  2460.          parameter in the parameter-list of the calling routine.
  2461.  
  2462.  
  2463. LOGICAL FUNCTION LSAME ( CA, CB )
  2464.  
  2465. LSAME  tests if CA is the same letter as CB regardless of case.
  2466. CB is assumed to be an upper case letter. LSAME returns .TRUE. if
  2467. CA is either the same as CB or the equivalent lower case letter.
  2468.  
  2469. N.B. This version of the routine is only correct for ASCII code.
  2470.      Installers must modify the routine for other character-codes.
  2471.  
  2472.      For EBCDIC systems the constant IOFF must be changed to -64.
  2473.      For CDC systems using 6-12 bit representations, the system-
  2474.      specific code in comments must be activated.
  2475.  
  2476. CA     - CHARACTER*1
  2477.  
  2478. CB     - CHARACTER*1
  2479.          On entry, CA and CB specify characters to be compared.
  2480.          Unchanged on exit.
  2481.  
  2482.  
  2483. SUBROUTINE CGBMV(TRANS,M,N,KL,KU,ALPHA,A,LDA,X,INCX,BETA,Y,INCY)
  2484.  
  2485. CGBMV  performs one of the matrix-vector operations
  2486.  
  2487.    y := alpha*A*x + beta*y,   or   y := alpha*A'*x + beta*y,   or
  2488.  
  2489.    y := alpha*conjg( A' )*x + beta*y,
  2490.  
  2491. where alpha and beta are scalars, x and y are vectors and A is an
  2492. m by n band matrix, with kl sub-diagonals and ku super-diagonals.
  2493.  
  2494. TRANS  - CHARACTER*1.
  2495.          On entry, TRANS specifies the operation to be performed as
  2496.          follows:
  2497.  
  2498.             TRANS = 'N' or 'n'   y := alpha*A*x + beta*y.
  2499.  
  2500.             TRANS = 'T' or 't'   y := alpha*A'*x + beta*y.
  2501.  
  2502.             TRANS = 'C' or 'c'   y := alpha*conjg( A' )*x + beta*y.
  2503.  
  2504.          Unchanged on exit.
  2505.  
  2506. M      - INTEGER.
  2507.          On entry, M specifies the number of rows of the matrix A.
  2508.          M must be at least zero.
  2509.          Unchanged on exit.
  2510.  
  2511. N      - INTEGER.
  2512.          On entry, N specifies the number of columns of the matrix A.
  2513.          N must be at least zero.
  2514.          Unchanged on exit.
  2515.  
  2516. KL     - INTEGER.
  2517.          On entry, KL specifies the number of sub-diagonals of the
  2518.          matrix A. KL must satisfy  0 .le. KL.
  2519.          Unchanged on exit.
  2520.  
  2521. KU     - INTEGER.
  2522.          On entry, KU specifies the number of super-diagonals of the
  2523.          matrix A. KU must satisfy  0 .le. KU.
  2524.          Unchanged on exit.
  2525.  
  2526. ALPHA  - COMPLEX         .
  2527.          On entry, ALPHA specifies the scalar alpha.
  2528.          Unchanged on exit.
  2529.  
  2530. A      - COMPLEX          array of DIMENSION ( LDA, n ).
  2531.          Before entry, the leading ( kl + ku + 1 ) by n part of the
  2532.          array A must contain the matrix of coefficients, supplied
  2533.          column by column, with the leading diagonal of the matrix in
  2534.          row ( ku + 1 ) of the array, the first super-diagonal
  2535.          starting at position 2 in row ku, the first sub-diagonal
  2536.          starting at position 1 in row ( ku + 2 ), and so on.
  2537.          Elements in the array A that do not correspond to elements
  2538.          in the band matrix (such as the top left ku by ku triangle)
  2539.          are not referenced.
  2540.          The following program segment will transfer a band matrix
  2541.          from conventional full matrix storage to band storage:
  2542.  
  2543.                DO 20, J = 1, N
  2544.                   K = KU + 1 - J
  2545.                   DO 10, I = MAX( 1, J - KU ), MIN( M, J + KL )
  2546.                      A( K + I, J ) = matrix( I, J )
  2547.             10    CONTINUE
  2548.             20 CONTINUE
  2549.  
  2550.          Unchanged on exit.
  2551.  
  2552. LDA    - INTEGER.
  2553.          On entry, LDA specifies the first dimension of A as declared
  2554.          in the calling (sub) program. LDA must be at least
  2555.          ( kl + ku + 1 ).
  2556.          Unchanged on exit.
  2557.  
  2558. X      - COMPLEX          array of DIMENSION at least
  2559.          ( 1 + ( n - 1 )*abs( INCX ) ) when TRANS = 'N' or 'n'
  2560.          and at least
  2561.          ( 1 + ( m - 1 )*abs( INCX ) ) otherwise.
  2562.          Before entry, the incremented array X must contain the
  2563.          vector x.
  2564.          Unchanged on exit.
  2565.  
  2566. INCX   - INTEGER.
  2567.          On entry, INCX specifies the increment for the elements of
  2568.          X. INCX must not be zero.
  2569.          Unchanged on exit.
  2570.  
  2571. BETA   - COMPLEX         .
  2572.          On entry, BETA specifies the scalar beta. When BETA is
  2573.          supplied as zero then Y need not be set on input.
  2574.          Unchanged on exit.
  2575.  
  2576. Y      - COMPLEX          array of DIMENSION at least
  2577.          ( 1 + ( m - 1 )*abs( INCY ) ) when TRANS = 'N' or 'n'
  2578.          and at least
  2579.          ( 1 + ( n - 1 )*abs( INCY ) ) otherwise.
  2580.          Before entry, the incremented array Y must contain the
  2581.          vector y. On exit, Y is overwritten by the updated vector y.
  2582.  
  2583.  
  2584. INCY   - INTEGER.
  2585.          On entry, INCY specifies the increment for the elements of
  2586.          Y. INCY must not be zero.
  2587.          Unchanged on exit.
  2588.  
  2589.  
  2590.  
  2591. SUBROUTINE CGEMV(TRANS,M,N,ALPHA,A,LDA,X,INCX,BETA,Y,INCY)
  2592.  
  2593. CGEMV  performs one of the matrix-vector operations
  2594.  
  2595.    y := alpha*A*x + beta*y,   or   y := alpha*A'*x + beta*y,   or
  2596.  
  2597.    y := alpha*conjg( A' )*x + beta*y,
  2598.  
  2599. where alpha and beta are scalars, x and y are vectors and A is an
  2600. m by n matrix.
  2601.  
  2602. TRANS  - CHARACTER*1.
  2603.          On entry, TRANS specifies the operation to be performed as
  2604.          follows:
  2605.  
  2606.             TRANS = 'N' or 'n'   y := alpha*A*x + beta*y.
  2607.  
  2608.             TRANS = 'T' or 't'   y := alpha*A'*x + beta*y.
  2609.  
  2610.             TRANS = 'C' or 'c'   y := alpha*conjg( A' )*x + beta*y.
  2611.  
  2612.          Unchanged on exit.
  2613.  
  2614. M      - INTEGER.
  2615.          On entry, M specifies the number of rows of the matrix A.
  2616.          M must be at least zero.
  2617.          Unchanged on exit.
  2618.  
  2619. N      - INTEGER.
  2620.          On entry, N specifies the number of columns of the matrix A.
  2621.          N must be at least zero.
  2622.          Unchanged on exit.
  2623.  
  2624. ALPHA  - COMPLEX         .
  2625.          On entry, ALPHA specifies the scalar alpha.
  2626.          Unchanged on exit.
  2627.  
  2628. A      - COMPLEX          array of DIMENSION ( LDA, n ).
  2629.          Before entry, the leading m by n part of the array A must
  2630.          contain the matrix of coefficients.
  2631.          Unchanged on exit.
  2632.  
  2633. LDA    - INTEGER.
  2634.          On entry, LDA specifies the first dimension of A as declared
  2635.          in the calling (sub) program. LDA must be at least
  2636.          max( 1, m ).
  2637.          Unchanged on exit.
  2638.  
  2639. X      - COMPLEX          array of DIMENSION at least
  2640.          ( 1 + ( n - 1 )*abs( INCX ) ) when TRANS = 'N' or 'n'
  2641.          and at least
  2642.          ( 1 + ( m - 1 )*abs( INCX ) ) otherwise.
  2643.          Before entry, the incremented array X must contain the
  2644.          vector x.
  2645.          Unchanged on exit.
  2646.  
  2647. INCX   - INTEGER.
  2648.          On entry, INCX specifies the increment for the elements of
  2649.          X. INCX must not be zero.
  2650.          Unchanged on exit.
  2651.  
  2652. BETA   - COMPLEX         .
  2653.          On entry, BETA specifies the scalar beta. When BETA is
  2654.          supplied as zero then Y need not be set on input.
  2655.          Unchanged on exit.
  2656.  
  2657. Y      - COMPLEX          array of DIMENSION at least
  2658.          ( 1 + ( m - 1 )*abs( INCY ) ) when TRANS = 'N' or 'n'
  2659.          and at least
  2660.          ( 1 + ( n - 1 )*abs( INCY ) ) otherwise.
  2661.          Before entry with BETA non-zero, the incremented array Y
  2662.          must contain the vector y. On exit, Y is overwritten by the
  2663.          updated vector y.
  2664.  
  2665. INCY   - INTEGER.
  2666.          On entry, INCY specifies the increment for the elements of
  2667.          Y. INCY must not be zero.
  2668.          Unchanged on exit.
  2669.  
  2670.  
  2671. SUBROUTINE CGERC(M,N,ALPHA,X,INCX,Y,INCY,A,LDA)
  2672.  
  2673. CGERC  performs the rank 1 operation
  2674.  
  2675.    A := alpha*x*conjg( y' ) + A,
  2676.  
  2677. where alpha is a scalar, x is an m element vector, y is an n element
  2678. vector and A is an m by n matrix.
  2679.  
  2680. M      - INTEGER.
  2681.          On entry, M specifies the number of rows of the matrix A.
  2682.          M must be at least zero.
  2683.          Unchanged on exit.
  2684.  
  2685. N      - INTEGER.
  2686.          On entry, N specifies the number of columns of the matrix A.
  2687.          N must be at least zero.
  2688.          Unchanged on exit.
  2689.  
  2690. ALPHA  - COMPLEX         .
  2691.          On entry, ALPHA specifies the scalar alpha.
  2692.          Unchanged on exit.
  2693.  
  2694. X      - COMPLEX          array of dimension at least
  2695.          ( 1 + ( m - 1 )*abs( INCX ) ).
  2696.          Before entry, the incremented array X must contain the m
  2697.          element vector x.
  2698.          Unchanged on exit.
  2699.  
  2700. INCX   - INTEGER.
  2701.          On entry, INCX specifies the increment for the elements of
  2702.          X. INCX must not be zero.
  2703.          Unchanged on exit.
  2704.  
  2705. Y      - COMPLEX          array of dimension at least
  2706.          ( 1 + ( n - 1 )*abs( INCY ) ).
  2707.          Before entry, the incremented array Y must contain the n
  2708.          element vector y.
  2709.          Unchanged on exit.
  2710.  
  2711. INCY   - INTEGER.
  2712.          On entry, INCY specifies the increment for the elements of
  2713.          Y. INCY must not be zero.
  2714.          Unchanged on exit.
  2715.  
  2716. A      - COMPLEX          array of DIMENSION ( LDA, n ).
  2717.          Before entry, the leading m by n part of the array A must
  2718.          contain the matrix of coefficients. On exit, A is
  2719.          overwritten by the updated matrix.
  2720.  
  2721. LDA    - INTEGER.
  2722.          On entry, LDA specifies the first dimension of A as declared
  2723.          in the calling (sub) program. LDA must be at least
  2724.          max( 1, m ).
  2725.          Unchanged on exit.
  2726.  
  2727.  
  2728. SUBROUTINE CGERU(M,N,ALPHA,X,INCX,Y,INCY,A,LDA)
  2729.  
  2730. CGERU  performs the rank 1 operation
  2731.  
  2732.    A := alpha*x*y' + A,
  2733.  
  2734. where alpha is a scalar, x is an m element vector, y is an n element
  2735. vector and A is an m by n matrix.
  2736.  
  2737. M      - INTEGER.
  2738.          On entry, M specifies the number of rows of the matrix A.
  2739.          M must be at least zero.
  2740.          Unchanged on exit.
  2741.  
  2742. N      - INTEGER.
  2743.          On entry, N specifies the number of columns of the matrix A.
  2744.          N must be at least zero.
  2745.          Unchanged on exit.
  2746.  
  2747. ALPHA  - COMPLEX         .
  2748.          On entry, ALPHA specifies the scalar alpha.
  2749.          Unchanged on exit.
  2750.  
  2751. X      - COMPLEX          array of dimension at least
  2752.          ( 1 + ( m - 1 )*abs( INCX ) ).
  2753.          Before entry, the incremented array X must contain the m
  2754.          element vector x.
  2755.          Unchanged on exit.
  2756.  
  2757. INCX   - INTEGER.
  2758.          On entry, INCX specifies the increment for the elements of
  2759.          X. INCX must not be zero.
  2760.          Unchanged on exit.
  2761.  
  2762. Y      - COMPLEX          array of dimension at least
  2763.          ( 1 + ( n - 1 )*abs( INCY ) ).
  2764.          Before entry, the incremented array Y must contain the n
  2765.          element vector y.
  2766.          Unchanged on exit.
  2767.  
  2768. INCY   - INTEGER.
  2769.          On entry, INCY specifies the increment for the elements of
  2770.          Y. INCY must not be zero.
  2771.          Unchanged on exit.
  2772.  
  2773. A      - COMPLEX          array of DIMENSION ( LDA, n ).
  2774.          Before entry, the leading m by n part of the array A must
  2775.          contain the matrix of coefficients. On exit, A is
  2776.          overwritten by the updated matrix.
  2777.  
  2778. LDA    - INTEGER.
  2779.          On entry, LDA specifies the first dimension of A as declared
  2780.          in the calling (sub) program. LDA must be at least
  2781.          max( 1, m ).
  2782.          Unchanged on exit.
  2783.  
  2784.  
  2785. SUBROUTINE CHBMV(UPLO,N,K,ALPHA,A,LDA,X,INCX,BETA,Y,INCY)
  2786.  
  2787. CHBMV  performs the matrix-vector  operation
  2788.  
  2789.    y := alpha*A*x + beta*y,
  2790.  
  2791. where alpha and beta are scalars, x and y are n element vectors and
  2792. A is an n by n hermitian band matrix, with k super-diagonals.
  2793.  
  2794. UPLO   - CHARACTER*1.
  2795.          On entry, UPLO specifies whether the upper or lower
  2796.          triangular part of the band matrix A is being supplied as
  2797.          follows:
  2798.  
  2799.             UPLO = 'U' or 'u'   The upper triangular part of A is
  2800.                                 being supplied.
  2801.  
  2802.             UPLO = 'L' or 'l'   The lower triangular part of A is
  2803.                                 being supplied.
  2804.  
  2805.          Unchanged on exit.
  2806.  
  2807. N      - INTEGER.
  2808.          On entry, N specifies the order of the matrix A.
  2809.          N must be at least zero.
  2810.          Unchanged on exit.
  2811.  
  2812. K      - INTEGER.
  2813.          On entry, K specifies the number of super-diagonals of the
  2814.          matrix A. K must satisfy  0 .le. K.
  2815.          Unchanged on exit.
  2816.  
  2817. ALPHA  - COMPLEX         .
  2818.          On entry, ALPHA specifies the scalar alpha.
  2819.          Unchanged on exit.
  2820.  
  2821. A      - COMPLEX          array of DIMENSION ( LDA, n ).
  2822.          Before entry with UPLO = 'U' or 'u', the leading ( k + 1 )
  2823.          by n part of the array A must contain the upper triangular
  2824.          band part of the hermitian matrix, supplied column by
  2825.          column, with the leading diagonal of the matrix in row
  2826.          ( k + 1 ) of the array, the first super-diagonal starting at
  2827.          position 2 in row k, and so on. The top left k by k triangle
  2828.          of the array A is not referenced.
  2829.          The following program segment will transfer the upper
  2830.          triangular part of a hermitian band matrix from conventional
  2831.          full matrix storage to band storage:
  2832.  
  2833.                DO 20, J = 1, N
  2834.                   M = K + 1 - J
  2835.                   DO 10, I = MAX( 1, J - K ), J
  2836.                      A( M + I, J ) = matrix( I, J )
  2837.             10    CONTINUE
  2838.             20 CONTINUE
  2839.  
  2840.          Before entry with UPLO = 'L' or 'l', the leading ( k + 1 )
  2841.          by n part of the array A must contain the lower triangular
  2842.          band part of the hermitian matrix, supplied column by
  2843.          column, with the leading diagonal of the matrix in row 1 of
  2844.          the array, the first sub-diagonal starting at position 1 in
  2845.          row 2, and so on. The bottom right k by k triangle of the
  2846.          array A is not referenced.
  2847.          The following program segment will transfer the lower
  2848.          triangular part of a hermitian band matrix from conventional
  2849.          full matrix storage to band storage:
  2850.  
  2851.                DO 20, J = 1, N
  2852.                   M = 1 - J
  2853.                   DO 10, I = J, MIN( N, J + K )
  2854.                      A( M + I, J ) = matrix( I, J )
  2855.             10    CONTINUE
  2856.             20 CONTINUE
  2857.  
  2858.          Note that the imaginary parts of the diagonal elements need
  2859.          not be set and are assumed to be zero.
  2860.          Unchanged on exit.
  2861.  
  2862. LDA    - INTEGER.
  2863.          On entry, LDA specifies the first dimension of A as declared
  2864.          in the calling (sub) program. LDA must be at least
  2865.          ( k + 1 ).
  2866.          Unchanged on exit.
  2867.  
  2868. X      - COMPLEX          array of DIMENSION at least
  2869.          ( 1 + ( n - 1 )*abs( INCX ) ).
  2870.          Before entry, the incremented array X must contain the
  2871.          vector x.
  2872.          Unchanged on exit.
  2873.  
  2874. INCX   - INTEGER.
  2875.          On entry, INCX specifies the increment for the elements of
  2876.          X. INCX must not be zero.
  2877.          Unchanged on exit.
  2878.  
  2879. BETA   - COMPLEX         .
  2880.          On entry, BETA specifies the scalar beta.
  2881.          Unchanged on exit.
  2882.  
  2883. Y      - COMPLEX          array of DIMENSION at least
  2884.          ( 1 + ( n - 1 )*abs( INCY ) ).
  2885.          Before entry, the incremented array Y must contain the
  2886.          vector y. On exit, Y is overwritten by the updated vector y.
  2887.  
  2888. INCY   - INTEGER.
  2889.          On entry, INCY specifies the increment for the elements of
  2890.          Y. INCY must not be zero.
  2891.          Unchanged on exit.
  2892.  
  2893.  
  2894. SUBROUTINE CHEMV(UPLO,N,ALPHA,A,LDA,X,INCX,BETA,Y,INCY)
  2895.  
  2896. CHEMV  performs the matrix-vector  operation
  2897.  
  2898.    y := alpha*A*x + beta*y,
  2899.  
  2900. where alpha and beta are scalars, x and y are n element vectors and
  2901. A is an n by n hermitian matrix.
  2902.  
  2903. UPLO   - CHARACTER*1.
  2904.          On entry, UPLO specifies whether the upper or lower
  2905.          triangular part of the array A is to be referenced as
  2906.          follows:
  2907.  
  2908.             UPLO = 'U' or 'u'   Only the upper triangular part of A
  2909.                                 is to be referenced.
  2910.  
  2911.             UPLO = 'L' or 'l'   Only the lower triangular part of A
  2912.                                 is to be referenced.
  2913.  
  2914.          Unchanged on exit.
  2915.  
  2916. N      - INTEGER.
  2917.          On entry, N specifies the order of the matrix A.
  2918.          N must be at least zero.
  2919.          Unchanged on exit.
  2920.  
  2921. ALPHA  - COMPLEX         .
  2922.          On entry, ALPHA specifies the scalar alpha.
  2923.          Unchanged on exit.
  2924.  
  2925. A      - COMPLEX          array of DIMENSION ( LDA, n ).
  2926.          Before entry with  UPLO = 'U' or 'u', the leading n by n
  2927.          upper triangular part of the array A must contain the upper
  2928.          triangular part of the hermitian matrix and the strictly
  2929.          lower triangular part of A is not referenced.
  2930.          Before entry with UPLO = 'L' or 'l', the leading n by n
  2931.          lower triangular part of the array A must contain the lower
  2932.          triangular part of the hermitian matrix and the strictly
  2933.          upper triangular part of A is not referenced.
  2934.          Note that the imaginary parts of the diagonal elements need
  2935.          not be set and are assumed to be zero.
  2936.          Unchanged on exit.
  2937.  
  2938. LDA    - INTEGER.
  2939.          On entry, LDA specifies the first dimension of A as declared
  2940.          in the calling (sub) program. LDA must be at least
  2941.          max( 1, n ).
  2942.          Unchanged on exit.
  2943.  
  2944. X      - COMPLEX          array of dimension at least
  2945.          ( 1 + ( n - 1 )*abs( INCX ) ).
  2946.          Before entry, the incremented array X must contain the n
  2947.          element vector x.
  2948.          Unchanged on exit.
  2949.  
  2950. INCX   - INTEGER.
  2951.          On entry, INCX specifies the increment for the elements of
  2952.          X. INCX must not be zero.
  2953.          Unchanged on exit.
  2954.  
  2955. BETA   - COMPLEX         .
  2956.          On entry, BETA specifies the scalar beta. When BETA is
  2957.          supplied as zero then Y need not be set on input.
  2958.          Unchanged on exit.
  2959.  
  2960. Y      - COMPLEX          array of dimension at least
  2961.          ( 1 + ( n - 1 )*abs( INCY ) ).
  2962.          Before entry, the incremented array Y must contain the n
  2963.          element vector y. On exit, Y is overwritten by the updated
  2964.          vector y.
  2965.  
  2966. INCY   - INTEGER.
  2967.          On entry, INCY specifies the increment for the elements of
  2968.          Y. INCY must not be zero.
  2969.          Unchanged on exit.
  2970.  
  2971.  
  2972. SUBROUTINE CHER(UPLO,N,ALPHA,X,INCX,A,LDA)
  2973.  
  2974. CHER   performs the hermitian rank 1 operation
  2975.  
  2976.    A := alpha*x*conjg( x' ) + A,
  2977.  
  2978. where alpha is a real scalar, x is an n element vector and A is an
  2979. n by n hermitian matrix.
  2980.  
  2981. UPLO   - CHARACTER*1.
  2982.          On entry, UPLO specifies whether the upper or lower
  2983.          triangular part of the array A is to be referenced as
  2984.          follows:
  2985.  
  2986.             UPLO = 'U' or 'u'   Only the upper triangular part of A
  2987.                                 is to be referenced.
  2988.  
  2989.             UPLO = 'L' or 'l'   Only the lower triangular part of A
  2990.                                 is to be referenced.
  2991.  
  2992.          Unchanged on exit.
  2993.  
  2994. N      - INTEGER.
  2995.          On entry, N specifies the order of the matrix A.
  2996.          N must be at least zero.
  2997.          Unchanged on exit.
  2998.  
  2999. ALPHA  - REAL            .
  3000.          On entry, ALPHA specifies the scalar alpha.
  3001.          Unchanged on exit.
  3002.  
  3003. X      - COMPLEX          array of dimension at least
  3004.          ( 1 + ( n - 1 )*abs( INCX ) ).
  3005.          Before entry, the incremented array X must contain the n
  3006.          element vector x.
  3007.          Unchanged on exit.
  3008.  
  3009. INCX   - INTEGER.
  3010.          On entry, INCX specifies the increment for the elements of
  3011.          X. INCX must not be zero.
  3012.          Unchanged on exit.
  3013.  
  3014. A      - COMPLEX          array of DIMENSION ( LDA, n ).
  3015.          Before entry with  UPLO = 'U' or 'u', the leading n by n
  3016.          upper triangular part of the array A must contain the upper
  3017.          triangular part of the hermitian matrix and the strictly
  3018.          lower triangular part of A is not referenced. On exit, the
  3019.          upper triangular part of the array A is overwritten by the
  3020.          upper triangular part of the updated matrix.
  3021.          Before entry with UPLO = 'L' or 'l', the leading n by n
  3022.          lower triangular part of the array A must contain the lower
  3023.          triangular part of the hermitian matrix and the strictly
  3024.          upper triangular part of A is not referenced. On exit, the
  3025.          lower triangular part of the array A is overwritten by the
  3026.          lower triangular part of the updated matrix.
  3027.          Note that the imaginary parts of the diagonal elements need
  3028.          not be set, they are assumed to be zero, and on exit they
  3029.          are set to zero.
  3030.  
  3031. LDA    - INTEGER.
  3032.          On entry, LDA specifies the first dimension of A as declared
  3033.          in the calling (sub) program. LDA must be at least
  3034.          max( 1, n ).
  3035.          Unchanged on exit.
  3036.  
  3037.  
  3038. SUBROUTINE CHER2(UPLO,N,ALPHA,X,INCX,Y,INCY,A,LDA)
  3039.  
  3040. CHER2  performs the hermitian rank 2 operation
  3041.  
  3042.    A := alpha*x*conjg( y' ) + conjg( alpha )*y*conjg( x' ) + A,
  3043.  
  3044. where alpha is a scalar, x and y are n element vectors and A is an n
  3045. by n hermitian matrix.
  3046.  
  3047. UPLO   - CHARACTER*1.
  3048.          On entry, UPLO specifies whether the upper or lower
  3049.          triangular part of the array A is to be referenced as
  3050.          follows:
  3051.  
  3052.             UPLO = 'U' or 'u'   Only the upper triangular part of A
  3053.                                 is to be referenced.
  3054.  
  3055.             UPLO = 'L' or 'l'   Only the lower triangular part of A
  3056.                                 is to be referenced.
  3057.  
  3058.          Unchanged on exit.
  3059.  
  3060. N      - INTEGER.
  3061.          On entry, N specifies the order of the matrix A.
  3062.          N must be at least zero.
  3063.          Unchanged on exit.
  3064.  
  3065. ALPHA  - COMPLEX         .
  3066.          On entry, ALPHA specifies the scalar alpha.
  3067.          Unchanged on exit.
  3068.  
  3069. X      - COMPLEX          array of dimension at least
  3070.          ( 1 + ( n - 1 )*abs( INCX ) ).
  3071.          Before entry, the incremented array X must contain the n
  3072.          element vector x.
  3073.          Unchanged on exit.
  3074.  
  3075. INCX   - INTEGER.
  3076.          On entry, INCX specifies the increment for the elements of
  3077.          X. INCX must not be zero.
  3078.          Unchanged on exit.
  3079.  
  3080. Y      - COMPLEX          array of dimension at least
  3081.          ( 1 + ( n - 1 )*abs( INCY ) ).
  3082.          Before entry, the incremented array Y must contain the n
  3083.          element vector y.
  3084.          Unchanged on exit.
  3085.  
  3086. INCY   - INTEGER.
  3087.          On entry, INCY specifies the increment for the elements of
  3088.          Y. INCY must not be zero.
  3089.          Unchanged on exit.
  3090.  
  3091. A      - COMPLEX          array of DIMENSION ( LDA, n ).
  3092.          Before entry with  UPLO = 'U' or 'u', the leading n by n
  3093.          upper triangular part of the array A must contain the upper
  3094.          triangular part of the hermitian matrix and the strictly
  3095.          lower triangular part of A is not referenced. On exit, the
  3096.          upper triangular part of the array A is overwritten by the
  3097.          upper triangular part of the updated matrix.
  3098.          Before entry with UPLO = 'L' or 'l', the leading n by n
  3099.          lower triangular part of the array A must contain the lower
  3100.          triangular part of the hermitian matrix and the strictly
  3101.          upper triangular part of A is not referenced. On exit, the
  3102.          lower triangular part of the array A is overwritten by the
  3103.          lower triangular part of the updated matrix.
  3104.          Note that the imaginary parts of the diagonal elements need
  3105.          not be set, they are assumed to be zero, and on exit they
  3106.          are set to zero.
  3107.  
  3108. LDA    - INTEGER.
  3109.          On entry, LDA specifies the first dimension of A as declared
  3110.          in the calling (sub) program. LDA must be at least
  3111.          max( 1, n ).
  3112.          Unchanged on exit.
  3113.  
  3114.  
  3115. SUBROUTINE CHPMV(UPLO,N,ALPHA,AP,X,INCX,BETA,Y,INCY)
  3116.  
  3117. CHPMV  performs the matrix-vector operation
  3118.  
  3119.    y := alpha*A*x + beta*y,
  3120.  
  3121. where alpha and beta are scalars, x and y are n element vectors and
  3122. A is an n by n hermitian matrix, supplied in packed form.
  3123.  
  3124. UPLO   - CHARACTER*1.
  3125.          On entry, UPLO specifies whether the upper or lower
  3126.          triangular part of the matrix A is supplied in the packed
  3127.          array AP as follows:
  3128.  
  3129.             UPLO = 'U' or 'u'   The upper triangular part of A is
  3130.                                 supplied in AP.
  3131.  
  3132.             UPLO = 'L' or 'l'   The lower triangular part of A is
  3133.                                 supplied in AP.
  3134.  
  3135.          Unchanged on exit.
  3136.  
  3137. N      - INTEGER.
  3138.          On entry, N specifies the order of the matrix A.
  3139.          N must be at least zero.
  3140.          Unchanged on exit.
  3141.  
  3142. ALPHA  - COMPLEX         .
  3143.          On entry, ALPHA specifies the scalar alpha.
  3144.          Unchanged on exit.
  3145.  
  3146. AP     - COMPLEX          array of DIMENSION at least
  3147.          ( ( n*( n + 1 ) )/2 ).
  3148.          Before entry with UPLO = 'U' or 'u', the array AP must
  3149.          contain the upper triangular part of the hermitian matrix
  3150.          packed sequentially, column by column, so that AP( 1 )
  3151.          contains a( 1, 1 ), AP( 2 ) and AP( 3 ) contain a( 1, 2 )
  3152.          and a( 2, 2 ) respectively, and so on.
  3153.          Before entry with UPLO = 'L' or 'l', the array AP must
  3154.          contain the lower triangular part of the hermitian matrix
  3155.          packed sequentially, column by column, so that AP( 1 )
  3156.          contains a( 1, 1 ), AP( 2 ) and AP( 3 ) contain a( 2, 1 )
  3157.          and a( 3, 1 ) respectively, and so on.
  3158.          Note that the imaginary parts of the diagonal elements need
  3159.          not be set and are assumed to be zero.
  3160.          Unchanged on exit.
  3161.  
  3162. X      - COMPLEX          array of dimension at least
  3163.          ( 1 + ( n - 1 )*abs( INCX ) ).
  3164.          Before entry, the incremented array X must contain the n
  3165.          element vector x.
  3166.          Unchanged on exit.
  3167.  
  3168. INCX   - INTEGER.
  3169.          On entry, INCX specifies the increment for the elements of
  3170.          X. INCX must not be zero.
  3171.          Unchanged on exit.
  3172.  
  3173. BETA   - COMPLEX         .
  3174.          On entry, BETA specifies the scalar beta. When BETA is
  3175.          supplied as zero then Y need not be set on input.
  3176.          Unchanged on exit.
  3177.  
  3178. Y      - COMPLEX          array of dimension at least
  3179.          ( 1 + ( n - 1 )*abs( INCY ) ).
  3180.          Before entry, the incremented array Y must contain the n
  3181.          element vector y. On exit, Y is overwritten by the updated
  3182.          vector y.
  3183.  
  3184. INCY   - INTEGER.
  3185.          On entry, INCY specifies the increment for the elements of
  3186.          Y. INCY must not be zero.
  3187.          Unchanged on exit.
  3188.  
  3189.  
  3190. SUBROUTINE CHPR(UPLO,N,ALPHA,X,INCX,AP)
  3191.  
  3192. CHPR    performs the hermitian rank 1 operation
  3193.  
  3194.    A := alpha*x*conjg( x' ) + A,
  3195.  
  3196. where alpha is a real scalar, x is an n element vector and A is an
  3197. n by n hermitian matrix, supplied in packed form.
  3198.  
  3199. UPLO   - CHARACTER*1.
  3200.          On entry, UPLO specifies whether the upper or lower
  3201.          triangular part of the matrix A is supplied in the packed
  3202.          array AP as follows:
  3203.  
  3204.             UPLO = 'U' or 'u'   The upper triangular part of A is
  3205.                                 supplied in AP.
  3206.  
  3207.             UPLO = 'L' or 'l'   The lower triangular part of A is
  3208.                                 supplied in AP.
  3209.  
  3210.          Unchanged on exit.
  3211.  
  3212. N      - INTEGER.
  3213.          On entry, N specifies the order of the matrix A.
  3214.          N must be at least zero.
  3215.          Unchanged on exit.
  3216.  
  3217. ALPHA  - REAL            .
  3218.          On entry, ALPHA specifies the scalar alpha.
  3219.          Unchanged on exit.
  3220.  
  3221. X      - COMPLEX          array of dimension at least
  3222.          ( 1 + ( n - 1 )*abs( INCX ) ).
  3223.          Before entry, the incremented array X must contain the n
  3224.          element vector x.
  3225.          Unchanged on exit.
  3226.  
  3227. INCX   - INTEGER.
  3228.          On entry, INCX specifies the increment for the elements of
  3229.          X. INCX must not be zero.
  3230.          Unchanged on exit.
  3231.  
  3232. AP     - COMPLEX          array of DIMENSION at least
  3233.          ( ( n*( n + 1 ) )/2 ).
  3234.          Before entry with  UPLO = 'U' or 'u', the array AP must
  3235.          contain the upper triangular part of the hermitian matrix
  3236.          packed sequentially, column by column, so that AP( 1 )
  3237.          contains a( 1, 1 ), AP( 2 ) and AP( 3 ) contain a( 1, 2 )
  3238.          and a( 2, 2 ) respectively, and so on. On exit, the array
  3239.          AP is overwritten by the upper triangular part of the
  3240.          updated matrix.
  3241.          Before entry with UPLO = 'L' or 'l', the array AP must
  3242.          contain the lower triangular part of the hermitian matrix
  3243.          packed sequentially, column by column, so that AP( 1 )
  3244.          contains a( 1, 1 ), AP( 2 ) and AP( 3 ) contain a( 2, 1 )
  3245.          and a( 3, 1 ) respectively, and so on. On exit, the array
  3246.          AP is overwritten by the lower triangular part of the
  3247.          updated matrix.
  3248.          Note that the imaginary parts of the diagonal elements need
  3249.          not be set, they are assumed to be zero, and on exit they
  3250.          are set to zero.
  3251.  
  3252.  
  3253. SUBROUTINE CHPR2(UPLO,N,ALPHA,X,INCX,Y,INCY,AP)
  3254.  
  3255. CHPR2  performs the hermitian rank 2 operation
  3256.  
  3257.    A := alpha*x*conjg( y' ) + conjg( alpha )*y*conjg( x' ) + A,
  3258.  
  3259. where alpha is a scalar, x and y are n element vectors and A is an
  3260. n by n hermitian matrix, supplied in packed form.
  3261.  
  3262. UPLO   - CHARACTER*1.
  3263.          On entry, UPLO specifies whether the upper or lower
  3264.          triangular part of the matrix A is supplied in the packed
  3265.          array AP as follows:
  3266.  
  3267.             UPLO = 'U' or 'u'   The upper triangular part of A is
  3268.                                 supplied in AP.
  3269.  
  3270.             UPLO = 'L' or 'l'   The lower triangular part of A is
  3271.                                 supplied in AP.
  3272.  
  3273.          Unchanged on exit.
  3274.  
  3275. N      - INTEGER.
  3276.          On entry, N specifies the order of the matrix A.
  3277.          N must be at least zero.
  3278.          Unchanged on exit.
  3279.  
  3280. ALPHA  - COMPLEX         .
  3281.          On entry, ALPHA specifies the scalar alpha.
  3282.          Unchanged on exit.
  3283.  
  3284. X      - COMPLEX          array of dimension at least
  3285.          ( 1 + ( n - 1 )*abs( INCX ) ).
  3286.          Before entry, the incremented array X must contain the n
  3287.          element vector x.
  3288.          Unchanged on exit.
  3289.  
  3290. INCX   - INTEGER.
  3291.          On entry, INCX specifies the increment for the elements of
  3292.          X. INCX must not be zero.
  3293.          Unchanged on exit.
  3294.  
  3295. Y      - COMPLEX          array of dimension at least
  3296.          ( 1 + ( n - 1 )*abs( INCY ) ).
  3297.          Before entry, the incremented array Y must contain the n
  3298.          element vector y.
  3299.          Unchanged on exit.
  3300.  
  3301. INCY   - INTEGER.
  3302.          On entry, INCY specifies the increment for the elements of
  3303.          Y. INCY must not be zero.
  3304.          Unchanged on exit.
  3305.  
  3306. AP     - COMPLEX          array of DIMENSION at least
  3307.          ( ( n*( n + 1 ) )/2 ).
  3308.          Before entry with  UPLO = 'U' or 'u', the array AP must
  3309.          contain the upper triangular part of the hermitian matrix
  3310.          packed sequentially, column by column, so that AP( 1 )
  3311.          contains a( 1, 1 ), AP( 2 ) and AP( 3 ) contain a( 1, 2 )
  3312.          and a( 2, 2 ) respectively, and so on. On exit, the array
  3313.          AP is overwritten by the upper triangular part of the
  3314.          updated matrix.
  3315.          Before entry with UPLO = 'L' or 'l', the array AP must
  3316.          contain the lower triangular part of the hermitian matrix
  3317.          packed sequentially, column by column, so that AP( 1 )
  3318.          contains a( 1, 1 ), AP( 2 ) and AP( 3 ) contain a( 2, 1 )
  3319.          and a( 3, 1 ) respectively, and so on. On exit, the array
  3320.          AP is overwritten by the lower triangular part of the
  3321.          updated matrix.
  3322.          Note that the imaginary parts of the diagonal elements need
  3323.          not be set, they are assumed to be zero, and on exit they
  3324.          are set to zero.
  3325.  
  3326.  
  3327. SUBROUTINE CTBMV(UPLO,TRANS,DIAG,N,K,A,LDA,X,INCX)
  3328.  
  3329. CTBMV  performs one of the matrix-vector operations
  3330.  
  3331.    x := A*x,   or   x := A'*x,   or   x := conjg( A' )*x,
  3332.  
  3333. where x is an n element vector and  A is an n by n unit, or non-unit,
  3334. upper or lower triangular band matrix, with ( k + 1 ) diagonals.
  3335.  
  3336. UPLO   - CHARACTER*1.
  3337.          On entry, UPLO specifies whether the matrix is an upper or
  3338.          lower triangular matrix as follows:
  3339.  
  3340.             UPLO = 'U' or 'u'   A is an upper triangular matrix.
  3341.  
  3342.             UPLO = 'L' or 'l'   A is a lower triangular matrix.
  3343.  
  3344.          Unchanged on exit.
  3345.  
  3346. TRANS  - CHARACTER*1.
  3347.          On entry, TRANS specifies the operation to be performed as
  3348.          follows:
  3349.  
  3350.             TRANS = 'N' or 'n'   x := A*x.
  3351.  
  3352.             TRANS = 'T' or 't'   x := A'*x.
  3353.  
  3354.             TRANS = 'C' or 'c'   x := conjg( A' )*x.
  3355.  
  3356.          Unchanged on exit.
  3357.  
  3358. DIAG   - CHARACTER*1.
  3359.          On entry, DIAG specifies whether or not A is unit
  3360.          triangular as follows:
  3361.  
  3362.             DIAG = 'U' or 'u'   A is assumed to be unit triangular.
  3363.  
  3364.             DIAG = 'N' or 'n'   A is not assumed to be unit
  3365.                                 triangular.
  3366.  
  3367.          Unchanged on exit.
  3368.  
  3369. N      - INTEGER.
  3370.          On entry, N specifies the order of the matrix A.
  3371.          N must be at least zero.
  3372.          Unchanged on exit.
  3373.  
  3374. K      - INTEGER.
  3375.          On entry with UPLO = 'U' or 'u', K specifies the number of
  3376.          super-diagonals of the matrix A.
  3377.          On entry with UPLO = 'L' or 'l', K specifies the number of
  3378.          sub-diagonals of the matrix A.
  3379.          K must satisfy  0 .le. K.
  3380.          Unchanged on exit.
  3381.  
  3382. A      - COMPLEX          array of DIMENSION ( LDA, n ).
  3383.          Before entry with UPLO = 'U' or 'u', the leading ( k + 1 )
  3384.          by n part of the array A must contain the upper triangular
  3385.          band part of the matrix of coefficients, supplied column by
  3386.          column, with the leading diagonal of the matrix in row
  3387.          ( k + 1 ) of the array, the first super-diagonal starting at
  3388.          position 2 in row k, and so on. The top left k by k triangle
  3389.          of the array A is not referenced.
  3390.          The following program segment will transfer an upper
  3391.          triangular band matrix from conventional full matrix storage
  3392.          to band storage:
  3393.  
  3394.                DO 20, J = 1, N
  3395.                   M = K + 1 - J
  3396.                   DO 10, I = MAX( 1, J - K ), J
  3397.                      A( M + I, J ) = matrix( I, J )
  3398.             10    CONTINUE
  3399.             20 CONTINUE
  3400.  
  3401.          Before entry with UPLO = 'L' or 'l', the leading ( k + 1 )
  3402.          by n part of the array A must contain the lower triangular
  3403.          band part of the matrix of coefficients, supplied column by
  3404.          column, with the leading diagonal of the matrix in row 1 of
  3405.          the array, the first sub-diagonal starting at position 1 in
  3406.          row 2, and so on. The bottom right k by k triangle of the
  3407.          array A is not referenced.
  3408.          The following program segment will transfer a lower
  3409.          triangular band matrix from conventional full matrix storage
  3410.          to band storage:
  3411.  
  3412.                DO 20, J = 1, N
  3413.                   M = 1 - J
  3414.                   DO 10, I = J, MIN( N, J + K )
  3415.                      A( M + I, J ) = matrix( I, J )
  3416.             10    CONTINUE
  3417.             20 CONTINUE
  3418.  
  3419.          Note that when DIAG = 'U' or 'u' the elements of the array A
  3420.          corresponding to the diagonal elements of the matrix are not
  3421.          referenced, but are assumed to be unity.
  3422.          Unchanged on exit.
  3423.  
  3424. LDA    - INTEGER.
  3425.          On entry, LDA specifies the first dimension of A as declared
  3426.          in the calling (sub) program. LDA must be at least
  3427.          ( k + 1 ).
  3428.          Unchanged on exit.
  3429.  
  3430. X      - COMPLEX          array of dimension at least
  3431.          ( 1 + ( n - 1 )*abs( INCX ) ).
  3432.          Before entry, the incremented array X must contain the n
  3433.          element vector x. On exit, X is overwritten with the
  3434.          tranformed vector x.
  3435.  
  3436. INCX   - INTEGER.
  3437.          On entry, INCX specifies the increment for the elements of
  3438.          X. INCX must not be zero.
  3439.          Unchanged on exit.
  3440.  
  3441.  
  3442. SUBROUTINE CTBSV(UPLO,TRANS,DIAG,N,K,A,LDA,X,INCX)
  3443.  
  3444. CTBSV  solves one of the systems of equations
  3445.  
  3446.    A*x = b,   or   A'*x = b,   or   conjg( A' )*x = b,
  3447.  
  3448. where b and x are n element vectors and A is an n by n unit, or
  3449. non-unit, upper or lower triangular band matrix, with ( k + 1 )
  3450. diagonals.
  3451.  
  3452. No test for singularity or near-singularity is included in this
  3453. routine. Such tests must be performed before calling this routine.
  3454.  
  3455. UPLO   - CHARACTER*1.
  3456.          On entry, UPLO specifies whether the matrix is an upper or
  3457.          lower triangular matrix as follows:
  3458.  
  3459.             UPLO = 'U' or 'u'   A is an upper triangular matrix.
  3460.  
  3461.             UPLO = 'L' or 'l'   A is a lower triangular matrix.
  3462.  
  3463.          Unchanged on exit.
  3464.  
  3465. TRANS  - CHARACTER*1.
  3466.          On entry, TRANS specifies the equations to be solved as
  3467.          follows:
  3468.  
  3469.             TRANS = 'N' or 'n'   A*x = b.
  3470.  
  3471.             TRANS = 'T' or 't'   A'*x = b.
  3472.  
  3473.             TRANS = 'C' or 'c'   conjg( A' )*x = b.
  3474.  
  3475.          Unchanged on exit.
  3476.  
  3477. DIAG   - CHARACTER*1.
  3478.          On entry, DIAG specifies whether or not A is unit
  3479.          triangular as follows:
  3480.  
  3481.             DIAG = 'U' or 'u'   A is assumed to be unit triangular.
  3482.  
  3483.             DIAG = 'N' or 'n'   A is not assumed to be unit
  3484.                                 triangular.
  3485.  
  3486.          Unchanged on exit.
  3487.  
  3488. N      - INTEGER.
  3489.          On entry, N specifies the order of the matrix A.
  3490.          N must be at least zero.
  3491.          Unchanged on exit.
  3492.  
  3493. K      - INTEGER.
  3494.          On entry with UPLO = 'U' or 'u', K specifies the number of
  3495.          super-diagonals of the matrix A.
  3496.          On entry with UPLO = 'L' or 'l', K specifies the number of
  3497.          sub-diagonals of the matrix A.
  3498.          K must satisfy  0 .le. K.
  3499.          Unchanged on exit.
  3500.  
  3501. A      - COMPLEX          array of DIMENSION ( LDA, n ).
  3502.          Before entry with UPLO = 'U' or 'u', the leading ( k + 1 )
  3503.          by n part of the array A must contain the upper triangular
  3504.          band part of the matrix of coefficients, supplied column by
  3505.          column, with the leading diagonal of the matrix in row
  3506.          ( k + 1 ) of the array, the first super-diagonal starting at
  3507.          position 2 in row k, and so on. The top left k by k triangle
  3508.          of the array A is not referenced.
  3509.          The following program segment will transfer an upper
  3510.          triangular band matrix from conventional full matrix storage
  3511.          to band storage:
  3512.  
  3513.                DO 20, J = 1, N
  3514.                   M = K + 1 - J
  3515.                   DO 10, I = MAX( 1, J - K ), J
  3516.                      A( M + I, J ) = matrix( I, J )
  3517.             10    CONTINUE
  3518.             20 CONTINUE
  3519.  
  3520.          Before entry with UPLO = 'L' or 'l', the leading ( k + 1 )
  3521.          by n part of the array A must contain the lower triangular
  3522.          band part of the matrix of coefficients, supplied column by
  3523.          column, with the leading diagonal of the matrix in row 1 of
  3524.          the array, the first sub-diagonal starting at position 1 in
  3525.          row 2, and so on. The bottom right k by k triangle of the
  3526.          array A is not referenced.
  3527.          The following program segment will transfer a lower
  3528.          triangular band matrix from conventional full matrix storage
  3529.          to band storage:
  3530.  
  3531.                DO 20, J = 1, N
  3532.                   M = 1 - J
  3533.                   DO 10, I = J, MIN( N, J + K )
  3534.                      A( M + I, J ) = matrix( I, J )
  3535.             10    CONTINUE
  3536.             20 CONTINUE
  3537.  
  3538.          Note that when DIAG = 'U' or 'u' the elements of the array A
  3539.          corresponding to the diagonal elements of the matrix are not
  3540.          referenced, but are assumed to be unity.
  3541.          Unchanged on exit.
  3542.  
  3543. LDA    - INTEGER.
  3544.          On entry, LDA specifies the first dimension of A as declared
  3545.          in the calling (sub) program. LDA must be at least
  3546.          ( k + 1 ).
  3547.          Unchanged on exit.
  3548.  
  3549. X      - COMPLEX          array of dimension at least
  3550.          ( 1 + ( n - 1 )*abs( INCX ) ).
  3551.          Before entry, the incremented array X must contain the n
  3552.          element right-hand side vector b. On exit, X is overwritten
  3553.          with the solution vector x.
  3554.  
  3555. INCX   - INTEGER.
  3556.          On entry, INCX specifies the increment for the elements of
  3557.          X. INCX must not be zero.
  3558.          Unchanged on exit.
  3559.  
  3560.  
  3561. SUBROUTINE CTPMV(UPLO,TRANS,DIAG,N,AP,X,INCX)
  3562.  
  3563. CTPMV  performs one of the matrix-vector operations
  3564.  
  3565.    x := A*x,   or   x := A'*x,   or   x := conjg( A' )*x,
  3566.  
  3567. where x is an n element vector and  A is an n by n unit, or non-unit,
  3568. upper or lower triangular matrix, supplied in packed form.
  3569.  
  3570. UPLO   - CHARACTER*1.
  3571.          On entry, UPLO specifies whether the matrix is an upper or
  3572.          lower triangular matrix as follows:
  3573.  
  3574.             UPLO = 'U' or 'u'   A is an upper triangular matrix.
  3575.  
  3576.             UPLO = 'L' or 'l'   A is a lower triangular matrix.
  3577.  
  3578.          Unchanged on exit.
  3579.  
  3580. TRANS  - CHARACTER*1.
  3581.          On entry, TRANS specifies the operation to be performed as
  3582.          follows:
  3583.  
  3584.             TRANS = 'N' or 'n'   x := A*x.
  3585.  
  3586.             TRANS = 'T' or 't'   x := A'*x.
  3587.  
  3588.             TRANS = 'C' or 'c'   x := conjg( A' )*x.
  3589.  
  3590.          Unchanged on exit.
  3591.  
  3592. DIAG   - CHARACTER*1.
  3593.          On entry, DIAG specifies whether or not A is unit
  3594.          triangular as follows:
  3595.  
  3596.             DIAG = 'U' or 'u'   A is assumed to be unit triangular.
  3597.  
  3598.             DIAG = 'N' or 'n'   A is not assumed to be unit
  3599.                                 triangular.
  3600.  
  3601.          Unchanged on exit.
  3602.  
  3603. N      - INTEGER.
  3604.          On entry, N specifies the order of the matrix A.
  3605.          N must be at least zero.
  3606.          Unchanged on exit.
  3607.  
  3608. AP     - COMPLEX          array of DIMENSION at least
  3609.          ( ( n*( n + 1 ) )/2 ).
  3610.          Before entry with  UPLO = 'U' or 'u', the array AP must
  3611.          contain the upper triangular matrix packed sequentially,
  3612.          column by column, so that AP( 1 ) contains a( 1, 1 ),
  3613.          AP( 2 ) and AP( 3 ) contain a( 1, 2 ) and a( 2, 2 )
  3614.          respectively, and so on.
  3615.          Before entry with UPLO = 'L' or 'l', the array AP must
  3616.          contain the lower triangular matrix packed sequentially,
  3617.          column by column, so that AP( 1 ) contains a( 1, 1 ),
  3618.          AP( 2 ) and AP( 3 ) contain a( 2, 1 ) and a( 3, 1 )
  3619.          respectively, and so on.
  3620.          Note that when  DIAG = 'U' or 'u', the diagonal elements of
  3621.          A are not referenced, but are assumed to be unity.
  3622.          Unchanged on exit.
  3623.  
  3624. X      - COMPLEX          array of dimension at least
  3625.          ( 1 + ( n - 1 )*abs( INCX ) ).
  3626.          Before entry, the incremented array X must contain the n
  3627.          element vector x. On exit, X is overwritten with the
  3628.          tranformed vector x.
  3629.  
  3630. INCX   - INTEGER.
  3631.          On entry, INCX specifies the increment for the elements of
  3632.          X. INCX must not be zero.
  3633.          Unchanged on exit.
  3634.  
  3635.  
  3636. SUBROUTINE CTPSV(UPLO,TRANS,DIAG,N,AP,X,INCX)
  3637.  
  3638. CTPSV  solves one of the systems of equations
  3639.  
  3640.    A*x = b,   or   A'*x = b,   or   conjg( A' )*x = b,
  3641.  
  3642. where b and x are n element vectors and A is an n by n unit, or
  3643. non-unit, upper or lower triangular matrix, supplied in packed form.
  3644.  
  3645. No test for singularity or near-singularity is included in this
  3646. routine. Such tests must be performed before calling this routine.
  3647.  
  3648. UPLO   - CHARACTER*1.
  3649.          On entry, UPLO specifies whether the matrix is an upper or
  3650.          lower triangular matrix as follows:
  3651.  
  3652.             UPLO = 'U' or 'u'   A is an upper triangular matrix.
  3653.  
  3654.             UPLO = 'L' or 'l'   A is a lower triangular matrix.
  3655.  
  3656.          Unchanged on exit.
  3657.  
  3658. TRANS  - CHARACTER*1.
  3659.          On entry, TRANS specifies the equations to be solved as
  3660.          follows:
  3661.  
  3662.             TRANS = 'N' or 'n'   A*x = b.
  3663.  
  3664.             TRANS = 'T' or 't'   A'*x = b.
  3665.  
  3666.             TRANS = 'C' or 'c'   conjg( A' )*x = b.
  3667.  
  3668.          Unchanged on exit.
  3669.  
  3670. DIAG   - CHARACTER*1.
  3671.          On entry, DIAG specifies whether or not A is unit
  3672.          triangular as follows:
  3673.  
  3674.             DIAG = 'U' or 'u'   A is assumed to be unit triangular.
  3675.  
  3676.             DIAG = 'N' or 'n'   A is not assumed to be unit
  3677.                                 triangular.
  3678.  
  3679.          Unchanged on exit.
  3680.  
  3681. N      - INTEGER.
  3682.          On entry, N specifies the order of the matrix A.
  3683.          N must be at least zero.
  3684.          Unchanged on exit.
  3685.  
  3686. AP     - COMPLEX          array of DIMENSION at least
  3687.          ( ( n*( n + 1 ) )/2 ).
  3688.          Before entry with  UPLO = 'U' or 'u', the array AP must
  3689.          contain the upper triangular matrix packed sequentially,
  3690.          column by column, so that AP( 1 ) contains a( 1, 1 ),
  3691.          AP( 2 ) and AP( 3 ) contain a( 1, 2 ) and a( 2, 2 )
  3692.          respectively, and so on.
  3693.          Before entry with UPLO = 'L' or 'l', the array AP must
  3694.          contain the lower triangular matrix packed sequentially,
  3695.          column by column, so that AP( 1 ) contains a( 1, 1 ),
  3696.          AP( 2 ) and AP( 3 ) contain a( 2, 1 ) and a( 3, 1 )
  3697.          respectively, and so on.
  3698.          Note that when  DIAG = 'U' or 'u', the diagonal elements of
  3699.          A are not referenced, but are assumed to be unity.
  3700.          Unchanged on exit.
  3701.  
  3702. X      - COMPLEX          array of dimension at least
  3703.          ( 1 + ( n - 1 )*abs( INCX ) ).
  3704.          Before entry, the incremented array X must contain the n
  3705.          element right-hand side vector b. On exit, X is overwritten
  3706.          with the solution vector x.
  3707.  
  3708. INCX   - INTEGER.
  3709.          On entry, INCX specifies the increment for the elements of
  3710.          X. INCX must not be zero.
  3711.          Unchanged on exit.
  3712.  
  3713.  
  3714. SUBROUTINE CTRMV(UPLO,TRANS,DIAG,N,A,LDA,X,INCX)
  3715.  
  3716. CTRMV  performs one of the matrix-vector operations
  3717.  
  3718.    x := A*x,   or   x := A'*x,   or   x := conjg( A' )*x,
  3719.  
  3720. where x is an n element vector and  A is an n by n unit, or non-unit,
  3721. upper or lower triangular matrix.
  3722.  
  3723. UPLO   - CHARACTER*1.
  3724.          On entry, UPLO specifies whether the matrix is an upper or
  3725.          lower triangular matrix as follows:
  3726.  
  3727.             UPLO = 'U' or 'u'   A is an upper triangular matrix.
  3728.  
  3729.             UPLO = 'L' or 'l'   A is a lower triangular matrix.
  3730.  
  3731.          Unchanged on exit.
  3732.  
  3733. TRANS  - CHARACTER*1.
  3734.          On entry, TRANS specifies the operation to be performed as
  3735.          follows:
  3736.  
  3737.             TRANS = 'N' or 'n'   x := A*x.
  3738.  
  3739.             TRANS = 'T' or 't'   x := A'*x.
  3740.  
  3741.             TRANS = 'C' or 'c'   x := conjg( A' )*x.
  3742.  
  3743.          Unchanged on exit.
  3744.  
  3745. DIAG   - CHARACTER*1.
  3746.          On entry, DIAG specifies whether or not A is unit
  3747.          triangular as follows:
  3748.  
  3749.             DIAG = 'U' or 'u'   A is assumed to be unit triangular.
  3750.  
  3751.             DIAG = 'N' or 'n'   A is not assumed to be unit
  3752.                                 triangular.
  3753.  
  3754.          Unchanged on exit.
  3755.  
  3756. N      - INTEGER.
  3757.          On entry, N specifies the order of the matrix A.
  3758.          N must be at least zero.
  3759.          Unchanged on exit.
  3760.  
  3761. A      - COMPLEX          array of DIMENSION ( LDA, n ).
  3762.          Before entry with  UPLO = 'U' or 'u', the leading n by n
  3763.          upper triangular part of the array A must contain the upper
  3764.          triangular matrix and the strictly lower triangular part of
  3765.          A is not referenced.
  3766.          Before entry with UPLO = 'L' or 'l', the leading n by n
  3767.          lower triangular part of the array A must contain the lower
  3768.          triangular matrix and the strictly upper triangular part of
  3769.          A is not referenced.
  3770.          Note that when  DIAG = 'U' or 'u', the diagonal elements of
  3771.          A are not referenced either, but are assumed to be unity.
  3772.          Unchanged on exit.
  3773.  
  3774. LDA    - INTEGER.
  3775.          On entry, LDA specifies the first dimension of A as declared
  3776.          in the calling (sub) program. LDA must be at least
  3777.          max( 1, n ).
  3778.          Unchanged on exit.
  3779.  
  3780. X      - COMPLEX          array of dimension at least
  3781.          ( 1 + ( n - 1 )*abs( INCX ) ).
  3782.          Before entry, the incremented array X must contain the n
  3783.          element vector x. On exit, X is overwritten with the
  3784.          tranformed vector x.
  3785.  
  3786. INCX   - INTEGER.
  3787.          On entry, INCX specifies the increment for the elements of
  3788.          X. INCX must not be zero.
  3789.          Unchanged on exit.
  3790.  
  3791.  
  3792. SUBROUTINE CTRSV(UPLO,TRANS,DIAG,N,A,LDA,X,INCX)
  3793.  
  3794. CTRSV  solves one of the systems of equations
  3795.  
  3796.    A*x = b,   or   A'*x = b,   or   conjg( A' )*x = b,
  3797.  
  3798. where b and x are n element vectors and A is an n by n unit, or
  3799. non-unit, upper or lower triangular matrix.
  3800.  
  3801. No test for singularity or near-singularity is included in this
  3802. routine. Such tests must be performed before calling this routine.
  3803.  
  3804. UPLO   - CHARACTER*1.
  3805.          On entry, UPLO specifies whether the matrix is an upper or
  3806.          lower triangular matrix as follows:
  3807.  
  3808.             UPLO = 'U' or 'u'   A is an upper triangular matrix.
  3809.  
  3810.             UPLO = 'L' or 'l'   A is a lower triangular matrix.
  3811.  
  3812.          Unchanged on exit.
  3813.  
  3814. TRANS  - CHARACTER*1.
  3815.          On entry, TRANS specifies the equations to be solved as
  3816.          follows:
  3817.  
  3818.             TRANS = 'N' or 'n'   A*x = b.
  3819.  
  3820.             TRANS = 'T' or 't'   A'*x = b.
  3821.  
  3822.             TRANS = 'C' or 'c'   conjg( A' )*x = b.
  3823.  
  3824.          Unchanged on exit.
  3825.  
  3826. DIAG   - CHARACTER*1.
  3827.          On entry, DIAG specifies whether or not A is unit
  3828.          triangular as follows:
  3829.  
  3830.             DIAG = 'U' or 'u'   A is assumed to be unit triangular.
  3831.  
  3832.             DIAG = 'N' or 'n'   A is not assumed to be unit
  3833.                                 triangular.
  3834.  
  3835.          Unchanged on exit.
  3836.  
  3837. N      - INTEGER.
  3838.          On entry, N specifies the order of the matrix A.
  3839.          N must be at least zero.
  3840.          Unchanged on exit.
  3841.  
  3842. A      - COMPLEX          array of DIMENSION ( LDA, n ).
  3843.          Before entry with  UPLO = 'U' or 'u', the leading n by n
  3844.          upper triangular part of the array A must contain the upper
  3845.          triangular matrix and the strictly lower triangular part of
  3846.          A is not referenced.
  3847.          Before entry with UPLO = 'L' or 'l', the leading n by n
  3848.          lower triangular part of the array A must contain the lower
  3849.          triangular matrix and the strictly upper triangular part of
  3850.          A is not referenced.
  3851.          Note that when  DIAG = 'U' or 'u', the diagonal elements of
  3852.          A are not referenced either, but are assumed to be unity.
  3853.          Unchanged on exit.
  3854.  
  3855. LDA    - INTEGER.
  3856.          On entry, LDA specifies the first dimension of A as declared
  3857.          in the calling (sub) program. LDA must be at least
  3858.          max( 1, n ).
  3859.          Unchanged on exit.
  3860.  
  3861. X      - COMPLEX          array of dimension at least
  3862.          ( 1 + ( n - 1 )*abs( INCX ) ).
  3863.          Before entry, the incremented array X must contain the n
  3864.          element right-hand side vector b. On exit, X is overwritten
  3865.          with the solution vector x.
  3866.  
  3867. INCX   - INTEGER.
  3868.          On entry, INCX specifies the increment for the elements of
  3869.          X. INCX must not be zero.
  3870.          Unchanged on exit.
  3871.  
  3872. *********************************************************************
  3873.  
  3874. Level 3 BLAS:
  3875.  
  3876. *********************************************************************
  3877.  
  3878.  
  3879. The Level 3 BLAS were designed to carry out matrix-matrix operations
  3880. or to solve a linear system of equations where there may be multiple
  3881. right hand sides.
  3882.  
  3883.  
  3884. SUBROUTINE SGEMM(TRANSA,TRANSB,M,N,K,ALPHA,A,LDA,B,LDB,BETA,C,LDC)
  3885.  
  3886. SGEMM  performs one of the matrix-matrix operations
  3887.  
  3888.    C := alpha*op( A )*op( B ) + beta*C,
  3889.  
  3890. where  op( X ) is one of
  3891.  
  3892.    op( X ) = X   or   op( X ) = X',
  3893.  
  3894. alpha and beta are scalars, and A, B and C are matrices, with op( A )
  3895. an m by k matrix,  op( B )  a  k by n matrix and  C an m by n matrix.
  3896.  
  3897. TRANSA - CHARACTER*1.
  3898.          On entry, TRANSA specifies the form of op( A ) to be used in
  3899.          the matrix multiplication as follows:
  3900.  
  3901.             TRANSA = 'N' or 'n',  op( A ) = A.
  3902.  
  3903.             TRANSA = 'T' or 't',  op( A ) = A'.
  3904.  
  3905.             TRANSA = 'C' or 'c',  op( A ) = A'.
  3906.  
  3907.          Unchanged on exit.
  3908.  
  3909. TRANSB - CHARACTER*1.
  3910.          On entry, TRANSB specifies the form of op( B ) to be used in
  3911.          the matrix multiplication as follows:
  3912.  
  3913.             TRANSA = 'N' or 'n',  op( B ) = B.
  3914.  
  3915.             TRANSA = 'T' or 't',  op( B ) = B'.
  3916.  
  3917.             TRANSA = 'C' or 'c',  op( B ) = B'.
  3918.  
  3919.          Unchanged on exit.
  3920.  
  3921. M      - INTEGER.
  3922.          On entry,  M  specifies  the number  of rows  of the  matrix
  3923.          op( A )  and of the  matrix  C.  M  must  be at least  zero.
  3924.          Unchanged on exit.
  3925.  
  3926. N      - INTEGER.
  3927.          On entry,  N  specifies the number  of columns of the matrix
  3928.          op( B ) and the number of columns of the matrix C. N must be
  3929.          at least zero.
  3930.          Unchanged on exit.
  3931.  
  3932. K      - INTEGER.
  3933.          On entry,  K  specifies  the number of columns of the matrix
  3934.          op( A ) and the number of rows of the matrix op( B ). K must
  3935.          be at least  zero.
  3936.          Unchanged on exit.
  3937.  
  3938. ALPHA  - REAL            .
  3939.          On entry, ALPHA specifies the scalar alpha.
  3940.          Unchanged on exit.
  3941.  
  3942. A      - REAL             array of DIMENSION ( LDA, ka ), where ka is
  3943.          k  when  TRANSA = 'N' or 'n',  and is  m  otherwise.
  3944.          Before entry with  TRANSA = 'N' or 'n',  the leading  m by k
  3945.          part of the array  A  must contain the matrix  A,  otherwise
  3946.          the leading  k by m  part of the array  A  must contain  the
  3947.          matrix A.
  3948.          Unchanged on exit.
  3949.  
  3950. LDA    - INTEGER.
  3951.          On entry, LDA specifies the first dimension of A as declared
  3952.          in the calling (sub) program. When  TRANSA = 'N' or 'n' then
  3953.          LDA must be at least  max( 1, m ), otherwise  LDA must be at
  3954.          least  max( 1, k ).
  3955.          Unchanged on exit.
  3956.  
  3957. B      - REAL             array of DIMENSION ( LDB, kb ), where kb is
  3958.          n  when  TRANSB = 'N' or 'n',  and is  k  otherwise.
  3959.          Before entry with  TRANSB = 'N' or 'n',  the leading  k by n
  3960.          part of the array  B  must contain the matrix  B,  otherwise
  3961.          the leading  n by k  part of the array  B  must contain  the
  3962.          matrix B.
  3963.          Unchanged on exit.
  3964.  
  3965. LDB    - INTEGER.
  3966.          On entry, LDB specifies the first dimension of B as declared
  3967.          in the calling (sub) program. When  TRANSB = 'N' or 'n' then
  3968.          LDB must be at least  max( 1, k ), otherwise  LDB must be at
  3969.          least  max( 1, n ).
  3970.          Unchanged on exit.
  3971.  
  3972. BETA   - REAL            .
  3973.          On entry,  BETA  specifies the scalar  beta.  When  BETA  is
  3974.          supplied as zero then C need not be set on input.
  3975.          Unchanged on exit.
  3976.  
  3977. C      - REAL             array of DIMENSION ( LDC, n ).
  3978.          Before entry, the leading  m by n  part of the array  C must
  3979.          contain the matrix  C,  except when  beta  is zero, in which
  3980.          case C need not be set on entry.
  3981.          On exit, the array  C  is overwritten by the  m by n  matrix
  3982.          ( alpha*op( A )*op( B ) + beta*C ).
  3983.  
  3984. LDC    - INTEGER.
  3985.          On entry, LDC specifies the first dimension of C as declared
  3986.          in  the  calling  (sub)  program.   LDC  must  be  at  least
  3987.          max( 1, m ).
  3988.          Unchanged on exit.
  3989.  
  3990.  
  3991. SUBROUTINE SSYMM(SIDE,UPLO,TRANSB,M,N,ALPHA,A,LDA,B,LDB,BETA,C,LDC)
  3992.  
  3993. SSYMM  performs one of the matrix-matrix operations
  3994.  
  3995.    C := alpha*A*op( B ) + beta*C,
  3996.  
  3997. or
  3998.  
  3999.    C := alpha*op( B )*A + beta*C,
  4000.  
  4001. where  op( B ) is one of
  4002.  
  4003.    op( B ) = B   or   op( B ) = B',
  4004.  
  4005. alpha and beta  are scalars,  A is a symmetric matrix,  op( B ) is an
  4006. m by n  matrix and  C is an  m by n matrix.
  4007.  
  4008. SIDE   - CHARACTER*1.
  4009.          On entry,  SIDE  specifies whether  the  symmetric matrix  A
  4010.          appears on the  left or right  in the  operation as follows:
  4011.  
  4012.             SIDE = 'L' or 'l'   C := alpha*A*op( B ) + beta*C,
  4013.  
  4014.             SIDE = 'R' or 'r'   C := alpha*op( B )*A + beta*C,
  4015.  
  4016.          Unchanged on exit.
  4017.  
  4018. UPLO   - CHARACTER*1.
  4019.          On  entry,   UPLO  specifies  whether  the  upper  of  lower
  4020.          triangular  part  of  the  symmetric  matrix   A  is  to  be
  4021.          referenced as follows:
  4022.  
  4023.             UPLO = 'U' or 'u'   Only the upper triangular part of the
  4024.                                 symmetric matrix is to be referenced.
  4025.  
  4026.             UPLO = 'L' or 'l'   Only the lower triangular part of the
  4027.                                 symmetric matrix is to be referenced.
  4028.  
  4029.          Unchanged on exit.
  4030.  
  4031. TRANSB - CHARACTER*1.
  4032.          On entry, TRANSB  specifies the form  of  op( B ) to be used
  4033.          in the matrix multiplication as follows:
  4034.  
  4035.             TRANSB = 'N' or 'n'   op( B ) = B.
  4036.  
  4037.             TRANSB = 'T' or 't'   op( B ) = B'.
  4038.  
  4039.             TRANSB = 'C' or 'c'   op( B ) = B'.
  4040.  
  4041.          Unchanged on exit.
  4042.  
  4043. M      - INTEGER.
  4044.          On entry,  M  specifies the number of rows of the matrix  C.
  4045.          M  must be at least zero.
  4046.          Unchanged on exit.
  4047.  
  4048. N      - INTEGER.
  4049.          On entry, N specifies the number of columns of the matrix C.
  4050.          N  must be at least zero.
  4051.          Unchanged on exit.
  4052.  
  4053. ALPHA  - REAL            .
  4054.          On entry, ALPHA specifies the scalar alpha.
  4055.          Unchanged on exit.
  4056.  
  4057. A      - REAL             array of DIMENSION ( LDA, ka ), where ka is
  4058.          m  when  SIDE = 'L' or 'l'  and is  n otherwise.
  4059.          Before entry  with  SIDE = 'L' or 'l',  the  m by m  part of
  4060.          the array  A  must contain the  symmetric matrix,  such that
  4061.          when  UPLO = 'U' or 'u', the leading m by m upper triangular
  4062.          part of the array  A  must contain the upper triangular part
  4063.          of the  symmetric matrix and the  strictly  lower triangular
  4064.          part of  A  is not referenced,  and when  UPLO = 'L' or 'l',
  4065.          the leading  m by m  lower triangular part  of the  array  A
  4066.          must  contain  the  lower triangular part  of the  symmetric
  4067.          matrix and the  strictly upper triangular part of  A  is not
  4068.          referenced.
  4069.          Before entry  with  SIDE = 'R' or 'r',  the  n by n  part of
  4070.          the array  A  must contain the  symmetric matrix,  such that
  4071.          when  UPLO = 'U' or 'u', the leading n by n upper triangular
  4072.          part of the array  A  must contain the upper triangular part
  4073.          of the  symmetric matrix and the  strictly  lower triangular
  4074.          part of  A  is not referenced,  and when  UPLO = 'L' or 'l',
  4075.          the leading  n by n  lower triangular part  of the  array  A
  4076.          must  contain  the  lower triangular part  of the  symmetric
  4077.          matrix and the  strictly upper triangular part of  A  is not
  4078.          referenced.
  4079.          Unchanged on exit.
  4080.  
  4081. LDA    - INTEGER.
  4082.          On entry, LDA specifies the first dimension of A as declared
  4083.          in the calling (sub) program.  When  SIDE = 'L' or 'l'  then
  4084.          LDA must be at least  max( 1, m ), otherwise  LDA must be at
  4085.          least  max( 1, n ).
  4086.          Unchanged on exit.
  4087.  
  4088. B      - REAL             array of DIMENSION ( LDB, kb ), where kb is
  4089.          n  when  TRANSB = 'N' or 'n'  and is  m  otherwise.
  4090.          Before entry  with  TRANSB = 'N' or 'n',  the leading m by n
  4091.          part of the array  B must contain the matrix B. Before entry
  4092.          with  TRANSB = 'T' or 't' or 'C' or 'c', the leading  n by m
  4093.          part of the array  B must contain the matrix  B.
  4094.          Unchanged on exit.
  4095.  
  4096. LDB    - INTEGER.
  4097.          On entry, LDB specifies the first dimension of B as declared
  4098.          in  the  calling  (sub)  program.  When  TRANSB = 'N' or 'n'
  4099.          then  LDB must be at least  max( 1, m ), otherwise  LDB must
  4100.          be at least max( 1, n ).
  4101.          Unchanged on exit.
  4102.  
  4103. BETA   - REAL            .
  4104.          On entry,  BETA  specifies the scalar  beta.  When  BETA  is
  4105.          supplied as zero then C need not be set on input.
  4106.          Unchanged on exit.
  4107.  
  4108. C      - REAL             array of DIMENSION ( LDC, n ).
  4109.          Before entry, the leading  m by n  part of the array  C must
  4110.          contain the matrix  C,  except when  beta  is zero, in which
  4111.          case C need not be set on entry.
  4112.          On exit, the array  C  is overwritten by the  m by n updated
  4113.          matrix.
  4114.  
  4115. LDC    - INTEGER.
  4116.          On entry, LDC specifies the first dimension of C as declared
  4117.          in  the  calling  (sub)  program.   LDC  must  be  at  least
  4118.          max( 1, m ).
  4119.          Unchanged on exit.
  4120.  
  4121.  
  4122. SUBROUTINE SSYRK(UPLO,TRANSA,N,K,ALPHA,A,LDA,BETA,C,LDC)
  4123.  
  4124. SSYRK  performs one of the symmetric rank k operations
  4125.  
  4126.    C := alpha*A*A' + beta*C,
  4127.  
  4128. or
  4129.  
  4130.    C := alpha*A'*A + beta*C,
  4131.  
  4132. where  alpha and beta  are scalars, C is an  n by n  symmetric matrix
  4133. and  A  is an  n by k  matrix in the first case and a  k by n  matrix
  4134. in the second case.
  4135.  
  4136. UPLO   - CHARACTER*1.
  4137.          On  entry,   UPLO  specifies  whether  the  upper  or  lower
  4138.          triangular  part  of the  array  C  is to be  referenced  as
  4139.          follows:
  4140.  
  4141.             UPLO = 'U' or 'u'   Only the  upper triangular part of  C
  4142.                                 is to be referenced.
  4143.  
  4144.             UPLO = 'L' or 'l'   Only the  lower triangular part of  C
  4145.                                 is to be referenced.
  4146.  
  4147.          Unchanged on exit.
  4148.  
  4149. TRANSA - CHARACTER*1.
  4150.          On entry, TRANSA  specifies the operation to be performed as
  4151.          follows:
  4152.  
  4153.             TRANSA = 'N' or 'n'   C := alpha*A*A' + beta*C.
  4154.  
  4155.             TRANSA = 'T' or 't'   C := alpha*A'*A + beta*C.
  4156.  
  4157.             TRANSA = 'C' or 'c'   C := alpha*A'*A + beta*C.
  4158.  
  4159.          Unchanged on exit.
  4160.  
  4161. N      - INTEGER.
  4162.          On entry,  N specifies the order of the matrix C.  N must be
  4163.          at least zero.
  4164.          Unchanged on exit.
  4165.  
  4166. K      - INTEGER.
  4167.          On entry with  TRANSA = 'N' or 'n',  K  specifies the number
  4168.          of  columns   of  the   matrix   A,   and  on   entry   with
  4169.          TRANSA = 'T' or 't' or 'C' or 'c',  K  specifies  the number
  4170.          of rows of the matrix  A.  K must be at least zero.
  4171.          Unchanged on exit.
  4172.  
  4173. ALPHA  - REAL            .
  4174.          On entry, ALPHA specifies the scalar alpha.
  4175.          Unchanged on exit.
  4176.  
  4177. A      - REAL             array of DIMENSION ( LDA, ka ), where ka is
  4178.          k  when  TRANSA = 'N' or 'n',  and is  n  otherwise.
  4179.          Before entry with  TRANSA = 'N' or 'n',  the leading  n by k
  4180.          part of the array  A  must contain the matrix  A,  otherwise
  4181.          the leading  k by n  part of the array  A  must contain  the
  4182.          matrix A.
  4183.          Unchanged on exit.
  4184.  
  4185. LDA    - INTEGER.
  4186.          On entry, LDA specifies the first dimension of A as declared
  4187.          in  the  calling  (sub) program.   When  TRANSA = 'N' or 'n'
  4188.          then  LDA must be at least  max( 1, n ), otherwise  LDA must
  4189.          be at least  max( 1, k ).
  4190.          Unchanged on exit.
  4191.  
  4192. BETA   - REAL            .
  4193.          On entry, BETA specifies the scalar beta.
  4194.          Unchanged on exit.
  4195.  
  4196. C      - REAL             array of DIMENSION ( LDC, n ).
  4197.          Before entry  with  UPLO = 'U' or 'u',  the leading  n by n
  4198.          upper triangular part of the array C must contain the upper
  4199.          triangular part  of the  symmetric matrix  and the strictly
  4200.          lower triangular part of C is not referenced.  On exit, the
  4201.          upper triangular part of the array  C is overwritten by the
  4202.          upper triangular part of the updated matrix.
  4203.          Before entry  with  UPLO = 'L' or 'l',  the leading  n by n
  4204.          lower triangular part of the array C must contain the lower
  4205.          triangular part  of the  symmetric matrix  and the strictly
  4206.          upper triangular part of C is not referenced.  On exit, the
  4207.          lower triangular part of the array  C is overwritten by the
  4208.          lower triangular part of the updated matrix.
  4209.  
  4210. LDC    - INTEGER.
  4211.          On entry, LDC specifies the first dimension of C as declared
  4212.          in  the  calling  (sub)  program.   LDC  must  be  at  least
  4213.          max( 1, n ).
  4214.          Unchanged on exit.
  4215.  
  4216.  
  4217. SUBROUTINE SSYR2K(UPLO,TRANSA,N,K,ALPHA,A,LDA,B,LDB,BETA,C,LDC)
  4218.  
  4219. SSYR2K  performs one of the symmetric rank 2k operations
  4220.  
  4221.    C := alpha*A*B' + alpha*B*A' + beta*C,
  4222.  
  4223. or
  4224.  
  4225.    C := alpha*A'*B + alpha*B'*A + beta*C,
  4226.  
  4227. where  alpha and beta  are scalars, C is an  n by n  symmetric matrix
  4228. and  A and B  are  n by k  matrices  in the  first  case  and  k by n
  4229. matrices in the second case.
  4230.  
  4231. UPLO   - CHARACTER*1.
  4232.          On  entry,   UPLO  specifies  whether  the  upper  or  lower
  4233.          triangular  part  of the  array  C  is to be  referenced  as
  4234.          follows:
  4235.  
  4236.             UPLO = 'U' or 'u'   Only the  upper triangular part of  C
  4237.                                 is to be referenced.
  4238.  
  4239.             UPLO = 'L' or 'l'   Only the  lower triangular part of  C
  4240.                                 is to be referenced.
  4241.  
  4242.          Unchanged on exit.
  4243.  
  4244. TRANSA - CHARACTER*1.
  4245.          On entry, TRANSA  specifies the operation to be performed as
  4246.          follows:
  4247.  
  4248.             TRANSA = 'N' or 'n'   C := alpha*A*B' + alpha*B*A' +
  4249.                                        beta*C.
  4250.  
  4251.             TRANSA = 'T' or 't'   C := alpha*A'*B + alpha*B'*A +
  4252.                                        beta*C.
  4253.  
  4254.             TRANSA = 'C' or 'c'   C := alpha*A'*B + alpha*B'*A +
  4255.                                        beta*C.
  4256.  
  4257.          Unchanged on exit.
  4258.  
  4259. N      - INTEGER.
  4260.          On entry,  N specifies the order of the matrix C.  N must be
  4261.          at least zero.
  4262.          Unchanged on exit.
  4263.  
  4264. K      - INTEGER.
  4265.          On entry with  TRANSA = 'N' or 'n',  K  specifies the number
  4266.          of  columns  of the  matrices  A and B,  and on  entry  with
  4267.          TRANSA = 'T' or 't' or 'C' or 'c',  K  specifies  the number
  4268.          of rows of the matrices  A and B.  K must be at least  zero.
  4269.          Unchanged on exit.
  4270.  
  4271. ALPHA  - REAL            .
  4272.          On entry, ALPHA specifies the scalar alpha.
  4273.          Unchanged on exit.
  4274.  
  4275. A      - REAL             array of DIMENSION ( LDA, ka ), where ka is
  4276.          k  when  TRANSA = 'N' or 'n',  and is  n  otherwise.
  4277.          Before entry with  TRANSA = 'N' or 'n',  the leading  n by k
  4278.          part of the array  A  must contain the matrix  A,  otherwise
  4279.          the leading  k by n  part of the array  A  must contain  the
  4280.          matrix A.
  4281.          Unchanged on exit.
  4282.  
  4283. LDA    - INTEGER.
  4284.          On entry, LDA specifies the first dimension of A as declared
  4285.          in  the  calling  (sub) program.   When  TRANSA = 'N' or 'n'
  4286.          then  LDA must be at least  max( 1, n ), otherwise  LDA must
  4287.          be at least  max( 1, k ).
  4288.          Unchanged on exit.
  4289.  
  4290. B      - REAL             array of DIMENSION ( LDB, kb ), where kb is
  4291.          k  when  TRANSA = 'N' or 'n',  and is  n  otherwise.
  4292.          Before entry with  TRANSA = 'N' or 'n',  the leading  n by k
  4293.          part of the array  B  must contain the matrix  B,  otherwise
  4294.          the leading  k by n  part of the array  B  must contain  the
  4295.          matrix B.
  4296.          Unchanged on exit.
  4297.  
  4298. LDB    - INTEGER.
  4299.          On entry, LDB specifies the first dimension of B as declared
  4300.          in  the  calling  (sub) program.   When  TRANSA = 'N' or 'n'
  4301.          then  LDB must be at least  max( 1, n ), otherwise  LDB must
  4302.          be at least  max( 1, k ).
  4303.          Unchanged on exit.
  4304.  
  4305. BETA   - REAL            .
  4306.          On entry, BETA specifies the scalar beta.
  4307.          Unchanged on exit.
  4308.  
  4309. C      - REAL             array of DIMENSION ( LDC, n ).
  4310.          Before entry  with  UPLO = 'U' or 'u',  the leading  n by n
  4311.          upper triangular part of the array C must contain the upper
  4312.          triangular part  of the  symmetric matrix  and the strictly
  4313.          lower triangular part of C is not referenced.  On exit, the
  4314.          upper triangular part of the array  C is overwritten by the
  4315.          upper triangular part of the updated matrix.
  4316.          Before entry  with  UPLO = 'L' or 'l',  the leading  n by n
  4317.          lower triangular part of the array C must contain the lower
  4318.          triangular part  of the  symmetric matrix  and the strictly
  4319.          upper triangular part of C is not referenced.  On exit, the
  4320.          lower triangular part of the array  C is overwritten by the
  4321.          lower triangular part of the updated matrix.
  4322.  
  4323. LDC    - INTEGER.
  4324.          On entry, LDC specifies the first dimension of C as declared
  4325.          in  the  calling  (sub)  program.   LDC  must  be  at  least
  4326.          max( 1, n ).
  4327.          Unchanged on exit.
  4328.  
  4329.  
  4330. SUBROUTINE STRMM(SIDE,UPLO,TRANS,DIAG,M,N,A,LDA,B,LDB)
  4331.  
  4332. STRMM  performs one of the matrix-matrix operations
  4333.  
  4334.    B := op( A )*B,   or   B := B*op( A )
  4335.  
  4336. where B is an m by n matrix, A is a unit, or non-unit, upper or lower
  4337. triangular matrix and  op( A )  is one of
  4338.  
  4339.    op( A ) = A   or   op( A ) = A'.
  4340.  
  4341. SIDE   - CHARACTER*1.
  4342.          On entry,  SIDE specifies whether  op( A ) multiplies B from
  4343.          the left or right as follows:
  4344.  
  4345.             SIDE = 'L' or 'l'   B := op( A )*B.
  4346.  
  4347.             SIDE = 'R' or 'r'   B := B*op( A ).
  4348.  
  4349.          Unchanged on exit.
  4350.  
  4351. UPLO   - CHARACTER*1.
  4352.          On entry, UPLO specifies whether the matrix A is an upper or
  4353.          lower triangular matrix as follows:
  4354.  
  4355.             UPLO = 'U' or 'u'   A is an upper triangular matrix.
  4356.  
  4357.             UPLO = 'L' or 'l'   A is a lower triangular matrix.
  4358.  
  4359.          Unchanged on exit.
  4360.  
  4361. TRANS  - CHARACTER*1.
  4362.          On entry, TRANS specifies the form of op( A ) to be used in
  4363.          the matrix multiplication as follows:
  4364.  
  4365.             TRANS = 'N' or 'n'   op( A ) = A.
  4366.  
  4367.             TRANS = 'T' or 't'   op( A ) = A'.
  4368.  
  4369.             TRANS = 'C' or 'c'   op( A ) = A'.
  4370.  
  4371.          Unchanged on exit.
  4372.  
  4373. DIAG   - CHARACTER*1.
  4374.          On entry, DIAG specifies whether or not A is unit triangular
  4375.          as follows:
  4376.  
  4377.             DIAG = 'U' or 'u'   A is assumed to be unit triangular.
  4378.  
  4379.             DIAG = 'N' or 'n'   A is not assumed to be unit
  4380.                                 triangular.
  4381.  
  4382.          Unchanged on exit.
  4383.  
  4384. M      - INTEGER.
  4385.          On entry, M specifies the number of rows of B. M must be at
  4386.          least zero.
  4387.          Unchanged on exit.
  4388.  
  4389. N      - INTEGER.
  4390.          On entry, N specifies the number of columns of B.  N must be
  4391.          at least zero.
  4392.          Unchanged on exit.
  4393.  
  4394. A      - REAL             array of DIMENSION ( LDA, k ), where k is m
  4395.          when  SIDE = 'L' or 'l'  and is  n  when  SIDE = 'R' or 'r'.
  4396.          Before entry  with  UPLO = 'U' or 'u',  the  leading  k by k
  4397.          upper triangular part of the array  A must contain the upper
  4398.          triangular matrix  and the strictly lower triangular part of
  4399.          A is not referenced.
  4400.          Before entry  with  UPLO = 'L' or 'l',  the  leading  k by k
  4401.          lower triangular part of the array  A must contain the lower
  4402.          triangular matrix  and the strictly upper triangular part of
  4403.          A is not referenced.
  4404.          Note that when  DIAG = 'U' or 'u',  the diagonal elements of
  4405.          A  are not referenced either,  but are assumed to be  unity.
  4406.          Unchanged on exit.
  4407.  
  4408. LDA    - INTEGER.
  4409.          On entry, LDA specifies the first dimension of A as declared
  4410.          in the calling (sub) program.  When  SIDE = 'L' or 'l'  then
  4411.          LDA  must be at least  max( 1, m ),  when  SIDE = 'R' or 'r'
  4412.          then LDA must be at least max( 1, n ).
  4413.          Unchanged on exit.
  4414.  
  4415. B      - REAL             array of DIMENSION ( LDB, n ).
  4416.          Before entry,  the leading  m by n part of the array  B must
  4417.          contain the matrix  B,  and  on exit  is overwritten  by the
  4418.          transformed matrix.
  4419.  
  4420. LDB    - INTEGER.
  4421.          On entry, LDB specifies the first dimension of B as declared
  4422.          in  the  calling  (sub)  program.   LDB  must  be  at  least
  4423.          max( 1, m ).
  4424.          Unchanged on exit.
  4425.  
  4426.  
  4427. SUBROUTINE STRSM(SIDE,UPLO,TRANS,DIAG,M,N,A,LDA,B,LDB)
  4428.  
  4429. STRSM  solves one of the matrix equations
  4430.  
  4431.    op( A )*X = B,   or   X*op( A ) = B,
  4432.  
  4433. where X and B are m by n matrices, A is a unit, or non-unit, upper
  4434. or lower triangular matrix and  op( A )  is one of
  4435.  
  4436.    op( A ) = A   or   op( A ) = A'.
  4437.  
  4438. The matrix X is overwritten on B.
  4439.  
  4440. SIDE   - CHARACTER*1.
  4441.          On entry, SIDE specifies whether op( A ) appears on the left
  4442.          or right of X as follows:
  4443.  
  4444.             SIDE = 'L' or 'l'   op( A )*X = B.
  4445.  
  4446.             SIDE = 'R' or 'r'   X*op( A ) = B.
  4447.  
  4448.          Unchanged on exit.
  4449.  
  4450. UPLO   - CHARACTER*1.
  4451.          On entry, UPLO specifies whether the matrix A is an upper or
  4452.          lower triangular matrix as follows:
  4453.  
  4454.             UPLO = 'U' or 'u'   A is an upper triangular matrix.
  4455.  
  4456.             UPLO = 'L' or 'l'   A is a lower triangular matrix.
  4457.  
  4458.          Unchanged on exit.
  4459.  
  4460. TRANS  - CHARACTER*1.
  4461.          On entry, TRANS specifies the form of op( A ) to be used in
  4462.          the matrix multiplication as follows:
  4463.  
  4464.             TRANS = 'N' or 'n'   op( A ) = A.
  4465.  
  4466.             TRANS = 'T' or 't'   op( A ) = A'.
  4467.  
  4468.             TRANS = 'C' or 'c'   op( A ) = A'.
  4469.  
  4470.          Unchanged on exit.
  4471.  
  4472. DIAG   - CHARACTER*1.
  4473.          On entry, DIAG specifies whether or not A is unit triangular
  4474.          as follows:
  4475.  
  4476.             DIAG = 'U' or 'u'   A is assumed to be unit triangular.
  4477.  
  4478.             DIAG = 'N' or 'n'   A is not assumed to be unit
  4479.                                 triangular.
  4480.  
  4481.          Unchanged on exit.
  4482.  
  4483. M      - INTEGER.
  4484.          On entry, M specifies the number of rows of B. M must be at
  4485.          least zero.
  4486.          Unchanged on exit.
  4487.  
  4488. N      - INTEGER.
  4489.          On entry, N specifies the number of columns of B.  N must be
  4490.          at least zero.
  4491.          Unchanged on exit.
  4492.  
  4493. A      - REAL             array of DIMENSION ( LDA, k ), where k is m
  4494.          when  SIDE = 'L' or 'l'  and is  n  when  SIDE = 'R' or 'r'.
  4495.          Before entry  with  UPLO = 'U' or 'u',  the  leading  k by k
  4496.          upper triangular part of the array  A must contain the upper
  4497.          triangular matrix  and the strictly lower triangular part of
  4498.          A is not referenced.
  4499.          Before entry  with  UPLO = 'L' or 'l',  the  leading  k by k
  4500.          lower triangular part of the array  A must contain the lower
  4501.          triangular matrix  and the strictly upper triangular part of
  4502.          A is not referenced.
  4503.          Note that when  DIAG = 'U' or 'u',  the diagonal elements of
  4504.          A  are not referenced either,  but are assumed to be  unity.
  4505.          Unchanged on exit.
  4506.  
  4507. LDA    - INTEGER.
  4508.          On entry, LDA specifies the first dimension of A as declared
  4509.          in the calling (sub) program.  When  SIDE = 'L' or 'l'  then
  4510.          LDA  must be at least  max( 1, m ),  when  SIDE = 'R' or 'r'
  4511.          then LDA must be at least max( 1, n ).
  4512.          Unchanged on exit.
  4513.  
  4514. B      - REAL             array of DIMENSION ( LDB, n ).
  4515.          Before entry,  the leading  m by n part of the array  B must
  4516.          contain  the  right-hand  side  matrix  B,  and  on exit  is
  4517.          overwritten by the solution matrix  X.
  4518.  
  4519. LDB    - INTEGER.
  4520.          On entry, LDB specifies the first dimension of B as declared
  4521.          in  the  calling  (sub)  program.   LDB  must  be  at  least
  4522.          max( 1, m ).
  4523.          Unchanged on exit.
  4524.  
  4525.  
  4526.  
  4527. SUBROUTINE CGEMM(TRANSA,TRANSB,M,N,K,ALPHA,A,LDA,B,LDB,BETA,C,LDC)
  4528.  
  4529. CGEMM  performs one of the matrix-matrix operations
  4530.  
  4531.    C := alpha*op( A )*op( B ) + beta*C,
  4532.  
  4533. where  op( X ) is one of
  4534.  
  4535.    op( X ) = X   or   op( X ) = X'   or   op( X ) = conjg( X' ),
  4536.  
  4537. alpha and beta are scalars, and A, B and C are matrices, with op( A )
  4538. an m by k matrix,  op( B )  a  k by n matrix and  C an m by n matrix.
  4539.  
  4540. TRANSA - CHARACTER*1.
  4541.          On entry, TRANSA specifies the form of op( A ) to be used in
  4542.          the matrix multiplication as follows:
  4543.  
  4544.             TRANSA = 'N' or 'n',  op( A ) = A.
  4545.  
  4546.             TRANSA = 'T' or 't',  op( A ) = A'.
  4547.  
  4548.             TRANSA = 'C' or 'c',  op( A ) = conjg( A' ).
  4549.  
  4550.          Unchanged on exit.
  4551.  
  4552. TRANSB - CHARACTER*1.
  4553.          On entry, TRANSB specifies the form of op( B ) to be used in
  4554.          the matrix multiplication as follows:
  4555.  
  4556.             TRANSB = 'N' or 'n',  op( B ) = B.
  4557.  
  4558.             TRANSB = 'T' or 't',  op( B ) = B'.
  4559.  
  4560.             TRANSB = 'C' or 'c',  op( B ) = conjg( B' ).
  4561.  
  4562.          Unchanged on exit.
  4563.  
  4564. M      - INTEGER.
  4565.          On entry,  M  specifies  the number  of rows  of the  matrix
  4566.          op( A )  and of the  matrix  C.  M  must  be at least  zero.
  4567.          Unchanged on exit.
  4568.  
  4569. N      - INTEGER.
  4570.          On entry,  N  specifies the number  of columns of the matrix
  4571.          op( B ) and the number of columns of the matrix C. N must be
  4572.          at least zero.
  4573.          Unchanged on exit.
  4574.  
  4575. K      - INTEGER.
  4576.          On entry,  K  specifies  the number of columns of the matrix
  4577.          op( A ) and the number of rows of the matrix op( B ). K must
  4578.          be at least  zero.
  4579.          Unchanged on exit.
  4580.  
  4581. ALPHA  - COMPLEX         .
  4582.          On entry, ALPHA specifies the scalar alpha.
  4583.          Unchanged on exit.
  4584.  
  4585. A      - COMPLEX          array of DIMENSION ( LDA, ka ), where ka is
  4586.          k  when  TRANSA = 'N' or 'n',  and is  m  otherwise.
  4587.          Before entry with  TRANSA = 'N' or 'n',  the leading  m by k
  4588.          part of the array  A  must contain the matrix  A,  otherwise
  4589.          the leading  k by m  part of the array  A  must contain  the
  4590.          matrix A.
  4591.          Unchanged on exit.
  4592.  
  4593. LDA    - INTEGER.
  4594.          On entry, LDA specifies the first dimension of A as declared
  4595.          in the calling (sub) program. When  TRANSA = 'N' or 'n' then
  4596.          LDA must be at least  max( 1, m ), otherwise  LDA must be at
  4597.          least  max( 1, k ).
  4598.          Unchanged on exit.
  4599.  
  4600. B      - COMPLEX          array of DIMENSION ( LDB, kb ), where kb is
  4601.          n  when  TRANSB = 'N' or 'n',  and is  k  otherwise.
  4602.          Before entry with  TRANSB = 'N' or 'n',  the leading  k by n
  4603.          part of the array  B  must contain the matrix  B,  otherwise
  4604.          the leading  n by k  part of the array  B  must contain  the
  4605.          matrix B.
  4606.          Unchanged on exit.
  4607.  
  4608. LDB    - INTEGER.
  4609.          On entry, LDB specifies the first dimension of B as declared
  4610.          in the calling (sub) program. When  TRANSB = 'N' or 'n' then
  4611.          LDB must be at least  max( 1, k ), otherwise  LDB must be at
  4612.          least  max( 1, n ).
  4613.          Unchanged on exit.
  4614.  
  4615. BETA   - COMPLEX         .
  4616.          On entry,  BETA  specifies the scalar  beta.  When  BETA  is
  4617.          supplied as zero then C need not be set on input.
  4618.          Unchanged on exit.
  4619.  
  4620. C      - COMPLEX          array of DIMENSION ( LDC, n ).
  4621.          Before entry, the leading  m by n  part of the array  C must
  4622.          contain the matrix  C,  except when  beta  is zero, in which
  4623.          case C need not be set on entry.
  4624.          On exit, the array  C  is overwritten by the  m by n  matrix
  4625.          ( alpha*op( A )*op( B ) + beta*C ).
  4626.  
  4627. LDC    - INTEGER.
  4628.          On entry, LDC specifies the first dimension of C as declared
  4629.          in  the  calling  (sub)  program.   LDC  must  be  at  least
  4630.          max( 1, m ).
  4631.          Unchanged on exit.
  4632.  
  4633.  
  4634. SUBROUTINE CSYMM(SIDE,UPLO,M,N,ALPHA,A,LDA,B,LDB,BETA,C,LDC)
  4635.  
  4636. CSYMM  performs one of the matrix-matrix operations
  4637.  
  4638.    C := alpha*A*B + beta*C,
  4639.  
  4640. or
  4641.  
  4642.    C := alpha*B*A + beta*C,
  4643.  
  4644. where  alpha and beta are scalars, A is a symmetric matrix and  B and
  4645. C are m by n matrices.
  4646.  
  4647. SIDE   - CHARACTER*1.
  4648.          On entry,  SIDE  specifies whether  the  symmetric matrix  A
  4649.          appears on the  left or right  in the  operation as follows:
  4650.  
  4651.             SIDE = 'L' or 'l'   C := alpha*A*B + beta*C,
  4652.  
  4653.             SIDE = 'R' or 'r'   C := alpha*B*A + beta*C,
  4654.  
  4655.          Unchanged on exit.
  4656.  
  4657. UPLO   - CHARACTER*1.
  4658.          On  entry,   UPLO  specifies  whether  the  upper  of  lower
  4659.          triangular  part  of  the  symmetric  matrix   A  is  to  be
  4660.          referenced as follows:
  4661.  
  4662.             UPLO = 'U' or 'u'   Only the upper triangular part of the
  4663.                                 symmetric matrix is to be referenced.
  4664.  
  4665.             UPLO = 'L' or 'l'   Only the lower triangular part of the
  4666.                                 symmetric matrix is to be referenced.
  4667.  
  4668.          Unchanged on exit.
  4669.  
  4670. M      - INTEGER.
  4671.          On entry,  M  specifies the number of rows of the matrix  C.
  4672.          M  must be at least zero.
  4673.          Unchanged on exit.
  4674.  
  4675. N      - INTEGER.
  4676.          On entry, N specifies the number of columns of the matrix C.
  4677.          N  must be at least zero.
  4678.          Unchanged on exit.
  4679.  
  4680. ALPHA  - COMPLEX         .
  4681.          On entry, ALPHA specifies the scalar alpha.
  4682.          Unchanged on exit.
  4683.  
  4684. A      - COMPLEX          array of DIMENSION ( LDA, ka ), where ka is
  4685.          m  when  SIDE = 'L' or 'l'  and is n  otherwise.
  4686.          Before entry  with  SIDE = 'L' or 'l',  the  m by m  part of
  4687.          the array  A  must contain the  symmetric matrix,  such that
  4688.          when  UPLO = 'U' or 'u', the leading m by m upper triangular
  4689.          part of the array  A  must contain the upper triangular part
  4690.          of the  symmetric matrix and the  strictly  lower triangular
  4691.          part of  A  is not referenced,  and when  UPLO = 'L' or 'l',
  4692.          the leading  m by m  lower triangular part  of the  array  A
  4693.          must  contain  the  lower triangular part  of the  symmetric
  4694.          matrix and the  strictly upper triangular part of  A  is not
  4695.          referenced.
  4696.          Before entry  with  SIDE = 'R' or 'r',  the  n by n  part of
  4697.          the array  A  must contain the  symmetric matrix,  such that
  4698.          when  UPLO = 'U' or 'u', the leading n by n upper triangular
  4699.          part of the array  A  must contain the upper triangular part
  4700.          of the  symmetric matrix and the  strictly  lower triangular
  4701.          part of  A  is not referenced,  and when  UPLO = 'L' or 'l',
  4702.          the leading  n by n  lower triangular part  of the  array  A
  4703.          must  contain  the  lower triangular part  of the  symmetric
  4704.          matrix and the  strictly upper triangular part of  A  is not
  4705.          referenced.
  4706.          Unchanged on exit.
  4707.  
  4708. LDA    - INTEGER.
  4709.          On entry, LDA specifies the first dimension of A as declared
  4710.          in the  calling (sub) program. When  SIDE = 'L' or 'l'  then
  4711.          LDA must be at least  max( 1, m ), otherwise  LDA must be at
  4712.          least max( 1, n ).
  4713.          Unchanged on exit.
  4714.  
  4715. B      - COMPLEX          array of DIMENSION ( LDB, n ).
  4716.          Before entry, the leading  m by n part of the array  B  must
  4717.          contain the matrix B.
  4718.          Unchanged on exit.
  4719.  
  4720. LDB    - INTEGER.
  4721.          On entry, LDB specifies the first dimension of B as declared
  4722.          in  the  calling  (sub)  program.   LDB  must  be  at  least
  4723.          max( 1, m ).
  4724.          Unchanged on exit.
  4725.  
  4726. BETA   - COMPLEX         .
  4727.          On entry,  BETA  specifies the scalar  beta.  When  BETA  is
  4728.          supplied as zero then C need not be set on input.
  4729.          Unchanged on exit.
  4730.  
  4731. C      - COMPLEX          array of DIMENSION ( LDC, n ).
  4732.          Before entry, the leading  m by n  part of the array  C must
  4733.          contain the matrix  C,  except when  beta  is zero, in which
  4734.          case C need not be set on entry.
  4735.          On exit, the array  C  is overwritten by the  m by n updated
  4736.          matrix.
  4737.  
  4738. LDC    - INTEGER.
  4739.          On entry, LDC specifies the first dimension of C as declared
  4740.          in  the  calling  (sub)  program.   LDC  must  be  at  least
  4741.          max( 1, m ).
  4742.          Unchanged on exit.
  4743.  
  4744.  
  4745. SUBROUTINE CHEMM(SIDE,UPLO,M,N,ALPHA,A,LDA,B,LDB,BETA,C,LDC)
  4746.  
  4747. CHEMM  performs one of the matrix-matrix operations
  4748.  
  4749.    C := alpha*A*B + beta*C,
  4750.  
  4751. or
  4752.  
  4753.    C := alpha*B*A + beta*C,
  4754.  
  4755. where alpha and beta are scalars, A is an hermitian matrix and  B and
  4756. C are m by n matrices.
  4757.  
  4758. SIDE   - CHARACTER*1.
  4759.          On entry,  SIDE  specifies whether  the  hermitian matrix  A
  4760.          appears on the  left or right  in the  operation as follows:
  4761.  
  4762.             SIDE = 'L' or 'l'   C := alpha*A*B + beta*C,
  4763.  
  4764.             SIDE = 'R' or 'r'   C := alpha*B*A + beta*C,
  4765.  
  4766.          Unchanged on exit.
  4767.  
  4768. UPLO   - CHARACTER*1.
  4769.          On  entry,   UPLO  specifies  whether  the  upper  of  lower
  4770.          triangular  part  of  the  hermitian  matrix   A  is  to  be
  4771.          referenced as follows:
  4772.  
  4773.             UPLO = 'U' or 'u'   Only the upper triangular part of the
  4774.                                 hermitian matrix is to be referenced.
  4775.  
  4776.             UPLO = 'L' or 'l'   Only the lower triangular part of the
  4777.                                 hermitian matrix is to be referenced.
  4778.  
  4779.          Unchanged on exit.
  4780.  
  4781. M      - INTEGER.
  4782.          On entry,  M  specifies the number of rows of the matrix  C.
  4783.          M  must be at least zero.
  4784.          Unchanged on exit.
  4785.  
  4786. N      - INTEGER.
  4787.          On entry, N specifies the number of columns of the matrix C.
  4788.          N  must be at least zero.
  4789.          Unchanged on exit.
  4790.  
  4791. ALPHA  - COMPLEX         .
  4792.          On entry, ALPHA specifies the scalar alpha.
  4793.          Unchanged on exit.
  4794.  
  4795. A      - COMPLEX          array of DIMENSION ( LDA, ka ), where ka is
  4796.          m  when  SIDE = 'L' or 'l'  and is n  otherwise.
  4797.          Before entry  with  SIDE = 'L' or 'l',  the  m by m  part of
  4798.          the array  A  must contain the  hermitian matrix,  such that
  4799.          when  UPLO = 'U' or 'u', the leading m by m upper triangular
  4800.          part of the array  A  must contain the upper triangular part
  4801.          of the  hermitian matrix and the  strictly  lower triangular
  4802.          part of  A  is not referenced,  and when  UPLO = 'L' or 'l',
  4803.          the leading  m by m  lower triangular part  of the  array  A
  4804.          must  contain  the  lower triangular part  of the  hermitian
  4805.          matrix and the  strictly upper triangular part of  A  is not
  4806.          referenced.
  4807.          Before entry  with  SIDE = 'R' or 'r',  the  n by n  part of
  4808.          the array  A  must contain the  hermitian matrix,  such that
  4809.          when  UPLO = 'U' or 'u', the leading n by n upper triangular
  4810.          part of the array  A  must contain the upper triangular part
  4811.          of the  hermitian matrix and the  strictly  lower triangular
  4812.          part of  A  is not referenced,  and when  UPLO = 'L' or 'l',
  4813.          the leading  n by n  lower triangular part  of the  array  A
  4814.          must  contain  the  lower triangular part  of the  hermitian
  4815.          matrix and the  strictly upper triangular part of  A  is not
  4816.          referenced.
  4817.          Note that the imaginary parts  of the diagonal elements need
  4818.          not be set, they are assumed to be zero.
  4819.          Unchanged on exit.
  4820.  
  4821. LDA    - INTEGER.
  4822.          On entry, LDA specifies the first dimension of A as declared
  4823.          in the  calling (sub) program. When  SIDE = 'L' or 'l'  then
  4824.          LDA must be at least  max( 1, m ), otherwise  LDA must be at
  4825.          least max( 1, n ).
  4826.          Unchanged on exit.
  4827.  
  4828. B      - COMPLEX          array of DIMENSION ( LDB, n ).
  4829.          Before entry, the leading  m by n part of the array  B  must
  4830.          contain the matrix B.
  4831.          Unchanged on exit.
  4832.  
  4833. LDB    - INTEGER.
  4834.          On entry, LDB specifies the first dimension of B as declared
  4835.          in  the  calling  (sub)  program.   LDB  must  be  at  least
  4836.          max( 1, m ).
  4837.          Unchanged on exit.
  4838.  
  4839. BETA   - COMPLEX         .
  4840.          On entry,  BETA  specifies the scalar  beta.  When  BETA  is
  4841.          supplied as zero then C need not be set on input.
  4842.          Unchanged on exit.
  4843.  
  4844. C      - COMPLEX          array of DIMENSION ( LDC, n ).
  4845.          Before entry, the leading  m by n  part of the array  C must
  4846.          contain the matrix  C,  except when  beta  is zero, in which
  4847.          case C need not be set on entry.
  4848.          On exit, the array  C  is overwritten by the  m by n updated
  4849.          matrix.
  4850.  
  4851. LDC    - INTEGER.
  4852.          On entry, LDC specifies the first dimension of C as declared
  4853.          in  the  calling  (sub)  program.   LDC  must  be  at  least
  4854.          max( 1, m ).
  4855.          Unchanged on exit.
  4856.  
  4857.  
  4858. SUBROUTINE CSYRK(UPLO,TRANS,N,K,ALPHA,A,LDA,BETA,C,LDC)
  4859.  
  4860. CSYRK  performs one of the symmetric rank k operations
  4861.  
  4862.    C := alpha*A*A' + beta*C,
  4863.  
  4864. or
  4865.  
  4866.    C := alpha*A'*A + beta*C,
  4867.  
  4868. where  alpha and beta  are scalars,  C is an  n by n symmetric matrix
  4869. and  A  is an  n by k  matrix in the first case and a  k by n  matrix
  4870. in the second case.
  4871.  
  4872. UPLO   - CHARACTER*1.
  4873.          On  entry,   UPLO  specifies  whether  the  upper  or  lower
  4874.          triangular  part  of the  array  C  is to be  referenced  as
  4875.          follows:
  4876.  
  4877.             UPLO = 'U' or 'u'   Only the  upper triangular part of  C
  4878.                                 is to be referenced.
  4879.  
  4880.             UPLO = 'L' or 'l'   Only the  lower triangular part of  C
  4881.                                 is to be referenced.
  4882.  
  4883.          Unchanged on exit.
  4884.  
  4885. TRANS  - CHARACTER*1.
  4886.          On entry,  TRANS  specifies the operation to be performed as
  4887.          follows:
  4888.  
  4889.             TRANS = 'N' or 'n'   C := alpha*A*A' + beta*C.
  4890.  
  4891.             TRANS = 'T' or 't'   C := alpha*A'*A + beta*C.
  4892.  
  4893.          Unchanged on exit.
  4894.  
  4895. N      - INTEGER.
  4896.          On entry,  N specifies the order of the matrix C.  N must be
  4897.          at least zero.
  4898.          Unchanged on exit.
  4899.  
  4900. K      - INTEGER.
  4901.          On entry with  TRANS = 'N' or 'n',  K  specifies  the number
  4902.          of  columns   of  the   matrix   A,   and  on   entry   with
  4903.          TRANS = 'T' or 't',  K  specifies  the number of rows of the
  4904.          matrix A.  K must be at least zero.
  4905.          Unchanged on exit.
  4906.  
  4907. ALPHA  - COMPLEX         .
  4908.          On entry, ALPHA specifies the scalar alpha.
  4909.          Unchanged on exit.
  4910.  
  4911. A      - COMPLEX          array of DIMENSION ( LDA, ka ), where ka is
  4912.          k  when  TRANS = 'N' or 'n',  and is  n  otherwise.
  4913.          Before entry with  TRANS = 'N' or 'n',  the  leading  n by k
  4914.          part of the array  A  must contain the matrix  A,  otherwise
  4915.          the leading  k by n  part of the array  A  must contain  the
  4916.          matrix A.
  4917.          Unchanged on exit.
  4918.  
  4919. LDA    - INTEGER.
  4920.          On entry, LDA specifies the first dimension of A as declared
  4921.          in  the  calling  (sub)  program.   When  TRANS = 'N' or 'n'
  4922.          then  LDA must be at least  max( 1, n ), otherwise  LDA must
  4923.          be at least  max( 1, k ).
  4924.          Unchanged on exit.
  4925.  
  4926. BETA   - COMPLEX         .
  4927.          On entry, BETA specifies the scalar beta.
  4928.          Unchanged on exit.
  4929.  
  4930. C      - COMPLEX          array of DIMENSION ( LDC, n ).
  4931.          Before entry  with  UPLO = 'U' or 'u',  the leading  n by n
  4932.          upper triangular part of the array C must contain the upper
  4933.          triangular part  of the  symmetric matrix  and the strictly
  4934.          lower triangular part of C is not referenced.  On exit, the
  4935.          upper triangular part of the array  C is overwritten by the
  4936.          upper triangular part of the updated matrix.
  4937.          Before entry  with  UPLO = 'L' or 'l',  the leading  n by n
  4938.          lower triangular part of the array C must contain the lower
  4939.          triangular part  of the  symmetric matrix  and the strictly
  4940.          upper triangular part of C is not referenced.  On exit, the
  4941.          lower triangular part of the array  C is overwritten by the
  4942.          lower triangular part of the updated matrix.
  4943.  
  4944. LDC    - INTEGER.
  4945.          On entry, LDC specifies the first dimension of C as declared
  4946.          in  the  calling  (sub)  program.   LDC  must  be  at  least
  4947.          max( 1, n ).
  4948.          Unchanged on exit.
  4949.  
  4950.  
  4951. SUBROUTINE CHERK(UPLO,TRANS,N,K,ALPHA,A,LDA,BETA,C,LDC)
  4952.  
  4953. CHERK  performs one of the hermitian rank k operations
  4954.  
  4955.    C := alpha*A*conjg( A' ) + beta*C,
  4956.  
  4957. or
  4958.  
  4959.    C := alpha*conjg( A' )*A + beta*C,
  4960.  
  4961. where  alpha and beta  are  real scalars,  C is an  n by n  hermitian
  4962. matrix and  A  is an  n by k  matrix in the  first case and a  k by n
  4963. matrix in the second case.
  4964.  
  4965. UPLO   - CHARACTER*1.
  4966.          On  entry,   UPLO  specifies  whether  the  upper  or  lower
  4967.          triangular  part  of the  array  C  is to be  referenced  as
  4968.          follows:
  4969.  
  4970.             UPLO = 'U' or 'u'   Only the  upper triangular part of  C
  4971.                                 is to be referenced.
  4972.  
  4973.             UPLO = 'L' or 'l'   Only the  lower triangular part of  C
  4974.                                 is to be referenced.
  4975.  
  4976.          Unchanged on exit.
  4977.  
  4978. TRANS  - CHARACTER*1.
  4979.          On entry,  TRANS  specifies the operation to be performed as
  4980.          follows:
  4981.  
  4982.             TRANS = 'N' or 'n'   C := alpha*A*conjg( A' ) + beta*C.
  4983.  
  4984.             TRANS = 'C' or 'c'   C := alpha*conjg( A' )*A + beta*C.
  4985.  
  4986.          Unchanged on exit.
  4987.  
  4988. N      - INTEGER.
  4989.          On entry,  N specifies the order of the matrix C.  N must be
  4990.          at least zero.
  4991.          Unchanged on exit.
  4992.  
  4993. K      - INTEGER.
  4994.          On entry with  TRANS = 'N' or 'n',  K  specifies  the number
  4995.          of  columns   of  the   matrix   A,   and  on   entry   with
  4996.          TRANS = 'C' or 'c',  K  specifies  the number of rows of the
  4997.          matrix A.  K must be at least zero.
  4998.          Unchanged on exit.
  4999.  
  5000. ALPHA  - REAL            .
  5001.          On entry, ALPHA specifies the scalar alpha.
  5002.          Unchanged on exit.
  5003.  
  5004. A      - COMPLEX          array of DIMENSION ( LDA, ka ), where ka is
  5005.          k  when  TRANS = 'N' or 'n',  and is  n  otherwise.
  5006.          Before entry with  TRANS = 'N' or 'n',  the  leading  n by k
  5007.          part of the array  A  must contain the matrix  A,  otherwise
  5008.          the leading  k by n  part of the array  A  must contain  the
  5009.          matrix A.
  5010.          Unchanged on exit.
  5011.  
  5012. LDA    - INTEGER.
  5013.          On entry, LDA specifies the first dimension of A as declared
  5014.          in  the  calling  (sub)  program.   When  TRANS = 'N' or 'n'
  5015.          then  LDA must be at least  max( 1, n ), otherwise  LDA must
  5016.          be at least  max( 1, k ).
  5017.          Unchanged on exit.
  5018.  
  5019. BETA   - REAL            .
  5020.          On entry, BETA specifies the scalar beta.
  5021.          Unchanged on exit.
  5022.  
  5023. C      - COMPLEX          array of DIMENSION ( LDC, n ).
  5024.          Before entry  with  UPLO = 'U' or 'u',  the leading  n by n
  5025.          upper triangular part of the array C must contain the upper
  5026.          triangular part  of the  hermitian matrix  and the strictly
  5027.          lower triangular part of C is not referenced.  On exit, the
  5028.          upper triangular part of the array  C is overwritten by the
  5029.          upper triangular part of the updated matrix.
  5030.          Before entry  with  UPLO = 'L' or 'l',  the leading  n by n
  5031.          lower triangular part of the array C must contain the lower
  5032.          triangular part  of the  hermitian matrix  and the strictly
  5033.          upper triangular part of C is not referenced.  On exit, the
  5034.          lower triangular part of the array  C is overwritten by the
  5035.          lower triangular part of the updated matrix.
  5036.          Note that the imaginary parts of the diagonal elements need
  5037.          not be set,  they are assumed to be zero,  and on exit they
  5038.          are set to zero.
  5039.  
  5040. LDC    - INTEGER.
  5041.          On entry, LDC specifies the first dimension of C as declared
  5042.          in  the  calling  (sub)  program.   LDC  must  be  at  least
  5043.          max( 1, n ).
  5044.          Unchanged on exit.
  5045.  
  5046.  
  5047. SUBROUTINE CSYR2K(UPLO,TRANS,N,K,ALPHA,A,LDA,B,LDB,BETA,C,LDC)
  5048.  
  5049. CSYR2K  performs one of the symmetric rank 2k operations
  5050.  
  5051.    C := alpha*A*B' + alpha*B*A' + beta*C,
  5052.  
  5053. or
  5054.  
  5055.    C := alpha*A'*B + alpha*B'*A + beta*C,
  5056.  
  5057. where  alpha and beta  are scalars,  C is an  n by n symmetric matrix
  5058. and  A and B  are  n by k  matrices  in the  first  case  and  k by n
  5059. matrices in the second case.
  5060.  
  5061. UPLO   - CHARACTER*1.
  5062.          On  entry,   UPLO  specifies  whether  the  upper  or  lower
  5063.          triangular  part  of the  array  C  is to be  referenced  as
  5064.          follows:
  5065.  
  5066.             UPLO = 'U' or 'u'   Only the  upper triangular part of  C
  5067.                                 is to be referenced.
  5068.  
  5069.             UPLO = 'L' or 'l'   Only the  lower triangular part of  C
  5070.                                 is to be referenced.
  5071.  
  5072.          Unchanged on exit.
  5073.  
  5074. TRANS  - CHARACTER*1.
  5075.          On entry,  TRANS  specifies the operation to be performed as
  5076.          follows:
  5077.  
  5078.             TRANS = 'N' or 'n'    C := alpha*A*B' + alpha*B*A' +
  5079.                                        beta*C.
  5080.  
  5081.             TRANS = 'T' or 't'    C := alpha*A'*B + alpha*B'*A +
  5082.                                        beta*C.
  5083.  
  5084.          Unchanged on exit.
  5085.  
  5086. N      - INTEGER.
  5087.          On entry,  N specifies the order of the matrix C.  N must be
  5088.          at least zero.
  5089.          Unchanged on exit.
  5090.  
  5091. K      - INTEGER.
  5092.          On entry with  TRANS = 'N' or 'n',  K  specifies  the number
  5093.          of  columns  of the  matrices  A and B,  and on  entry  with
  5094.          TRANS = 'T' or 't',  K  specifies  the number of rows of the
  5095.          matrices  A and B.  K must be at least zero.
  5096.          Unchanged on exit.
  5097.  
  5098. ALPHA  - COMPLEX         .
  5099.          On entry, ALPHA specifies the scalar alpha.
  5100.          Unchanged on exit.
  5101.  
  5102. A      - COMPLEX          array of DIMENSION ( LDA, ka ), where ka is
  5103.          k  when  TRANS = 'N' or 'n',  and is  n  otherwise.
  5104.          Before entry with  TRANS = 'N' or 'n',  the  leading  n by k
  5105.          part of the array  A  must contain the matrix  A,  otherwise
  5106.          the leading  k by n  part of the array  A  must contain  the
  5107.          matrix A.
  5108.          Unchanged on exit.
  5109.  
  5110. LDA    - INTEGER.
  5111.          On entry, LDA specifies the first dimension of A as declared
  5112.          in  the  calling  (sub)  program.   When  TRANS = 'N' or 'n'
  5113.          then  LDA must be at least  max( 1, n ), otherwise  LDA must
  5114.          be at least  max( 1, k ).
  5115.          Unchanged on exit.
  5116.  
  5117. B      - COMPLEX          array of DIMENSION ( LDB, kb ), where kb is
  5118.          k  when  TRANS = 'N' or 'n',  and is  n  otherwise.
  5119.          Before entry with  TRANS = 'N' or 'n',  the  leading  n by k
  5120.          part of the array  B  must contain the matrix  B,  otherwise
  5121.          the leading  k by n  part of the array  B  must contain  the
  5122.          matrix B.
  5123.          Unchanged on exit.
  5124.  
  5125. LDB    - INTEGER.
  5126.          On entry, LDB specifies the first dimension of B as declared
  5127.          in  the  calling  (sub)  program.   When  TRANS = 'N' or 'n'
  5128.          then  LDB must be at least  max( 1, n ), otherwise  LDB must
  5129.          be at least  max( 1, k ).
  5130.          Unchanged on exit.
  5131.  
  5132. BETA   - COMPLEX         .
  5133.          On entry, BETA specifies the scalar beta.
  5134.          Unchanged on exit.
  5135.  
  5136. C      - COMPLEX          array of DIMENSION ( LDC, n ).
  5137.          Before entry  with  UPLO = 'U' or 'u',  the leading  n by n
  5138.          upper triangular part of the array C must contain the upper
  5139.          triangular part  of the  symmetric matrix  and the strictly
  5140.          lower triangular part of C is not referenced.  On exit, the
  5141.          upper triangular part of the array  C is overwritten by the
  5142.          upper triangular part of the updated matrix.
  5143.          Before entry  with  UPLO = 'L' or 'l',  the leading  n by n
  5144.          lower triangular part of the array C must contain the lower
  5145.          triangular part  of the  symmetric matrix  and the strictly
  5146.          upper triangular part of C is not referenced.  On exit, the
  5147.          lower triangular part of the array  C is overwritten by the
  5148.          lower triangular part of the updated matrix.
  5149.  
  5150. LDC    - INTEGER.
  5151.          On entry, LDC specifies the first dimension of C as declared
  5152.          in  the  calling  (sub)  program.   LDC  must  be  at  least
  5153.          max( 1, n ).
  5154.          Unchanged on exit.
  5155.  
  5156.  
  5157. SUBROUTINE CHER2K(UPLO,TRANS,N,K,ALPHA,A,LDA,B,LDB,BETA,C,LDC)
  5158.  
  5159. CHER2K  performs one of the hermitian rank 2k operations
  5160.  
  5161.    C := alpha*A*conjg( B' ) + conjg( alpha )*B*conjg( A' ) + beta*C,
  5162.  
  5163. or
  5164.  
  5165.    C := alpha*conjg( A' )*B + conjg( alpha )*conjg( B' )*A + beta*C,
  5166.  
  5167. where  alpha and beta  are scalars with  beta  real,  C is an  n by n
  5168. hermitian matrix and  A and B  are  n by k matrices in the first case
  5169. and  k by n  matrices in the second case.
  5170.  
  5171. UPLO   - CHARACTER*1.
  5172.          On  entry,   UPLO  specifies  whether  the  upper  or  lower
  5173.          triangular  part  of the  array  C  is to be  referenced  as
  5174.          follows:
  5175.  
  5176.             UPLO = 'U' or 'u'   Only the  upper triangular part of  C
  5177.                                 is to be referenced.
  5178.  
  5179.             UPLO = 'L' or 'l'   Only the  lower triangular part of  C
  5180.                                 is to be referenced.
  5181.  
  5182.          Unchanged on exit.
  5183.  
  5184. TRANS  - CHARACTER*1.
  5185.          On entry,  TRANS  specifies the operation to be performed as
  5186.          follows:
  5187.  
  5188.             TRANS = 'N' or 'n'    C := alpha*A*conjg( B' )          +
  5189.                                        conjg( alpha )*B*conjg( A' ) +
  5190.                                        beta*C.
  5191.  
  5192.             TRANS = 'C' or 'c'    C := alpha*conjg( A' )*B          +
  5193.                                        conjg( alpha )*conjg( B' )*A +
  5194.                                        beta*C.
  5195.  
  5196.          Unchanged on exit.
  5197.  
  5198. N      - INTEGER.
  5199.          On entry,  N specifies the order of the matrix C.  N must be
  5200.          at least zero.
  5201.          Unchanged on exit.
  5202.  
  5203. K      - INTEGER.
  5204.          On entry with  TRANS = 'N' or 'n',  K  specifies  the number
  5205.          of  columns  of the  matrices  A and B,  and on  entry  with
  5206.          TRANS = 'C' or 'c',  K  specifies  the number of rows of the
  5207.          matrices  A and B.  K must be at least zero.
  5208.          Unchanged on exit.
  5209.  
  5210. ALPHA  - COMPLEX         .
  5211.          On entry, ALPHA specifies the scalar alpha.
  5212.          Unchanged on exit.
  5213.  
  5214. A      - COMPLEX          array of DIMENSION ( LDA, ka ), where ka is
  5215.          k  when  TRANS = 'N' or 'n',  and is  n  otherwise.
  5216.          Before entry with  TRANS = 'N' or 'n',  the  leading  n by k
  5217.          part of the array  A  must contain the matrix  A,  otherwise
  5218.          the leading  k by n  part of the array  A  must contain  the
  5219.          matrix A.
  5220.          Unchanged on exit.
  5221.  
  5222. LDA    - INTEGER.
  5223.          On entry, LDA specifies the first dimension of A as declared
  5224.          in  the  calling  (sub)  program.   When  TRANS = 'N' or 'n'
  5225.          then  LDA must be at least  max( 1, n ), otherwise  LDA must
  5226.          be at least  max( 1, k ).
  5227.          Unchanged on exit.
  5228.  
  5229. B      - COMPLEX          array of DIMENSION ( LDB, kb ), where kb is
  5230.          k  when  TRANS = 'N' or 'n',  and is  n  otherwise.
  5231.          Before entry with  TRANS = 'N' or 'n',  the  leading  n by k
  5232.          part of the array  B  must contain the matrix  B,  otherwise
  5233.          the leading  k by n  part of the array  B  must contain  the
  5234.          matrix B.
  5235.          Unchanged on exit.
  5236.  
  5237. LDB    - INTEGER.
  5238.          On entry, LDB specifies the first dimension of B as declared
  5239.          in  the  calling  (sub)  program.   When  TRANS = 'N' or 'n'
  5240.          then  LDB must be at least  max( 1, n ), otherwise  LDB must
  5241.          be at least  max( 1, k ).
  5242.          Unchanged on exit.
  5243.  
  5244. BETA   - REAL            .
  5245.          On entry, BETA specifies the scalar beta.
  5246.          Unchanged on exit.
  5247.  
  5248. C      - COMPLEX          array of DIMENSION ( LDC, n ).
  5249.          Before entry  with  UPLO = 'U' or 'u',  the leading  n by n
  5250.          upper triangular part of the array C must contain the upper
  5251.          triangular part  of the  hermitian matrix  and the strictly
  5252.          lower triangular part of C is not referenced.  On exit, the
  5253.          upper triangular part of the array  C is overwritten by the
  5254.          upper triangular part of the updated matrix.
  5255.          Before entry  with  UPLO = 'L' or 'l',  the leading  n by n
  5256.          lower triangular part of the array C must contain the lower
  5257.          triangular part  of the  hermitian matrix  and the strictly
  5258.          upper triangular part of C is not referenced.  On exit, the
  5259.          lower triangular part of the array  C is overwritten by the
  5260.          lower triangular part of the updated matrix.
  5261.          Note that the imaginary parts of the diagonal elements need
  5262.          not be set,  they are assumed to be zero,  and on exit they
  5263.          are set to zero.
  5264.  
  5265. LDC    - INTEGER.
  5266.          On entry, LDC specifies the first dimension of C as declared
  5267.          in  the  calling  (sub)  program.   LDC  must  be  at  least
  5268.          max( 1, n ).
  5269.          Unchanged on exit.
  5270.  
  5271.  
  5272. SUBROUTINE CTRMM(SIDE,UPLO,TRANSA,DIAG,M,N,ALPHA,A,LDA,B,LDB)
  5273.  
  5274. CTRMM  performs one of the matrix-matrix operations
  5275.  
  5276.    B := alpha*op( A )*B,   or   B := alpha*B*op( A )
  5277.  
  5278. where  alpha  is a scalar,  B  is an m by n matrix,  A  is a unit, or
  5279. non-unit,  upper or lower triangular matrix  and  op( A )  is one  of
  5280.  
  5281.    op( A ) = A   or   op( A ) = A'   or   op( A ) = conjg( A' ).
  5282.  
  5283. SIDE   - CHARACTER*1.
  5284.          On entry,  SIDE specifies whether  op( A ) multiplies B from
  5285.          the left or right as follows:
  5286.  
  5287.             SIDE = 'L' or 'l'   B := alpha*op( A )*B.
  5288.  
  5289.             SIDE = 'R' or 'r'   B := alpha*B*op( A ).
  5290.  
  5291.          Unchanged on exit.
  5292.  
  5293. UPLO   - CHARACTER*1.
  5294.          On entry, UPLO specifies whether the matrix A is an upper or
  5295.          lower triangular matrix as follows:
  5296.  
  5297.             UPLO = 'U' or 'u'   A is an upper triangular matrix.
  5298.  
  5299.             UPLO = 'L' or 'l'   A is a lower triangular matrix.
  5300.  
  5301.          Unchanged on exit.
  5302.  
  5303. TRANSA - CHARACTER*1.
  5304.          On entry, TRANSA specifies the form of op( A ) to be used in
  5305.          the matrix multiplication as follows:
  5306.  
  5307.             TRANSA = 'N' or 'n'   op( A ) = A.
  5308.  
  5309.             TRANSA = 'T' or 't'   op( A ) = A'.
  5310.  
  5311.             TRANSA = 'C' or 'c'   op( A ) = conjg( A' ).
  5312.  
  5313.          Unchanged on exit.
  5314.  
  5315. DIAG   - CHARACTER*1.
  5316.          On entry, DIAG specifies whether or not A is unit triangular
  5317.          as follows:
  5318.  
  5319.             DIAG = 'U' or 'u'   A is assumed to be unit triangular.
  5320.  
  5321.             DIAG = 'N' or 'n'   A is not assumed to be unit
  5322.                                 triangular.
  5323.  
  5324.          Unchanged on exit.
  5325.  
  5326. M      - INTEGER.
  5327.          On entry, M specifies the number of rows of B. M must be at
  5328.          least zero.
  5329.          Unchanged on exit.
  5330.  
  5331. N      - INTEGER.
  5332.          On entry, N specifies the number of columns of B.  N must be
  5333.          at least zero.
  5334.          Unchanged on exit.
  5335.  
  5336. ALPHA  - COMPLEX         .
  5337.          On entry,  ALPHA specifies the scalar  alpha. When  alpha is
  5338.          zero then  A is not referenced and  B need not be set before
  5339.          entry.
  5340.          Unchanged on exit.
  5341.  
  5342. A      - COMPLEX          array of DIMENSION ( LDA, k ), where k is m
  5343.          when  SIDE = 'L' or 'l'  and is  n  when  SIDE = 'R' or 'r'.
  5344.          Before entry  with  UPLO = 'U' or 'u',  the  leading  k by k
  5345.          upper triangular part of the array  A must contain the upper
  5346.          triangular matrix  and the strictly lower triangular part of
  5347.          A is not referenced.
  5348.          Before entry  with  UPLO = 'L' or 'l',  the  leading  k by k
  5349.          lower triangular part of the array  A must contain the lower
  5350.          triangular matrix  and the strictly upper triangular part of
  5351.          A is not referenced.
  5352.          Note that when  DIAG = 'U' or 'u',  the diagonal elements of
  5353.          A  are not referenced either,  but are assumed to be  unity.
  5354.          Unchanged on exit.
  5355.  
  5356. LDA    - INTEGER.
  5357.          On entry, LDA specifies the first dimension of A as declared
  5358.          in the calling (sub) program.  When  SIDE = 'L' or 'l'  then
  5359.          LDA  must be at least  max( 1, m ),  when  SIDE = 'R' or 'r'
  5360.          then LDA must be at least max( 1, n ).
  5361.          Unchanged on exit.
  5362.  
  5363. B      - COMPLEX          array of DIMENSION ( LDB, n ).
  5364.          Before entry,  the leading  m by n part of the array  B must
  5365.          contain the matrix  B,  and  on exit  is overwritten  by the
  5366.          transformed matrix.
  5367.  
  5368. LDB    - INTEGER.
  5369.          On entry, LDB specifies the first dimension of B as declared
  5370.          in  the  calling  (sub)  program.   LDB  must  be  at  least
  5371.          max( 1, m ).
  5372.          Unchanged on exit.
  5373.  
  5374.  
  5375. SUBROUTINE CTRSM(SIDE,UPLO,TRANSA,DIAG,M,N,ALPHA,A,LDA,B,LDB)
  5376.  
  5377. CTRSM  solves one of the matrix equations
  5378.  
  5379.    op( A )*X = alpha*B,   or   X*op( A ) = alpha*B,
  5380.  
  5381. where alpha is a scalar, X and B are m by n matrices, A is a unit, or
  5382. non-unit,  upper or lower triangular matrix  and  op( A )  is one  of
  5383.  
  5384.    op( A ) = A   or   op( A ) = A'   or   op( A ) = conjg( A' ).
  5385.  
  5386. The matrix X is overwritten on B.
  5387.  
  5388. SIDE   - CHARACTER*1.
  5389.          On entry, SIDE specifies whether op( A ) appears on the left
  5390.          or right of X as follows:
  5391.  
  5392.             SIDE = 'L' or 'l'   op( A )*X = alpha*B.
  5393.  
  5394.             SIDE = 'R' or 'r'   X*op( A ) = alpha*B.
  5395.  
  5396.          Unchanged on exit.
  5397.  
  5398. UPLO   - CHARACTER*1.
  5399.          On entry, UPLO specifies whether the matrix A is an upper or
  5400.          lower triangular matrix as follows:
  5401.  
  5402.             UPLO = 'U' or 'u'   A is an upper triangular matrix.
  5403.  
  5404.             UPLO = 'L' or 'l'   A is a lower triangular matrix.
  5405.  
  5406.          Unchanged on exit.
  5407.  
  5408. TRANSA - CHARACTER*1.
  5409.          On entry, TRANSA specifies the form of op( A ) to be used in
  5410.          the matrix multiplication as follows:
  5411.  
  5412.             TRANSA = 'N' or 'n'   op( A ) = A.
  5413.  
  5414.             TRANSA = 'T' or 't'   op( A ) = A'.
  5415.  
  5416.             TRANSA = 'C' or 'c'   op( A ) = conjg( A' ).
  5417.  
  5418.          Unchanged on exit.
  5419.  
  5420. DIAG   - CHARACTER*1.
  5421.          On entry, DIAG specifies whether or not A is unit triangular
  5422.          as follows:
  5423.  
  5424.             DIAG = 'U' or 'u'   A is assumed to be unit triangular.
  5425.  
  5426.             DIAG = 'N' or 'n'   A is not assumed to be unit
  5427.                                 triangular.
  5428.  
  5429.          Unchanged on exit.
  5430.  
  5431. M      - INTEGER.
  5432.          On entry, M specifies the number of rows of B. M must be at
  5433.          least zero.
  5434.          Unchanged on exit.
  5435.  
  5436. N      - INTEGER.
  5437.          On entry, N specifies the number of columns of B.  N must be
  5438.          at least zero.
  5439.          Unchanged on exit.
  5440.  
  5441. ALPHA  - COMPLEX         .
  5442.          On entry,  ALPHA specifies the scalar  alpha. When  alpha is
  5443.          zero then  A is not referenced and  B need not be set before
  5444.          entry.
  5445.          Unchanged on exit.
  5446.  
  5447. A      - COMPLEX          array of DIMENSION ( LDA, k ), where k is m
  5448.          when  SIDE = 'L' or 'l'  and is  n  when  SIDE = 'R' or 'r'.
  5449.          Before entry  with  UPLO = 'U' or 'u',  the  leading  k by k
  5450.          upper triangular part of the array  A must contain the upper
  5451.          triangular matrix  and the strictly lower triangular part of
  5452.          A is not referenced.
  5453.          Before entry  with  UPLO = 'L' or 'l',  the  leading  k by k
  5454.          lower triangular part of the array  A must contain the lower
  5455.          triangular matrix  and the strictly upper triangular part of
  5456.          A is not referenced.
  5457.          Note that when  DIAG = 'U' or 'u',  the diagonal elements of
  5458.          A  are not referenced either,  but are assumed to be  unity.
  5459.          Unchanged on exit.
  5460.  
  5461. LDA    - INTEGER.
  5462.          On entry, LDA specifies the first dimension of A as declared
  5463.          in the calling (sub) program.  When  SIDE = 'L' or 'l'  then
  5464.          LDA  must be at least  max( 1, m ),  when  SIDE = 'R' or 'r'
  5465.          then LDA must be at least max( 1, n ).
  5466.          Unchanged on exit.
  5467.  
  5468. B      - COMPLEX          array of DIMENSION ( LDB, n ).
  5469.          Before entry,  the leading  m by n part of the array  B must
  5470.          contain  the  right-hand  side  matrix  B,  and  on exit  is
  5471.          overwritten by the solution matrix  X.
  5472.  
  5473. LDB    - INTEGER.
  5474.          On entry, LDB specifies the first dimension of B as declared
  5475.          in  the  calling  (sub)  program.   LDB  must  be  at  least
  5476.          max( 1, m ).
  5477.          Unchanged on exit.
  5478.  
  5479.  
  5480.