version 1.6, 2010/12/21 13:51:27
|
version 1.7, 2011/11/21 20:37:09
|
Line 1
|
Line 1
|
SUBROUTINE ZSYMM(SIDE,UPLO,M,N,ALPHA,A,LDA,B,LDB,BETA,C,LDC) |
*> \brief \b ZSYMM |
* .. Scalar Arguments .. |
|
DOUBLE COMPLEX ALPHA,BETA |
|
INTEGER LDA,LDB,LDC,M,N |
|
CHARACTER SIDE,UPLO |
|
* .. |
|
* .. Array Arguments .. |
|
DOUBLE COMPLEX A(LDA,*),B(LDB,*),C(LDC,*) |
|
* .. |
|
* |
* |
* Purpose |
* =========== DOCUMENTATION =========== |
* ======= |
|
* |
* |
* ZSYMM performs one of the matrix-matrix operations |
* Online html documentation available at |
|
* http://www.netlib.org/lapack/explore-html/ |
* |
* |
* C := alpha*A*B + beta*C, |
* Definition: |
|
* =========== |
|
* |
|
* SUBROUTINE ZSYMM(SIDE,UPLO,M,N,ALPHA,A,LDA,B,LDB,BETA,C,LDC) |
|
* |
|
* .. Scalar Arguments .. |
|
* COMPLEX*16 ALPHA,BETA |
|
* INTEGER LDA,LDB,LDC,M,N |
|
* CHARACTER SIDE,UPLO |
|
* .. |
|
* .. Array Arguments .. |
|
* COMPLEX*16 A(LDA,*),B(LDB,*),C(LDC,*) |
|
* .. |
|
* |
|
* |
|
*> \par Purpose: |
|
* ============= |
|
*> |
|
*> \verbatim |
|
*> |
|
*> ZSYMM performs one of the matrix-matrix operations |
|
*> |
|
*> C := alpha*A*B + beta*C, |
|
*> |
|
*> or |
|
*> |
|
*> C := alpha*B*A + beta*C, |
|
*> |
|
*> where alpha and beta are scalars, A is a symmetric matrix and B and |
|
*> C are m by n matrices. |
|
*> \endverbatim |
* |
* |
* or |
* Arguments: |
* |
* ========== |
* C := alpha*B*A + beta*C, |
|
* |
* |
* where alpha and beta are scalars, A is a symmetric matrix and B and |
*> \param[in] SIDE |
* C are m by n matrices. |
*> \verbatim |
|
*> SIDE is CHARACTER*1 |
|
*> On entry, SIDE specifies whether the symmetric matrix A |
|
*> appears on the left or right in the operation as follows: |
|
*> |
|
*> SIDE = 'L' or 'l' C := alpha*A*B + beta*C, |
|
*> |
|
*> SIDE = 'R' or 'r' C := alpha*B*A + beta*C, |
|
*> \endverbatim |
|
*> |
|
*> \param[in] UPLO |
|
*> \verbatim |
|
*> UPLO is CHARACTER*1 |
|
*> On entry, UPLO specifies whether the upper or lower |
|
*> triangular part of the symmetric matrix A is to be |
|
*> referenced as follows: |
|
*> |
|
*> UPLO = 'U' or 'u' Only the upper triangular part of the |
|
*> symmetric matrix is to be referenced. |
|
*> |
|
*> UPLO = 'L' or 'l' Only the lower triangular part of the |
|
*> symmetric matrix is to be referenced. |
|
*> \endverbatim |
|
*> |
|
*> \param[in] M |
|
*> \verbatim |
|
*> M is INTEGER |
|
*> On entry, M specifies the number of rows of the matrix C. |
|
*> M must be at least zero. |
|
*> \endverbatim |
|
*> |
|
*> \param[in] N |
|
*> \verbatim |
|
*> N is INTEGER |
|
*> On entry, N specifies the number of columns of the matrix C. |
|
*> N must be at least zero. |
|
*> \endverbatim |
|
*> |
|
*> \param[in] ALPHA |
|
*> \verbatim |
|
*> ALPHA is COMPLEX*16 |
|
*> On entry, ALPHA specifies the scalar alpha. |
|
*> \endverbatim |
|
*> |
|
*> \param[in] A |
|
*> \verbatim |
|
*> A is COMPLEX*16 array of DIMENSION ( LDA, ka ), where ka is |
|
*> m when SIDE = 'L' or 'l' and is n otherwise. |
|
*> Before entry with SIDE = 'L' or 'l', the m by m part of |
|
*> the array A must contain the symmetric matrix, such that |
|
*> when UPLO = 'U' or 'u', the leading m by m upper triangular |
|
*> part of the array A must contain the upper triangular part |
|
*> of the symmetric matrix and the strictly lower triangular |
|
*> part of A is not referenced, and when UPLO = 'L' or 'l', |
|
*> the leading m by m lower triangular part of the array A |
|
*> must contain the lower triangular part of the symmetric |
|
*> matrix and the strictly upper triangular part of A is not |
|
*> referenced. |
|
*> Before entry with SIDE = 'R' or 'r', the n by n part of |
|
*> the array A must contain the symmetric matrix, such that |
|
*> when UPLO = 'U' or 'u', the leading n by n upper triangular |
|
*> part of the array A must contain the upper triangular part |
|
*> of the symmetric matrix and the strictly lower triangular |
|
*> part of A is not referenced, and when UPLO = 'L' or 'l', |
|
*> the leading n by n lower triangular part of the array A |
|
*> must contain the lower triangular part of the symmetric |
|
*> matrix and the strictly upper triangular part of A is not |
|
*> referenced. |
|
*> \endverbatim |
|
*> |
|
*> \param[in] LDA |
|
*> \verbatim |
|
*> LDA is INTEGER |
|
*> On entry, LDA specifies the first dimension of A as declared |
|
*> in the calling (sub) program. When SIDE = 'L' or 'l' then |
|
*> LDA must be at least max( 1, m ), otherwise LDA must be at |
|
*> least max( 1, n ). |
|
*> \endverbatim |
|
*> |
|
*> \param[in] B |
|
*> \verbatim |
|
*> B is COMPLEX*16 array of DIMENSION ( LDB, n ). |
|
*> Before entry, the leading m by n part of the array B must |
|
*> contain the matrix B. |
|
*> \endverbatim |
|
*> |
|
*> \param[in] LDB |
|
*> \verbatim |
|
*> LDB is INTEGER |
|
*> On entry, LDB specifies the first dimension of B as declared |
|
*> in the calling (sub) program. LDB must be at least |
|
*> max( 1, m ). |
|
*> \endverbatim |
|
*> |
|
*> \param[in] BETA |
|
*> \verbatim |
|
*> BETA is COMPLEX*16 |
|
*> On entry, BETA specifies the scalar beta. When BETA is |
|
*> supplied as zero then C need not be set on input. |
|
*> \endverbatim |
|
*> |
|
*> \param[in,out] C |
|
*> \verbatim |
|
*> C is COMPLEX*16 array of DIMENSION ( LDC, n ). |
|
*> Before entry, the leading m by n part of the array C must |
|
*> contain the matrix C, except when beta is zero, in which |
|
*> case C need not be set on entry. |
|
*> On exit, the array C is overwritten by the m by n updated |
|
*> matrix. |
|
*> \endverbatim |
|
*> |
|
*> \param[in] LDC |
|
*> \verbatim |
|
*> LDC is INTEGER |
|
*> On entry, LDC specifies the first dimension of C as declared |
|
*> in the calling (sub) program. LDC must be at least |
|
*> max( 1, m ). |
|
*> \endverbatim |
|
* |
|
* Authors: |
|
* ======== |
|
* |
|
*> \author Univ. of Tennessee |
|
*> \author Univ. of California Berkeley |
|
*> \author Univ. of Colorado Denver |
|
*> \author NAG Ltd. |
|
* |
|
*> \date November 2011 |
|
* |
|
*> \ingroup complex16_blas_level3 |
|
* |
|
*> \par Further Details: |
|
* ===================== |
|
*> |
|
*> \verbatim |
|
*> |
|
*> Level 3 Blas routine. |
|
*> |
|
*> -- Written on 8-February-1989. |
|
*> Jack Dongarra, Argonne National Laboratory. |
|
*> Iain Duff, AERE Harwell. |
|
*> Jeremy Du Croz, Numerical Algorithms Group Ltd. |
|
*> Sven Hammarling, Numerical Algorithms Group Ltd. |
|
*> \endverbatim |
|
*> |
|
* ===================================================================== |
|
SUBROUTINE ZSYMM(SIDE,UPLO,M,N,ALPHA,A,LDA,B,LDB,BETA,C,LDC) |
* |
* |
* Arguments |
* -- Reference BLAS level3 routine (version 3.4.0) -- |
* ========== |
* -- Reference BLAS is a software package provided by Univ. of Tennessee, -- |
|
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- |
|
* November 2011 |
* |
* |
* SIDE - CHARACTER*1. |
* .. Scalar Arguments .. |
* On entry, SIDE specifies whether the symmetric matrix A |
COMPLEX*16 ALPHA,BETA |
* appears on the left or right in the operation as follows: |
INTEGER LDA,LDB,LDC,M,N |
* |
CHARACTER SIDE,UPLO |
* SIDE = 'L' or 'l' C := alpha*A*B + beta*C, |
* .. |
* |
* .. Array Arguments .. |
* SIDE = 'R' or 'r' C := alpha*B*A + beta*C, |
COMPLEX*16 A(LDA,*),B(LDB,*),C(LDC,*) |
* |
* .. |
* Unchanged on exit. |
|
* |
|
* UPLO - CHARACTER*1. |
|
* On entry, UPLO specifies whether the upper or lower |
|
* triangular part of the symmetric matrix A is to be |
|
* referenced as follows: |
|
* |
|
* UPLO = 'U' or 'u' Only the upper triangular part of the |
|
* symmetric matrix is to be referenced. |
|
* |
|
* UPLO = 'L' or 'l' Only the lower triangular part of the |
|
* symmetric matrix is to be referenced. |
|
* |
|
* Unchanged on exit. |
|
* |
|
* M - INTEGER. |
|
* On entry, M specifies the number of rows of the matrix C. |
|
* M must be at least zero. |
|
* Unchanged on exit. |
|
* |
|
* N - INTEGER. |
|
* On entry, N specifies the number of columns of the matrix C. |
|
* N must be at least zero. |
|
* Unchanged on exit. |
|
* |
|
* ALPHA - COMPLEX*16 . |
|
* On entry, ALPHA specifies the scalar alpha. |
|
* Unchanged on exit. |
|
* |
|
* A - COMPLEX*16 array of DIMENSION ( LDA, ka ), where ka is |
|
* m when SIDE = 'L' or 'l' and is n otherwise. |
|
* Before entry with SIDE = 'L' or 'l', the m by m part of |
|
* the array A must contain the symmetric matrix, such that |
|
* when UPLO = 'U' or 'u', the leading m by m upper triangular |
|
* part of the array A must contain the upper triangular part |
|
* of the symmetric matrix and the strictly lower triangular |
|
* part of A is not referenced, and when UPLO = 'L' or 'l', |
|
* the leading m by m lower triangular part of the array A |
|
* must contain the lower triangular part of the symmetric |
|
* matrix and the strictly upper triangular part of A is not |
|
* referenced. |
|
* Before entry with SIDE = 'R' or 'r', the n by n part of |
|
* the array A must contain the symmetric matrix, such that |
|
* when UPLO = 'U' or 'u', the leading n by n upper triangular |
|
* part of the array A must contain the upper triangular part |
|
* of the symmetric matrix and the strictly lower triangular |
|
* part of A is not referenced, and when UPLO = 'L' or 'l', |
|
* the leading n by n lower triangular part of the array A |
|
* must contain the lower triangular part of the symmetric |
|
* matrix and the strictly upper triangular part of A is not |
|
* referenced. |
|
* Unchanged on exit. |
|
* |
|
* LDA - INTEGER. |
|
* On entry, LDA specifies the first dimension of A as declared |
|
* in the calling (sub) program. When SIDE = 'L' or 'l' then |
|
* LDA must be at least max( 1, m ), otherwise LDA must be at |
|
* least max( 1, n ). |
|
* Unchanged on exit. |
|
* |
|
* B - COMPLEX*16 array of DIMENSION ( LDB, n ). |
|
* Before entry, the leading m by n part of the array B must |
|
* contain the matrix B. |
|
* Unchanged on exit. |
|
* |
|
* LDB - INTEGER. |
|
* On entry, LDB specifies the first dimension of B as declared |
|
* in the calling (sub) program. LDB must be at least |
|
* max( 1, m ). |
|
* Unchanged on exit. |
|
* |
|
* BETA - COMPLEX*16 . |
|
* On entry, BETA specifies the scalar beta. When BETA is |
|
* supplied as zero then C need not be set on input. |
|
* Unchanged on exit. |
|
* |
|
* C - COMPLEX*16 array of DIMENSION ( LDC, n ). |
|
* Before entry, the leading m by n part of the array C must |
|
* contain the matrix C, except when beta is zero, in which |
|
* case C need not be set on entry. |
|
* On exit, the array C is overwritten by the m by n updated |
|
* matrix. |
|
* |
|
* LDC - INTEGER. |
|
* On entry, LDC specifies the first dimension of C as declared |
|
* in the calling (sub) program. LDC must be at least |
|
* max( 1, m ). |
|
* Unchanged on exit. |
|
* |
|
* Further Details |
|
* =============== |
|
* |
|
* Level 3 Blas routine. |
|
* |
|
* -- Written on 8-February-1989. |
|
* Jack Dongarra, Argonne National Laboratory. |
|
* Iain Duff, AERE Harwell. |
|
* Jeremy Du Croz, Numerical Algorithms Group Ltd. |
|
* Sven Hammarling, Numerical Algorithms Group Ltd. |
|
* |
* |
* ===================================================================== |
* ===================================================================== |
* |
* |
Line 146
|
Line 216
|
INTRINSIC MAX |
INTRINSIC MAX |
* .. |
* .. |
* .. Local Scalars .. |
* .. Local Scalars .. |
DOUBLE COMPLEX TEMP1,TEMP2 |
COMPLEX*16 TEMP1,TEMP2 |
INTEGER I,INFO,J,K,NROWA |
INTEGER I,INFO,J,K,NROWA |
LOGICAL UPPER |
LOGICAL UPPER |
* .. |
* .. |
* .. Parameters .. |
* .. Parameters .. |
DOUBLE COMPLEX ONE |
COMPLEX*16 ONE |
PARAMETER (ONE= (1.0D+0,0.0D+0)) |
PARAMETER (ONE= (1.0D+0,0.0D+0)) |
DOUBLE COMPLEX ZERO |
COMPLEX*16 ZERO |
PARAMETER (ZERO= (0.0D+0,0.0D+0)) |
PARAMETER (ZERO= (0.0D+0,0.0D+0)) |
* .. |
* .. |
* |
* |