# dsyrk.f

          SUBROUTINE DSYRK (UPLO, TRANS, N, K, ALPHA, A, LDA, BETA, C, LDC)
    C***BEGIN PROLOGUE  DSYRK
    C***PURPOSE  Perform one of the symmetric rank k operations.
    C***LIBRARY   SLATEC (BLAS)
    C***CATEGORY  D1B6
    C***TYPE      DOUBLE PRECISION (SSYRK-S, DSYRK-D, CSYRK-C)
    C***KEYWORDS  LEVEL 3 BLAS, LINEAR ALGEBRA
    C***AUTHOR  Dongarra, J., (ANL)
    C           Duff, I., (AERE)
    C           Du Croz, J., (NAG)
    C           Hammarling, S. (NAG)
    C***DESCRIPTION
    C
    C  DSYRK  performs one of the symmetric rank k operations
    C
    C     C := alpha*A*A' + beta*C,
    C
    C  or
    C
    C     C := alpha*A'*A + beta*C,
    C
    C  where  alpha and beta  are scalars, C is an  n by n  symmetric matrix
    C  and  A  is an  n by k  matrix in the first case and a  k by n  matrix
    C  in the second case.
    C
    C  Parameters
    C  ==========
    C
    C  UPLO   - CHARACTER*1.
    C           On  entry,   UPLO  specifies  whether  the  upper  or  lower
    C           triangular  part  of the  array  C  is to be  referenced  as
    C           follows:
    C
    C              UPLO = 'U' or 'u'   Only the  upper triangular part of  C
    C                                  is to be referenced.
    C
    C              UPLO = 'L' or 'l'   Only the  lower triangular part of  C
    C                                  is to be referenced.
    C
    C           Unchanged on exit.
    C
    C  TRANS  - CHARACTER*1.
    C           On entry,  TRANS  specifies the operation to be performed as
    C           follows:
    C
    C              TRANS = 'N' or 'n'   C := alpha*A*A' + beta*C.
    C
    C              TRANS = 'T' or 't'   C := alpha*A'*A + beta*C.
    C
    C              TRANS = 'C' or 'c'   C := alpha*A'*A + beta*C.
    C
    C           Unchanged on exit.
    C
    C  N      - INTEGER.
    C           On entry,  N specifies the order of the matrix C.  N must be
    C           at least zero.
    C           Unchanged on exit.
    C
    C  K      - INTEGER.
    C           On entry with  TRANS = 'N' or 'n',  K  specifies  the number
    C           of  columns   of  the   matrix   A,   and  on   entry   with
    C           TRANS = 'T' or 't' or 'C' or 'c',  K  specifies  the  number
    C           of rows of the matrix  A.  K must be at least zero.
    C           Unchanged on exit.
    C
    C  ALPHA  - DOUBLE PRECISION.
    C           On entry, ALPHA specifies the scalar alpha.
    C           Unchanged on exit.
    C
    C  A      - DOUBLE PRECISION array of DIMENSION ( LDA, ka ), where ka is
    C           k  when  TRANS = 'N' or 'n',  and is  n  otherwise.
    C           Before entry with  TRANS = 'N' or 'n',  the  leading  n by k
    C           part of the array  A  must contain the matrix  A,  otherwise
    C           the leading  k by n  part of the array  A  must contain  the
    C           matrix A.
    C           Unchanged on exit.
    C
    C  LDA    - INTEGER.
    C           On entry, LDA specifies the first dimension of A as declared
    C           in  the  calling  (sub)  program.   When  TRANS = 'N' or 'n'
    C           then  LDA must be at least  max( 1, n ), otherwise  LDA must
    C           be at least  max( 1, k ).
    C           Unchanged on exit.
    C
    C  BETA   - DOUBLE PRECISION.
    C           On entry, BETA specifies the scalar beta.
    C           Unchanged on exit.
    C
    C  C      - DOUBLE PRECISION array of DIMENSION ( LDC, n ).
    C           Before entry  with  UPLO = 'U' or 'u',  the leading  n by n
    C           upper triangular part of the array C must contain the upper
    C           triangular part  of the  symmetric matrix  and the strictly
    C           lower triangular part of C is not referenced.  On exit, the
    C           upper triangular part of the array  C is overwritten by the
    C           upper triangular part of the updated matrix.
    C           Before entry  with  UPLO = 'L' or 'l',  the leading  n by n
    C           lower triangular part of the array C must contain the lower
    C           triangular part  of the  symmetric matrix  and the strictly
    C           upper triangular part of C is not referenced.  On exit, the
    C           lower triangular part of the array  C is overwritten by the
    C           lower triangular part of the updated matrix.
    C
    C  LDC    - INTEGER.
    C           On entry, LDC specifies the first dimension of C as declared
    C           in  the  calling  (sub)  program.   LDC  must  be  at  least
    C           max( 1, n ).
    C           Unchanged on exit.
    C
    C***REFERENCES  Dongarra, J., Du Croz, J., Duff, I., and Hammarling, S.
    C                 A set of level 3 basic linear algebra subprograms.
    C                 ACM TOMS, Vol. 16, No. 1, pp. 1-17, March 1990.
    C***ROUTINES CALLED  LSAME, XERBLA
    C***REVISION HISTORY  (YYMMDD)
    C   890208  DATE WRITTEN
    C   910605  Modified to meet SLATEC prologue standards.  Only comment
    C           lines were modified.  (BKS)
    C***END PROLOGUE  DSYRK